Software

Notas, comentarios, documentación del software de código abierto utilizado

Odoo

Odoo

Configuración Odoo

HELL: odoo / xxxxx ubuntu 14
* ODOO superadmin: xxxxx

BDD: MoblesMarti xxxxxx / xxxxxx

/opt/
└── odoo
├── bdd
├── conf
├── data
├── l10n-spain
├── logs
├── OCB
├── otros_modulos
├── scripts
└── tmp

Document
Los adjuntos se guardan en el servidor, en la ruta: /opt/openerp70/openerp-server70/openerp/filestore 
Dentro una carpeta por base de datos.
Se crea un enlace para acceso rápido en: /opt/openerp70/filestore


Odoo

Tutoriales varios

Algunos enlaces:

Ramas OCA/OCB:

$ git clone -b 8.0 https://github.com/OCA/OCB.git odoo-server <-- Esto para versión 8.0
La localización española se cambia también, y ahora se encuentra bajo el paraguas de OCA, siendo su repositorio:
$ git clone -b 8.0 https://github.com/OCA/l10n-spain.git <-- Versión 8.0


Proyecto muy interesante, para montar Odoo, que ha liberado Tecnativa:

Lee bien la documentación antes de ponerte a montarlo, por que lo que has de clonar no es el base, es el scaffolding:

Tienes casi todo automatizado, y puedes tener Odoo funcionando en… Más bien, en lo que tarden en clonar los repos, etc.

(si no necesitas el histórico de commits, entonces, el parámetro DEPTH_DEFAULT de los YAML del docker-compose, a 1).


Como configurar Odoo con dominio propio como url


Automated migration script


Libros

Instalación

Localización española

Odoo

Tutoriales RRHH

https://odoobook.readthedocs.io/sv/latest/human-resource/holiday.html

Odoo

Tutorial Letsencrypt


Hay un módulo de OCA letsencrypt que te permite configurar odoo con uno de estos certificados gratuitos. Lo tienes disponible en https://github.com/OCA/server-tools/tree/10.0/letsencrypt. Consejos antes de instalarlo: Tener correctamente configurado nginx para hacer de proxy. Quitar el puerto de la propiedad web.base.url.

Te pongo un ejemplo de como debería ir el fichero de configuración del sitio (yo desactivaría la redirección https a que el certificado estuvieses correctamente instalado).

