{"id":3305,"date":"2026-07-13T09:00:00","date_gmt":"2026-07-13T07:00:00","guid":{"rendered":"https:\/\/brentasoft.com\/blog\/sviluppi-custom-odoo-19-mantenibili-pmi-italiane-guida\/"},"modified":"2026-06-10T07:56:03","modified_gmt":"2026-06-10T05:56:03","slug":"sviluppi-custom-odoo-19-mantenibili-pmi-italiane-guida","status":"publish","type":"post","link":"https:\/\/brentasoft.com\/blog\/sviluppi-custom-odoo-19-mantenibili-pmi-italiane-guida\/","title":{"rendered":"Sviluppi custom Odoo mantenibili: pattern, anti-pattern, costi (guida PMI italiane)"},"content":{"rendered":"<p><em>Trentaseiesima guida operativa Odoo 19 per PMI italiane. Prima o poi ogni PMI italiana deve estendere Odoo: aggiungere un campo custom, modificare un report, sviluppare un workflow specifico per il proprio business. Il modo in cui questi sviluppi vengono fatti determina se nei prossimi 5 anni saranno un asset o un debito tecnico ingestibile. In questa guida vediamo come progettare e implementare sviluppi custom Odoo mantenibili nel tempo, con framework concreto, pattern, anti-pattern e casi pratici PMI italiane.<\/em><\/p>\n<p>Vediamo: livelli di customizzazione Odoo (config, Studio, codice), principi di codice mantenibile, struttura di un modulo custom, repository management, test, documentazione, costi e ROI delle customizzazioni, errori comuni.<\/p>\n<h2>I 4 livelli di customizzazione Odoo<\/h2>\n<h3>Livello 1: Configurazione (no-code, gratis)<\/h3>\n<ul>\n<li>Settings standard per ogni modulo<\/li>\n<li>Sequenze documentali, regole IVA, conti contabili<\/li>\n<li>Tag, categorie, stage workflow<\/li>\n<li>Workflow attivazione\/disattivazione feature<\/li>\n<li><strong>Quando usarlo<\/strong>: SEMPRE come prima opzione<\/li>\n<\/ul>\n<h3>Livello 2: Studio (low-code, Enterprise)<\/h3>\n<ul>\n<li>Aggiungere campi custom a modelli esistenti<\/li>\n<li>Modificare form\/list\/kanban view<\/li>\n<li>Creare automazioni base (server actions)<\/li>\n<li>Generare report semplici<\/li>\n<li><strong>Quando usarlo<\/strong>: customization rapide, non critical<\/li>\n<\/ul>\n<h3>Livello 3: Moduli custom Python\/XML (code)<\/h3>\n<ul>\n<li>Estendere modelli con logica business complessa<\/li>\n<li>Creare nuovi modelli e workflow<\/li>\n<li>Override metodi standard<\/li>\n<li>Integrazioni con sistemi esterni<\/li>\n<li><strong>Quando usarlo<\/strong>: logica complessa, mantenibilit\u00e0 lungo termine<\/li>\n<\/ul>\n<h3>Livello 4: Core modifications (sconsigliato!)<\/h3>\n<ul>\n<li>Modificare codice Odoo standard<\/li>\n<li>Vantaggi: nessuno reali<\/li>\n<li>Svantaggi: ogni upgrade \u00e8 un incubo<\/li>\n<li><strong>Quando usarlo<\/strong>: MAI. Sempre estendere via moduli custom.<\/li>\n<\/ul>\n<h2>Quando scegliere quale livello<\/h2>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"6\">\n<thead>\n<tr>\n<th>Esigenza<\/th>\n<th>Livello raccomandato<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Aggiungere campo &#8220;data scadenza contratto&#8221; su cliente<\/td>\n<td>Studio<\/td>\n<\/tr>\n<tr>\n<td>Calcolare bonus venditori con formula complessa<\/td>\n<td>Modulo Python<\/td>\n<\/tr>\n<tr>\n<td>Cambiare colore brand su report fattura<\/td>\n<td>Modulo XML (template QWeb)<\/td>\n<\/tr>\n<tr>\n<td>Integrazione con software gestione cantiere esterno<\/td>\n<td>Modulo Python + API<\/td>\n<\/tr>\n<tr>\n<td>Workflow approvazione spese con 4 livelli<\/td>\n<td>Studio + se complesso Modulo Python<\/td>\n<\/tr>\n<tr>\n<td>Nuovo modulo verticale per il proprio settore<\/td>\n<td>Modulo Python completo<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Anatomia di un modulo custom mantenibile<\/h2>\n<h3>Struttura di base<\/h3>\n<pre><code>my_custom_module\/\n\u251c\u2500\u2500 __init__.py\n\u251c\u2500\u2500 __manifest__.py       # Metadati modulo\n\u251c\u2500\u2500 models\/\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2514\u2500\u2500 my_model.py       # Logica business\n\u251c\u2500\u2500 views\/\n\u2502   \u2514\u2500\u2500 my_views.xml      # Form\/list\/kanban\n\u251c\u2500\u2500 data\/\n\u2502   \u2514\u2500\u2500 data.xml          # Dati seed\n\u251c\u2500\u2500 security\/\n\u2502   \u2514\u2500\u2500 ir.model.access.csv  # ACL\n\u251c\u2500\u2500 reports\/\n\u2502   \u2514\u2500\u2500 my_report.xml     # Report QWeb\n\u251c\u2500\u2500 static\/\n\u2502   \u2514\u2500\u2500 description\/\n\u2502       \u2514\u2500\u2500 icon.png\n\u251c\u2500\u2500 tests\/\n\u2502   \u2514\u2500\u2500 test_my_model.py\n\u2514\u2500\u2500 README.md\n<\/code><\/pre>\n<h3>Convenzioni di naming<\/h3>\n<ul>\n<li><strong>Modulo<\/strong>: prefisso azienda (es. <code>brentasoft_<\/code> per evitare conflitti)<\/li>\n<li><strong>Modelli<\/strong>: lowercase con underscore (<code>brentasoft.lead.priority<\/code>)<\/li>\n<li><strong>Campi<\/strong>: snake_case (<code>x_priority_score<\/code> per Studio, <code>priority_score<\/code> per moduli custom)<\/li>\n<li><strong>View IDs<\/strong>: prefisso modulo + tipo (<code>brentasoft_lead_form_view<\/code>)<\/li>\n<li><strong>Security groups<\/strong>: gerarchia chiara (<code>group_brentasoft_lead_user<\/code>, <code>_manager<\/code>)<\/li>\n<\/ul>\n<h2>Personalizzazione viste: dove vivono le modifiche<\/h2>\n<p>Tutte le view di Odoo (form, list, kanban, calendar, pivot) sono archiviate come record nel database. Modificarle in modo non distruttivo \u00e8 la chiave per mantenibilit\u00e0:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2026\/06\/odoo-custom-01-views.png\" alt=\"Lista UI views Odoo 19 per gestione customizzazioni form list kanban PMI\" class=\"aligncenter size-full wp-image-3302\"\/><\/p>\n<ul>\n<li>View base fornite da Odoo<\/li>\n<li>View di estensione (inherit_id) che modificano la base<\/li>\n<li>View custom che sostituiscono completamente<\/li>\n<li>Strategia inherit: 90% dei casi, sempre preferibile<\/li>\n<\/ul>\n<h3>Esempio view inherit pulita<\/h3>\n<pre><code>&lt;record id=\"view_partner_form_inherit_brentasoft\" model=\"ir.ui.view\"&gt;\n    &lt;field name=\"name\"&gt;res.partner.form.inherit.brentasoft&lt;\/field&gt;\n    &lt;field name=\"model\"&gt;res.partner&lt;\/field&gt;\n    &lt;field name=\"inherit_id\" ref=\"base.view_partner_form\"\/&gt;\n    &lt;field name=\"arch\" type=\"xml\"&gt;\n        &lt;xpath expr=\"\/\/field[@name='vat']\" position=\"after\"&gt;\n            &lt;field name=\"brentasoft_priority\"\/&gt;\n        &lt;\/xpath&gt;\n    &lt;\/field&gt;\n&lt;\/record&gt;\n<\/code><\/pre>\n<h2>Template email custom: branding e comunicazione<\/h2>\n<p>I template email Odoo permettono di personalizzare ogni comunicazione automatica (conferma ordine, fattura, riassunto settimanale) mantenendo brand coerente:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2026\/06\/odoo-custom-02-templates.png\" alt=\"Lista template email Odoo 19 per branding customizzazioni mail automatiche PMI\" class=\"aligncenter size-full wp-image-3303\"\/><\/p>\n<ul>\n<li>Template Jinja2\/QWeb con dati dinamici<\/li>\n<li>Logo, colori, footer personalizzati<\/li>\n<li>Versioning template via moduli (no edit diretto in produzione)<\/li>\n<li>Test ambiente staging prima di attivare<\/li>\n<li>Multilingua per export<\/li>\n<\/ul>\n<h2>Configurazioni come codice: il principio<\/h2>\n<p>I settings Odoo influenzano comportamenti critici (sconti, tasse, sequenze). Mantenere settings importanti come configurazione in moduli custom (vs UI manuale) garantisce riproducibilit\u00e0 tra ambienti:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2026\/06\/odoo-custom-03-settings.png\" alt=\"Settings configurazione Odoo 19 vendite per gestione customizzazioni via codice\" class=\"aligncenter size-full wp-image-3304\"\/><\/p>\n<ul>\n<li>Settings critici versionati come <code>data.xml<\/code> in modulo custom<\/li>\n<li>Setup riproducibile su staging\/produzione automaticamente<\/li>\n<li>Documentazione settings nel commit message<\/li>\n<li>Audit log per cambiamenti settings produzione<\/li>\n<\/ul>\n<h2>Principi di codice mantenibile<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2026\/06\/odoo-pool-032.png\" alt=\"Principi di codice mantenibile per sviluppi custom Odoo 19 in PMI italiane\" class=\"aligncenter size-full wp-image-3442\"\/><\/p>\n<h3>1. Single Responsibility Principle<\/h3>\n<p>Un modulo = una responsabilit\u00e0 chiara. Non un mega-modulo che fa tutto.<\/p>\n<ul>\n<li>NO: <code>brentasoft_customizations<\/code> con dentro 30 feature diverse<\/li>\n<li>S\u00cc: <code>brentasoft_lead_priority<\/code>, <code>brentasoft_invoice_branding<\/code>, <code>brentasoft_warehouse_kpi<\/code> separati<\/li>\n<\/ul>\n<h3>2. Extension over Modification<\/h3>\n<p>Sempre estendere modelli\/view standard via inherit, mai sostituire\/sovrascrivere.<\/p>\n<h3>3. Documentation as Code<\/h3>\n<ul>\n<li>README.md in ogni modulo con: scopo, dipendenze, screenshot, esempi<\/li>\n<li>Docstring Python per ogni metodo non banale<\/li>\n<li>Commit message significativi (no &#8220;fix&#8221;, &#8220;update&#8221;)<\/li>\n<\/ul>\n<h3>4. Test automatici<\/h3>\n<ul>\n<li>Almeno unit test per logica business critica<\/li>\n<li>CI\/CD che gira test su ogni push<\/li>\n<li>Code coverage target: 70%+ per moduli core, 40%+ per moduli accessori<\/li>\n<\/ul>\n<h3>5. Version Control<\/h3>\n<ul>\n<li>Repository Git per ogni modulo custom<\/li>\n<li>Branching strategy: feature branches + main per produzione<\/li>\n<li>Tag per release production<\/li>\n<li>Pull request con code review obbligatoria<\/li>\n<\/ul>\n<h2>Repository management<\/h2>\n<h3>Struttura raccomandata<\/h3>\n<pre><code>brentasoft-odoo-customs\/\n\u251c\u2500\u2500 README.md (overview, setup)\n\u251c\u2500\u2500 docker-compose.yml (dev environment)\n\u251c\u2500\u2500 requirements.txt (Python deps)\n\u251c\u2500\u2500 modules\/\n\u2502   \u251c\u2500\u2500 brentasoft_base\/\n\u2502   \u251c\u2500\u2500 brentasoft_lead_enhanced\/\n\u2502   \u251c\u2500\u2500 brentasoft_invoice_custom\/\n\u2502   \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 tests\/\n\u2514\u2500\u2500 .github\/workflows\/ci.yml\n<\/code><\/pre>\n<h3>Branching strategy<\/h3>\n<ul>\n<li><strong>main<\/strong>: protetto, solo merge via PR, deployato in produzione<\/li>\n<li><strong>develop<\/strong>: integrazione feature in corso, deployato su staging<\/li>\n<li><strong>feature\/xyz<\/strong>: branch temporanea per ogni feature nuova<\/li>\n<li><strong>hotfix\/xyz<\/strong>: branch da main per fix urgenti produzione<\/li>\n<\/ul>\n<h3>Release management<\/h3>\n<ul>\n<li>Tag semantici (v1.2.3) per ogni deploy produzione<\/li>\n<li>Changelog automatizzato da commit conventional<\/li>\n<li>Rollback con tag precedente disponibile<\/li>\n<\/ul>\n<h2>Anti-pattern da evitare<\/h2>\n<h3>&#8220;Customization su customization su customization&#8221;<\/h3>\n<p><strong>Problema<\/strong>: ogni nuova esigenza aggiunge un modulo che modifica un altro modulo custom. Dopo 2 anni 30+ moduli interdipendenti.<br \/>\n<strong>Soluzione<\/strong>: refactor periodico, consolidare moduli simili, eliminare obsoleti.<\/p>\n<h3>&#8220;Customization che replica core Odoo&#8221;<\/h3>\n<p><strong>Problema<\/strong>: sviluppata feature custom poi Odoo la include in versione successiva.<br \/>\n<strong>Soluzione<\/strong>: prima di sviluppare custom, verificare roadmap Odoo + cercare community Apps.<\/p>\n<h3>&#8220;Hard-coded values&#8221;<\/h3>\n<p><strong>Problema<\/strong>: codice fisso (es. <code>if account_id == 142:<\/code>) che funziona solo in produzione.<br \/>\n<strong>Soluzione<\/strong>: usare external IDs, parametri sistema, config Odoo.<\/p>\n<h3>&#8220;Logica nascosta in onchange&#8221;<\/h3>\n<p><strong>Problema<\/strong>: logica critica solo in onchange JavaScript, non eseguita da import\/API.<br \/>\n<strong>Soluzione<\/strong>: logica in Python (compute, constrains), onchange solo UI hint.<\/p>\n<h3>&#8220;Skip migration scripts&#8221;<\/h3>\n<p><strong>Problema<\/strong>: cambio field type senza migration script, dati persi in upgrade.<br \/>\n<strong>Soluzione<\/strong>: ogni breaking change deve avere script SQL\/Python di migrazione.<\/p>\n<h2>Costi e ROI customizzazioni<\/h2>\n<h3>Costi tipici per tipologia<\/h3>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"6\">\n<thead>\n<tr>\n<th>Tipologia customization<\/th>\n<th>Effort<\/th>\n<th>Costo tipico<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Campo custom + view modifica (Studio)<\/td>\n<td>2-4 ore<\/td>\n<td>200-400 \u20ac<\/td>\n<\/tr>\n<tr>\n<td>Workflow approval semplice<\/td>\n<td>1-2 giorni<\/td>\n<td>800-1.500 \u20ac<\/td>\n<\/tr>\n<tr>\n<td>Report custom QWeb<\/td>\n<td>1-3 giorni<\/td>\n<td>800-2.500 \u20ac<\/td>\n<\/tr>\n<tr>\n<td>Integrazione API esterna<\/td>\n<td>3-10 giorni<\/td>\n<td>2.500-8.000 \u20ac<\/td>\n<\/tr>\n<tr>\n<td>Modulo verticale custom completo<\/td>\n<td>10-40 giorni<\/td>\n<td>8.000-35.000 \u20ac<\/td>\n<\/tr>\n<tr>\n<td>Refactor 5-10 moduli legacy<\/td>\n<td>15-30 giorni<\/td>\n<td>12.000-25.000 \u20ac<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>ROI realistico<\/h3>\n<ul>\n<li>Customization sostituisce operazione manuale ricorrente: payback 6-18 mesi<\/li>\n<li>Customization abilita revenue stream nuovo: ROI molto variabile<\/li>\n<li>Customization solo per &#8220;preferenza estetica&#8221;: ROI difficile, rivalutare<\/li>\n<\/ul>\n<h2>Maintenance cost: il costo invisibile<\/h2>\n<ul>\n<li>Ogni customization ha un maintenance cost ricorrente (10-20% del setup all&#8217;anno)<\/li>\n<li>Customization durante upgrade major: 20-100% effort rispetto al setup iniziale<\/li>\n<li>Regola: massimo 15-20 customization &#8220;vive&#8221; contemporaneamente per PMI<\/li>\n<li>Cleanup annuale: rimuovere customization non pi\u00f9 usate<\/li>\n<\/ul>\n<h2>Casi pratici PMI italiane<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2026\/06\/odoo-pool-033.png\" alt=\"Casi pratici PMI italiane sviluppi custom Odoo pattern e anti-pattern\" class=\"aligncenter size-full wp-image-3443\"\/><\/p>\n<h3>Caso 1 \u2014 Manifattura: modulo custom configuratore prodotto<\/h3>\n<ul>\n<li>Esigenza: configurazione prodotto con 200+ varianti e regole compatibilit\u00e0<\/li>\n<li>Soluzione: modulo Python con engine regole + UI custom<\/li>\n<li>Effort: 25 giorni, costo 22k \u20ac<\/li>\n<li>ROI: -75% errori configurazione, +30% velocit\u00e0 preventivi<\/li>\n<li>Manutenzione: 4k \u20ac\/anno<\/li>\n<\/ul>\n<h3>Caso 2 \u2014 Servizi: report finanziario PowerPoint-style<\/h3>\n<ul>\n<li>Esigenza: report mensile CFO con 12 KPI + grafici brand<\/li>\n<li>Soluzione: template QWeb custom + integrazione Matplotlib per grafici<\/li>\n<li>Effort: 4 giorni, costo 3.5k \u20ac<\/li>\n<li>ROI: 8h\/mese risparmiate per generazione report (= 4.2k \u20ac\/anno)<\/li>\n<\/ul>\n<h3>Caso 3 \u2014 Retail: customization fuori controllo<\/h3>\n<ul>\n<li>Anno 1: 8 customization &#8220;veloci&#8221; sviluppate<\/li>\n<li>Anno 3: 47 customization, dipendenze incrociate, upgrade impossibile<\/li>\n<li>Costo refactor: 35k \u20ac + 4 mesi blocco evoluzioni<\/li>\n<li>Lesson learned: governance cap a 15-20 customization da inizio<\/li>\n<\/ul>\n<h3>Caso 4 \u2014 E-commerce: modulo custom riconciliazione marketplace<\/h3>\n<ul>\n<li>Esigenza: riconciliare 12.000 transazioni\/mese da Amazon, eBay, Etsy<\/li>\n<li>Soluzione: modulo Python con job batch + UI dashboard<\/li>\n<li>Effort: 18 giorni, costo 15k \u20ac<\/li>\n<li>ROI: 1 FTE risparmiato (35k \u20ac\/anno), payback 5 mesi<\/li>\n<\/ul>\n<h2>FAQ<\/h2>\n<h3>Posso sviluppare customization senza partner Odoo?<\/h3>\n<p>Per Studio s\u00ec (no-code). Per moduli Python: serve uno sviluppatore con esperienza Odoo (sintassi ORM, decorator, security, view inheritance). Costo formazione interna: 4-8 settimane per sviluppatore Python esperto.<\/p>\n<h3>Devo testare ogni customization?<\/h3>\n<p>S\u00ec, almeno smoke test manuale. Per customization critiche (logica business, integrazioni): unit test obbligatori + UAT. Costo aggiuntivo test: 20-40% effort totale, ROI molto positivo (cattura 80%+ bug prima della produzione).<\/p>\n<h3>Come gestisco customization quando passo a nuova versione Odoo?<\/h3>\n<p>Best practice: ogni customization ha test automatici che verificano funzionamento su nuova versione. Test falliti = refactor necessario. Approccio sistematico: prima upgrade test, poi fix, poi produzione.<\/p>\n<h3>Posso vendere customization sviluppate?<\/h3>\n<p>S\u00ec, anzi Odoo App Store permette di pubblicare moduli (gratis o a pagamento). Revenue stream interessante per PMI con sviluppi specifici di nicchia. Verificare licenza Odoo per pubblicazione community.<\/p>\n<h3>Cosa fare se la customization sviluppata diventa obsoleta?<\/h3>\n<p>Dismissal process: (1) verificare se nessun utente la usa pi\u00f9 (analytics); (2) disinstallare in staging, verificare nessun impatto; (3) disinstallare in produzione; (4) rimuovere modulo dal repository; (5) documentare in changelog perch\u00e9 rimosso.<\/p>\n<h2>Prossimi passi<\/h2>\n<p>Nelle prossime guide vedremo come <strong>creare report custom per BI<\/strong> con dashboard avanzati, come <strong>configurare workflow no-code con Studio<\/strong> per casi pratici, e come <strong>gestire la sicurezza avanzata<\/strong> Odoo (RBAC granulare, multi-company permissions).<\/p>\n<p style=\"margin-top:30px;background:#f4f4f8;padding:18px;border-radius:8px;\"><strong>Vuoi sviluppi custom Odoo mantenibili per la tua PMI?<\/strong><br \/>\nG Tech Group sviluppa moduli custom Odoo con framework strutturato: repository Git versionato, test automatici, CI\/CD, documentazione completa, code review. Cap 15-20 customization vive per PMI per sostenibilit\u00e0 lungo termine.<br \/>\n<a href=\"https:\/\/brentasoft.com\/preventivatore.php\"><strong>Richiedi un preventivo gratuito<\/strong><\/a> oppure prova la nostra <a href=\"https:\/\/odoo.brentasoft.com\/\">demo Odoo 19 live<\/a>. Oppure <a href=\"https:\/\/www.odoo.com?utm_campaign=partner-d192ce8a&amp;utm_source=partner_ref\" target=\"_blank\" rel=\"noopener noreferrer\">prova Odoo direttamente su odoo.com<\/a> (link partner Brentasoft).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trentaseiesima guida Odoo 19: come progettare sviluppi custom Odoo mantenibili. 4 livelli customization, anatomia modulo, principi codice pulito, anti-pattern, costi tipici, casi PMI.<\/p>\n","protected":false},"author":2,"featured_media":3302,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"Sviluppi custom Odoo mantenibili: guida PMI","_seopress_titles_desc":"Come sviluppare customization Odoo mantenibili: 4 livelli, anatomia modulo, principi codice pulito, anti-pattern, costi, casi pratici PMI italiane.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"https:\/\/brentasoft.com\/blog\/sviluppi-custom-odoo-19-mantenibili-pmi-italiane-guida\/","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2026\/06\/odoo-custom-01-views.png","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","footnotes":""},"categories":[24,689],"tags":[],"class_list":["post-3305","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-erp-gestionali","category-guide-odoo"],"_links":{"self":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/posts\/3305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/comments?post=3305"}],"version-history":[{"count":0,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/posts\/3305\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/media\/3302"}],"wp:attachment":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/media?parent=3305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/categories?post=3305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/tags?post=3305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}