Marketing Card

marketing_card
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/marketing_card
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing/Marketing Card
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Xavier Morel, qsm-odoo, Julien Castiaux, Tiffany Chang (tic), Gorash, Pierre Paridans, William Braeckman, Mathieu Walravens, Renaud Thiry, Gaetan Vanden Bergh (gavb), Louis Wicket (wil), Maximilien (malb), Victor Piryns (pivi), Levi Siuzdak (sile), Dylan Kiss (dyki), Bruno Boi (boi), nihp-odoo, Shaan Thakkar (THSH), thle-odoo, pish-odoo, Thomas Josse (THJO), Krzysztof Magusiak (krma), saurabh
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - link_tracker
    - utm
    - base
    - web
    - mail
    - base_setup
    - bus
    - web_tour
    - html_editor
    - mass_mailing
    - contacts
    - html_builder
    - social_media
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
    - website
    - google_recaptcha
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES geoip2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
card_campaign_crawler Share campaign Crawler View ir.ui.view qweb New
card_campaign_preview Share campaign ir.ui.view qweb New
card_campaign_view_form card.campaign.view.form card.campaign form New
card_campaign_view_kanban card.campaign.view.kanban card.campaign kanban New
card_campaign_view_search card.campaign.view.search card.campaign search New
card_campaign_view_tree card.campaign.view.list card.campaign list New
card_card_view_list card.card.view.list card.card list New
card_card_view_search card.card.view.search card.card search New
card_template_view_form card.template.view.form card.template form New
common_template common_template ir.ui.view qweb New
mailing_mailing_view_form_inherit_marketing_card mailing.mailing.view.form.inherit.marketing.card mailing.mailing xpath Inherits mass_mailing.view_mail_mass_mailing_form
robots robots ir.ui.view qweb Inherits website.robots
template_1 template_1 ir.ui.view qweb Inherits common_template
template_2 template_2 ir.ui.view qweb Inherits common_template
template_3 template_3 ir.ui.view qweb Inherits common_template
template_4 template_4 ir.ui.view qweb Inherits common_template
template_5 template_5 ir.ui.view qweb Inherits common_template
Models touched (8)

New fields (44)
  • active Boolean
    default=True
  • body_html Html
    readonly=False related='card_template_id.body' render_engine='qweb'
  • card_click_count Integer
    compute='_compute_card_stats'
  • card_count Integer
    compute='_compute_card_stats'
  • card_ids One2many → card.card
    inverse_name='campaign_id' args: 'card.card'
  • card_share_count Integer
    compute='_compute_card_stats'
  • card_template_id Many2one → card.template
    default=_default_card_template_id required=True string='Design' args: 'card.template'
  • content_background Image
    args: 'Background'
  • content_button Char
    args: 'Button'
  • content_header Char
    args: 'Header'
  • content_header_color Char
    args: 'Header Color'
  • content_header_dyn Boolean
    args: 'Is Dynamic Header'
  • content_header_path Char
    args: 'Header Path'
  • content_image1_path Char
    args: 'Dynamic Image 1'
  • content_image2_path Char
    args: 'Dynamic Image 2'
  • content_section Char
    args: 'Section'
  • content_section_dyn Boolean
    args: 'Is Dynamic Section'
  • content_section_path Char
    args: 'Section Path'
  • content_sub_header Char
    args: 'Sub-Header'
  • content_sub_header_color Char
    args: 'Sub Header Color'
  • content_sub_header_dyn Boolean
    args: 'Is Dynamic Sub-Header'
  • content_sub_header_path Char
    args: 'Sub-Header Path'
  • content_sub_section1 Char
    args: 'Sub-Section 1'
  • content_sub_section1_dyn Boolean
    args: 'Is Dynamic Sub-Section 1'
  • content_sub_section1_path Char
    args: 'Sub-Section 1 Path'
  • content_sub_section2 Char
    args: 'Sub-Section 2'
  • content_sub_section2_dyn Boolean
    args: 'Is Dynamic Sub-Section 2'
  • content_sub_section2_path Char
    args: 'Sub-Section 2 Path'
  • image_preview Image
    attachment=False compute='_compute_image_preview' compute_sudo=False readonly=True store=True
  • link_tracker_id Many2one → link.tracker
    ondelete='restrict' args: 'link.tracker'
  • mailing_count Integer
    compute='_compute_mailing_count'
  • mailing_ids One2many → mailing.mailing
    args: 'mailing.mailing', 'card_campaign_id'
  • name Char
    required=True
  • post_suggestion Text
    help='Description below the card and default text when sharing on X'
  • preview_record_ref Reference
    required=True selection='_get_model_selection' string='Preview On'
  • request_description Text
    args: 'Request Description'
  • request_title Char
    default=<expr> args: 'Request'
  • res_model Selection
    compute='_compute_res_model' precompute=True readonly=True required=True selection='_get_model_selection' store=True string='Model Name'
  • reward_message Html
    string='Thank You Message'
  • reward_target_url Char
    string='Reward Link'
  • tag_ids Many2many → card.campaign.tag
    string='Tags' args: 'card.campaign.tag'
  • target_url Char
    string='Post Link'
  • target_url_click_count Integer
    related='link_tracker_id.count'
  • user_id Many2one → res.users
    default=<expr> domain="[('share', '=', False)]" string='Responsible' args: 'res.users'