upstream openerp { server 127.0.0.1:8069; } server { listen 443 ssl; listen 80; if ($scheme = “http”) { set
KaTeX parse error: Expected 'EOF', got '}' at position 19: …irect_https 1; }̲ if (
KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 20: …rect\_https 1; }̲ if (
KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 20: …rect\_https 1; }̲ if (
request_uri ~ ^/.well-known/acme-challenge/) { set
KaTeX parse error: Expected 'EOF', got '}' at position 20: …rect\_https 0; }̲ if (
KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 20: …rect\_https 0; }̲ if (
KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 20: …rect\_https 0; }̲ if (
redirect_https) { rewrite ^ https://
server\_name
server_namerequest_uri? permanent; } server_name myodoo.tld www.myodoo.tld;
ssl_certificate /var/lib/odoo/.local/share/Odoo/letsencrypt/myodoo.tld.crt;
    ssl_certificate_key /var/lib/odoo/.local/share/Odoo/letsencrypt/myodoo.tld.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
Odoo

Trucos

Ocultar pestaña compras en productos para algunos usuarios  🏷️

En “Usuarios y compaías”/"Grupos
    1. Incluye un grupo con los usuarios que sí pueden ver las compras (créalo)
En  “Elementos de menú”
    1. Asigna el grupo creado al menú compras
    2. Asegúrate que los usuarios que no quieres que vean no pertenecen al grupo ni al menú compras


–stop-after-init (es tu amigo). odoo --help (para mas info). 🏷️


Sin acentos en las búsquedas


Error vistas

Si no tienes nada extraño hecho en tu base de datos, reinicia odoo con el parámetro --update=all para que refresque y reconstruya las vistas. $ /opt/odoo/odoo12/odoo-bin -c /etc/odoo12.conf --update=all



Odoo

Contabilidad

Anticipos
Facturas

BookStack

BookStack

Previsualizar pdf

Here's an altered version of the above scripts that I recently amended for a BookStack user, that was using the above hacks. Think I tested it in v22.06. This script is not official nor supported:
View Code

I eventually got it working by also having a second file named pdf.worker.min.js along side pdf.min.js.

<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.466/pdf.min.js"></script>
<style>
canvas[data-pdfurl] {
  background-color: lightgrey;
   width: 100%;
}
.page-content a {
 color: #39f;
text-decoration: underline;
}
.pdf-wrapper {
position: relative;
height: 80vh;
width: 100%;
}
.pdf-wrapper .download-link {
position: absolute;
top: -2em; 
right: 0;
z-index: 50;
}
.pdf-wrapper .pdf-scroller {
height: 100%;
overflow: auto;
}
</style>
<script type="text/javascript">

  // ------------------- THIS SECTION ADDS A PDF BUTTON TO THE EDITOR TOOLBAR THAT ALLOWS YOU TO EMBED PDFS 

  // Use BookStack editor event to add custom "Insert PDF" button into main toolbar
  window.addEventListener('editor-tinymce::pre-init', event => {
      const mceConfig = event.detail.config;
      mceConfig.toolbar = mceConfig.toolbar.replace('link', 'link insertpdf')
  });

  // Use BookStack editor event to define the custom "Insert PDF" button.
  window.addEventListener('editor-tinymce::setup', event => {
    const editor = event.detail.editor;

    // Add PDF insert button
    editor.ui.registry.addButton('insertpdf', {
      tooltip: 'Insert PDF',
      icon: 'document-properties',
      onAction() {
        editor.windowManager.open({
          title: 'Insert PDF',
          body: {
            type: 'panel',
            items: [
              {type: 'textarea', name: 'pdfurl', label: 'PDF URL'}
            ]
          },
          onSubmit: function(e) {
            // Insert content when the window form is submitted
            editor.insertContent('<p>&nbsp;<canvas data-pdfurl="' + e.getData().pdfurl + '"></canvas>&nbsp;</p>');
            e.close();
          },
          buttons: [
            {
              type: 'submit',
              text: 'Insert PDF'
            }
          ]
        });
      }
    });

  });

//-------------------- THE CODE BELOW SHALL BE ACTIVE IN VIEWING MODE TO EMBED PDFS
var renderPdf=function(canvas) {
  var url = canvas.dataset.pdfurl;
  var pdf = null;
  // wrap canvas in div
  var wrapper = document.createElement('div');
  wrapper.className='pdf-wrapper';
  var scroller = document.createElement('div');
  scroller.className='pdf-scroller';
  wrapper.appendChild(scroller);
  canvas.parentNode.insertBefore(wrapper, canvas.nextSibling);
  scroller.insertBefore(canvas, null);

  var downloadLink  = document.createElement('a');
  downloadLink.href = url;
  downloadLink.className="download-link";
  downloadLink.innerText = 'Download PDF now ↓';
  wrapper.appendChild(downloadLink);

  var renderPage = function(page) {
    var scale = 1.5;
    var viewport = page.getViewport(scale);
    // Fetch canvas' 2d context
    var context = canvas.getContext('2d');
    // Set dimensions to Canvas
    canvas.height = viewport.height;
    canvas.width = viewport.width;
    canvas.style.maxWidth='100%';
    // Prepare object needed by render method
    var renderContext = {
      canvasContext: context,
      viewport: viewport
    };
    // Render PDF page
    page.render(renderContext);
    if (currentPage < pdf.numPages) {
      currentPage++;
      var newCanvas = document.createElement('canvas');
      scroller.insertBefore(newCanvas, canvas.nextSibling);
      scroller.insertBefore(document.createElement('hr'), canvas.nextSibling);
      canvas=newCanvas;
      pdf.getPage(currentPage).then(renderPage);
    }
  };
  var currentPage = 1;
  pdfjsLib.getDocument(url)
  .then(function(pdfLocal) {
    pdf = pdfLocal;
    return pdf.getPage(1);
  })
  .then(renderPage);
};


window.addEventListener('DOMContentLoaded', function() {
  Array.prototype.forEach.call(document.querySelectorAll('canvas[data-pdfurl]'), renderPdf);
});
</script>
BookStack

Configuración FTP

Usuari: josep | Password: bis712

carpeta i ruta: /var/www/bookstack/public/uploads/files exemple: /var/www/bookstack/public/uploads/files/novedades/novedades_otono_1.pdf