Public methods (8)
  • action_preview(self)
  • action_share(self)
  • action_view_cards(self)
  • action_view_cards_clicked(self)
  • action_view_cards_shared(self)
  • action_view_mailings(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • color Integer
    default=_get_default_color
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (7)
  • active Boolean
    default=True args: 'Active'
  • campaign_id Many2one → card.campaign
    index=True ondelete='cascade' required=True args: 'card.campaign'
  • image Image
  • requires_sync Boolean
    default=True help='Whether the image needs to be updated to match the campaign template.'
  • res_id Many2oneReference
    model_field='res_model' required=True args: 'Record ID'
  • res_model Selection
    related='campaign_id.res_model'
  • share_status Selection
    args: [('shared', 'Shared'), ('visited', 'Visited')]
Public methods (0)

No public methods.

New fields (7)
  • body Html
    sanitize_attributes=False sanitize_tags=False
  • default_background Image
  • name Char
    required=True translate=True
  • primary_color Char
    default='#f9f9f9' required=True
  • primary_text_color Char
    default='#000000' required=True
  • secondary_color Char
    default='#000000' required=True
  • secondary_text_color Char
    default='#ffffff' required=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • card_campaign_id Many2one → card.campaign
    index='btree_not_null' args: 'card.campaign'
  • card_requires_sync_count Integer
    compute='_compute_card_requires_sync_count'
  • mailing_model_id Many2one
    compute='_compute_mailing_model_id' readonly=False store=True
Public methods (3)
  • action_put_in_queue(self)
    Detect mismatches before scheduling.
  • action_send_mail(self, res_ids=None)
  • action_update_cards(self)
    Update the cards in batches, commiting after each batch.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/marketing_card
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing/Social Marketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Thibault Delavallée, Xavier Morel, Aaron Bohy, Odoo Online, Adrien Dieudonné, Gorash, Mathieu Walravens, Renaud Thiry, Gaetan Vanden Bergh (gavb), Louis Wicket (wil), Levi Siuzdak (sile), Dylan Kiss (dyki), omra-odoo, nihp-odoo, sami odoo, thle-odoo, pish-odoo, Krzysztof Magusiak (krma)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - link_tracker
    - utm
    - base
    - web
    - mail
    - base_setup
    - bus
    - web_tour
    - html_editor
    - mass_mailing
    - contacts
    - web_editor
    - social_media
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
    - website
    - google_recaptcha
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES geoip2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
card_campaign_crawler Share campaign Crawler View ir.ui.view qweb New
card_campaign_preview Share campaign ir.ui.view qweb New
card_campaign_view_form card.campaign.view.form card.campaign form New
card_campaign_view_kanban card.campaign.view.kanban card.campaign kanban New
card_campaign_view_search card.campaign.view.search card.campaign search New
card_campaign_view_tree card.campaign.view.list card.campaign list New
card_card_view_list card.card.view.list card.card list New
card_card_view_search card.card.view.search card.card search New
card_template_view_form card.template.view.form card.template form New
common_template common_template ir.ui.view qweb New
mailing_mailing_view_form_inherit_marketing_card mailing.mailing.view.form.inherit.marketing.card mailing.mailing xpath Inherits mass_mailing.view_mail_mass_mailing_form
robots robots ir.ui.view qweb Inherits website.robots
template_1 template_1 ir.ui.view qweb Inherits common_template
template_2 template_2 ir.ui.view qweb Inherits common_template
template_3 template_3 ir.ui.view qweb Inherits common_template
template_4 template_4 ir.ui.view qweb Inherits common_template
template_5 template_5 ir.ui.view qweb Inherits common_template
Models touched (8)

New fields (44)
  • active Boolean
    default=True
  • body_html Html
    readonly=False related='card_template_id.body' render_engine='qweb'
  • card_click_count Integer
    compute='_compute_card_stats'
  • card_count Integer
    compute='_compute_card_stats'
  • card_ids One2many → card.card
    inverse_name='campaign_id' args: 'card.card'
  • card_share_count Integer
    compute='_compute_card_stats'
  • card_template_id Many2one → card.template
    default=_default_card_template_id required=True string='Design' args: 'card.template'
  • content_background Image
    args: 'Background'
  • content_button Char
    args: 'Button'
  • content_header Char
    args: 'Header'
  • content_header_color Char
    args: 'Header Color'
  • content_header_dyn Boolean
    args: 'Is Dynamic Header'
  • content_header_path Char
    args: 'Header Path'
  • content_image1_path Char
    args: 'Dynamic Image 1'
  • content_image2_path Char
    args: 'Dynamic Image 2'
  • content_section Char
    args: 'Section'
  • content_section_dyn Boolean
    args: 'Is Dynamic Section'
  • content_section_path Char
    args: 'Section Path'
  • content_sub_header Char
    args: 'Sub-Header'
  • content_sub_header_color Char
    args: 'Sub Header Color'
  • content_sub_header_dyn Boolean
    args: 'Is Dynamic Sub-Header'
  • content_sub_header_path Char
    args: 'Sub-Header Path'
  • content_sub_section1 Char
    args: 'Sub-Section 1'
  • content_sub_section1_dyn Boolean
    args: 'Is Dynamic Sub-Section 1'
  • content_sub_section1_path Char
    args: 'Sub-Section 1 Path'
  • content_sub_section2 Char
    args: 'Sub-Section 2'
  • content_sub_section2_dyn Boolean
    args: 'Is Dynamic Sub-Section 2'
  • content_sub_section2_path Char
    args: 'Sub-Section 2 Path'
  • image_preview Image
    attachment=False compute='_compute_image_preview' compute_sudo=False readonly=True store=True
  • link_tracker_id Many2one → link.tracker
    ondelete='restrict' args: 'link.tracker'
  • mailing_count Integer
    compute='_compute_mailing_count'
  • mailing_ids One2many → mailing.mailing
    args: 'mailing.mailing', 'card_campaign_id'
  • name Char
    required=True
  • post_suggestion Text
    help='Description below the card and default text when sharing on X'
  • preview_record_ref Reference
    required=True selection='_get_model_selection' string='Preview On'
  • request_description Text
    args: 'Request Description'
  • request_title Char
    default=<expr> args: 'Request'
  • res_model Selection
    compute='_compute_res_model' precompute=True readonly=True required=True selection='_get_model_selection' store=True string='Model Name'
  • reward_message Html
    string='Thank You Message'
  • reward_target_url Char
    string='Reward Link'
  • tag_ids Many2many → card.campaign.tag
    string='Tags' args: 'card.campaign.tag'
  • target_url Char
    string='Post Link'
  • target_url_click_count Integer
    related='link_tracker_id.count'
  • user_id Many2one → res.users
    default=<expr> domain="[('share', '=', False)]" string='Responsible' args: 'res.users'
Public methods (8)
  • action_preview(self)
  • action_share(self)
  • action_view_cards(self)
  • action_view_cards_clicked(self)
  • action_view_cards_shared(self)
  • action_view_mailings(self)
  • create(self, create_vals)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • color Integer
    default=_get_default_color
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (7)
  • active Boolean
    default=True args: 'Active'
  • campaign_id Many2one → card.campaign
    ondelete='cascade' required=True args: 'card.campaign'
  • image Image
  • requires_sync Boolean
    default=True help='Whether the image needs to be updated to match the campaign template.'
  • res_id Many2oneReference
    model_field='res_model' required=True args: 'Record ID'
  • res_model Selection
    related='campaign_id.res_model'
  • share_status Selection
    args: [('shared', 'Shared'), ('visited', 'Visited')]
Public methods (0)

No public methods.

New fields (7)
  • body Html
    sanitize_attributes=False sanitize_tags=False
  • default_background Image
  • name Char
    required=True
  • primary_color Char
    default='#f9f9f9' required=True
  • primary_text_color Char
    default='#000000' required=True
  • secondary_color Char
    default='#000000' required=True
  • secondary_text_color Char
    default='#ffffff' required=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • card_campaign_id Many2one → card.campaign
    args: 'card.campaign'
  • card_requires_sync_count Integer
    compute='_compute_card_requires_sync_count'
  • mailing_model_id Many2one
    compute='_compute_mailing_model_id' readonly=False store=True
Public methods (3)
  • action_put_in_queue(self)
    Detect mismatches before scheduling.
  • action_send_mail(self, res_ids=None)
  • action_update_cards(self)
    Update the cards in batches, commiting after each batch.

New fields (0)

No new fields.

Public methods (0)

No public methods.