How-to install Odoo 10 on Debian 9 or Ubuntu 16.04 LTS without python-pypdf dependency

Odoo 10 package still depends on the old Python PyPdf unmaintained package. That package is no more available in several distributions, notably Debian 9 (stretch) and Ubuntu since 16.04 LTS. It is replaced by the new PyPDF2 which claims to be fully compatible, but does not provide PyPdf  as a virtual package. Same situation with Odoo 8 and Odoo 9.

However, there is an easy workaround : create a fake python-pdf package and install python-pyPdf from Pipy (Python repository). All of this will be done as root.

  • install equivs to create fake packages and python-pip to install package from Python repository
  • run equivs-control python-pypdf, this will create and populate the file python-pypdf
  • edit the file (dot and space under Description are mandatory) like below
    Section: python
     Package: python-pypdf
     Version: 1.13
     Description: fake package to provide python-pypdf
     This package provide the dependency needed by Odoo. 
     python-pypdf2 replace python-pypdf, but while compatible, 
     does not provide python-pypdf
     .
     python-pypdf will need to be installed with 
     "pip install pyPdf"
  • run equivs-build python-pypdf this will create the fake package python-pypdf_1.13_all.deb
  • install the package with dpkg -i python-pypdf_1.13_all.deb
  • run pip install pyPdf
  • restart Odoo

Quickly done NAS with Webmin (DIY NAS)

Looking for a better NAS than the one my girlfriend own (Synology). Caveat : she don’t care about it, she understand nothing on it, I hate those slow graphical « web desktop » interfaces, I need a lot of free Ram, I want to install everything I need, I bet free/libre NAS are better.

There is three active NAS projects. They can be use on personal and small networks (but not limited to). Have a look : FreeNAS (FreeBSD), NAS4Free (derived from FreeNAS 7), and OpenMediaVault (Debian, from former FreeNAS leader). OpenFiler is for bigger needs and seems unmaintained.

FreedomBox or Yunohost (and others, look at Wikipedia) target end users. They are easy to set up and maintained. While they are not NAS project, they can, in some parts, do the job at home.

SME Server (Centos, also known as e-smith) and  Superb Mini Server (Slackware) provides something like ADSL boxes on steroids, coming with webmail and email server, virus protection, printer server, etc.

But what did I choose ? I find easier to install Debian with the Webmin control panel. I don’t really need Webmin, but as I tends to do a lot of daily work from the web browser, I keep it open in a tab. It let me do what I want, help to not forget something to configure, has a lot of modules, can report (by email) about problems and new packages, can burn CD/DVD, etc. All in all, it takes only a few minutes to install a Debian server and the webmin package — Debian is not mandatory, you can use your favorite distribution.

Installer Linux en copiant

On n’a pas toujours une distribution sous la main pour réinstaller Linux (ou tout autre Unix, comme la famille BSD) sur un nouveau disque dur. Or c’est très facile d’installer le système en se contentant de copier les fichiers d’une autre installation.

Branchons le nouveau disque et démarrons sur l’ancien!

Pour faire simple ici, je partitionne le nouveau disque en deux : une partition de swap et tout dans le même système de fichier. Je place la partition de swap à la fin du disque et j’active la partition du système de fichier (on la rend bootable).

Copier les fichiers

  • Créer le système de fichier et le swap sans oublier de vérifier l’état du disque (noter les UUID ou les obtenir plus tard avec lsblk -f ou blkid). Monter le système de fichiers dans /mnt.
  • Tout copier, sauf /proc /sys /dev /run et /mnt, avec ~# cp -a source /mnt/ ou bien ~# cp -a -t /mnt/ source qui est plus pratique.
  • Créer /proc /sys /dev /run et /mnt (vides)
  • Voir la doc Linux From Scratch pour le remplissage de /dev :
~# mknod -m 600 /mnt/dev/console c 5 1
~# mknod -m 666 /mnt/dev/null c 1 3
~# mount -v --bind /dev /mnt/dev
  • Refaire /mnt/etc/fstab avec les UUID, il vaut mieux éviter les /dev parce que l’ordre des périphérique pourrait schanger quand on enlèvera l’ancien disque.

Installer le chargeur de démarrage (bootloader)

J’installe GRUB, la procédure est identique avec les autres. Il faut le faire depuis le nouveau système de fichier, en changeant la racine pour /mnt (chroot).

  • Monter les systèmes de fichiers virtuels :
~# mount -vt devpts devpts /mnt/dev/pts -o gid=5,mode=620
~# mount -vt proc proc /mnt/proc
~# mount -vt sysfs sysfs /mnt/sys
~# mount -vt tmpfs tmpfs /mnt/run
  • Changer la racine ~# chroot /mnt ; la racine / devient /mnt, toutes les opérations suivantes se font dans le chroot (/etc est en fait /mnt/etc, c’est transparent).
  • Modifier /etc/initramfs-tools/conf.d/resume (partition de swap pour l’hibernation) es refaire l’initramfs ~# mkinitramfs.
  • Modifier /boot/grub/grub.cfg ou utiliser grub-mkconfig (avec l’option -o et le nom du fichier de sortie, sinon ça n’en créera pas). Comme on a plusieurs disques, il vaut mieux utiliser des UUIDs plutôt que des noms de périphériques qui pourraient changer (de toute façon, GRUB ne nomme pas les périphériques comme sous Linux).
  • Installer GRUB ~# grub-install /dev/[nouveau disque]
  • Sortir du chroot, éteindre et redémarrer sur le nouveau disque.

Ou bien installer Grub une fois le système démarré

Pas facile d’avoir en tête le montage des systèmes de fichiers virtuels! On peut faire autrement, installer Grub sans chroot : il faut ajouter une entrée dans le fichier grub.cfg du disque source afin de pouvoir démarrer sur le nouveau disque (en gros, recopier l’entrée de l’ancien en changeant l’UUID). Redémarrer. Une fois démarré sur le nouveau disque, on lance ~# grub-mkconfig -o /boot/grub/grub.cfg puis ~# grub-install /dev/[nouveau disque], sans oublier de refaire l’initramfs.

 

Quelques usages du swap et leurs besoins

Le swap est lent par définition : c’est un espace de stockage utilisé comme de la mémoire, or le stockage est beaucoup beaucoup plus lent que la mémoire Ram. On peut quand même augmenter la vitesse du swap en faisant attention à son emplacement, sa fragmentation, sa répartition sur plusieurs disques, etc. Compliqué ? C’est pire que ça : en 2017 les ordinateurs sont équipés d’une quantité de Ram et d’espace disque qui suffisent largement aux besoins des programmes. Certains ne s’embarrassent donc plus du swap. Alors que faire ? et si on veut du swap, comment l’optimiser ?

Les prescriptions sur le swap sont anciennes. Il y a quelques années les disques durs étaient petits et lents, la mémoire se comptait en mégas, l’ordinateur mettait du temps à démarrer, les batteries des portables ne tenaient pas la route, … La situation a changé, voici donc un tableau résumant quelques usages du swap : hibernation, bouée de secours, déplacement en swap d’un programme inutilisé, besoin de libération de la mémoire Ram.

 Usage Pourquoi Pour qui Besoin
hibernation éteindre sans fermer les programmes ordi perso taille
bouée de secours ne pas planter serveur taille
programme inutilisé occupation mémoire inutile serveur
 libérer de la Ram mémoire insuffisante ordi perso vitesse

L’hibernation est un cas particulier : on enregistre l’état du système sur le disque avant l’extinction, ce qui permet au démarrage de restaurer programmes, fenêtres et documents comme si on n’avait pas éteint. Grosso-modo le processus d’hibernation transfère le contenu de la mémoire dans le swap. Il faut un swap au moins égal à la taille de la mémoire.
Dans le second cas, on veut éviter de bloquer le système si des processus consomment toute la Ram. Comme bouée de secours, la taille du swap importe plus que sa vitesse. Or les disques durs actuels ne nous limitent pas en espace. On peut donc choisir un swap égal à deux fois la taille de la Ram — ou plus ? ça dépend de ce qu’on fait tourner…
Le système peut déplacer en swap l’espace occuppé en mémoire par un programme ouvert mais qui n’est pas utilisé. Ça demande peu d’espace. L’évènement inverse étant occasionnel (réutilisation du programme), la vitesse n’est pas primordiale.
Enfin libérer de la Ram parce qu’un programme en a besoin est un usage qui diminue, mais se rencontre encore et se rencontrera probablement encore. Le système ralentit temporairement pendant que la Ram est déplacée en swap. La vitesse du swap est essentielle pour éviter les crispations devant l’écran.

Soyons clair, la vitesse du swap importe toujours et les usages énumérés se retrouvent sur toute sorte de bécane. Mais comme tout dépend de ce qu’on fait avec, on n’a pas toujours besoin de se compliquer la vie :

  • le swap sert peu sur un serveur, on peut réserver la rapidité aux données ;
  • les disques durs sont très très gros, on évite de se poser trop de question : plus de swap ne fait pas de mal, deux fois la Ram ça roule.

Recettes pour augmenter la vitesse du swap

  • Le placer entre les programmes et les données. C’est un bon compromis : la tête de lecture passera constament au-dessus. Mais attention, les données concernées ne sont pas toujours dans les dossiers personnels! en plus des images ouvertes dans Gimp et du cache du navigateur web, on peut penser aux fichiers journaux (logs), aux bases de données, aux dossiers temporaires, …
  • Le répartir sur plusieurs disques. Linux optimisera la gestion du swap (sans Linux on utilisera du Raid ou un gestionnaire de volumes logiques).

J’ai aussi lu cette idée : le placer à la périphérie du disque, au début donc, puisque la tête de lecture peut y aller très vite. Ça suppose que la tête de lecture est plus souvent parquée au bord du disque, c’est vrai. Mais quand on a besoin du swap, la tête est généralement déjà en train de faire le yoyo entre les programmes et les données ! Ne commettez pas non plus l’erreur de penser que ça écrit plus vite au bord du disque parce que « ça tourne » plus vite. N’oubliez pas que la densité d’écriture est plus faible, un secteur occuppe plus de place mais ne contient pas plus de données.

P2V tools – Physical to virtual system conversion

How to virtualize a physical computer ?

While you can find a lot of web pages and blogs asserting that you need to change some esoteric things (Windows registry and so on) in the running system before running it virtualized, fact is that it is not true :

You just need to clone the harddrive(s) in a file. End of story.

Basic disk utilities can do that (under Linux, BSD and MacOSX one can use dd), many backup tools too. Later on, you will convert the file to the desired virtualization format, which is trivial to do (tools depends on your virtual hypervisor engine).

Things are a bit more complicated if your system use several disks or partitions. But once again you just need to clone them. Several small utilities can do that for you, directly converting disks images in one file only. Under Windows, Microsoft provide the small and freely available Disk2vhd (go to the Windows Sysinternals page and download the utility) or you may prefer an automated tool like the free AOMEI Backupper. Again, many free tools exists, P2V is trivial.

How to do an Odoo inventory import

In Odoo, inventories are managed through Inventory / Inventory Control / Inventory Adjustments. Importing your stock, means creating an inventory adjustment. You will import your first stock (initial inventory), using exactly the same procedure as later stock’s imports.

Minimal prerequisites

  • At least one warehouse created (should be done automaticaly)
  • Products and variants already imported

First obvious option is to create a new Inventory Adjustment, checking the « All products » option. Then press Start Inventory button : products will be populated. You can modify stock inline in Real Quantity column. But with lots of products, you will prefer to do that in a spreadsheet :

  1. keep your first Inventory Adjustment in draft mode,
  2. go back to Inventory Adjustments, select your inventory, export it (select the required fields as the below list),
  3. update your spreadsheet and import it back.

Required fields to export / import

  • Company (company id) : company_id/id, usually « base.main_company »
    (this field should have only one record)
  • Inventoried Location (warehouse) : location_id/id, with only one warehouse it will be « stock.stock_location_stock »
    (this field should have only one record)
  • Inventory Reference (inventory name) : name, whatever
    (this field should have only one record)
  • Inventories / Product (product external id) : line_ids/product_id/id
  • Inventories / Product Name : line_ids/product_name
  • Inventories /Checked Quantity (product stock) : line_ids/product_qty

You will get also (automaticaly added) :

  • Stock inventory id (external id) : id
  • Inventories : line_ids/location_id/id

Step by step how-to import products stock in Odoo

Open a spreadsheet, populate it with your product names, product external id and product quantity — much easier to export them from Odoo ; export from product’s variants if you use them.

Rename your columns as follow :

  • Product name : line_ids/product_name
  • Product external id : line_ids/product_id/id
  • Product quantity : line_ids/product_qty

Add following columns (corresponding to field’s name) at the end. The order doesn’t matter :

  • company_id/id
    (this column will contain one record on the first line only, usually « base.main_company »)
  • location_id/id
    (this column will contain one record on the first line only, usually « stock.stock_location_stock »)
  • name
    (this column will contain one record on the first line only, put whatever you want)
  • line_ids/location_id/id
    (every line will contain the same value as the first line of location_id/id)

Save it as a CSV file. Open Odoo Inventory menu, go to Inventory Adjustment and press the Import button.

Once imported, a new entry will be created in Draft status. Open the entry and press Start Inventory. Validate the inventory if everything is ok.

 

How to export an aging inventory with Odoo

Odoo apps are well integrated. Products datas are shared accros modules, and the accounting module can « talk » very well with the inventory one. Doing everything in Odoo is easy. But sometimes you need just a spreadsheet with your past inventory at a precise date. That functionality is a bit hidden. Here’s how to enable it :

  1. install the Accounting module
  2. enable multi-location inventory
  3. switch to developper mode to see hidden menus
  4. go to Inventory / Reports / Aging inventory

To export :

Quickly done

… but product name, stock and stock value only

  1. on the right of the list view, click on Tableau Croisé dynamique
  2. now click on the download icon (xls file)

Complete nightmare

… but you may be able to export every needed field

  1. from list view unfold all products, check the checkbox
  2. click on Action / Export
  3. click on all available fields
  4. choose your fields, don’t forget inventory moves, quants and associated dates
  5. export
  6. try to play with your spreadsheet
  7. go to Quickly done

Odoo installation on a minimal Centos 7.x / RedHat 7.x web server

This how-to describe a minimal Odoo installation on Centos or RedHat. It can be easily adapted to any Linux distribution (Debian, Ubuntu, SuSE, Mandriva, Arch Linux, …). This a simple, easy and rock-solid way to install Odoo for small groups.

An eye on the doc

First steps — just for those who forget something

Create one user account, add the user to the wheel group. This will let you use sudo. Add your ssh-key, from local to remote :

$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@IP

Install yum utilities and some of your favorite’s command-line tools. Yum utilities comes with the useful yum-config-manager. Even if you don’t use it, it can show you the whole params of each repositories. Here below I install  Lynx text browser to read html pages in Midnight-Commander.

# yum install yum-utils
# yum install nano mlocate screen wget mc lynx unzip

Install postgresql-server and start it, otherwise Odoo will not be able to create odoo user.

# yum install postgresql-server
# postgresql-setup initdb
$ systemctl start postgresql

Enable EPEL repository

We need complementary packages, not provided by distribution repository. Basicaly we have two solutions :

  1. add Software Collections packages
  2. add new repositories

Software Collections are installed in parallel from distribution’s package. Our server will only run Odoo, so there is no need to separate packages. It is easier to add repositories.

EPEL is Extra Packages for Enterprise Linux. The epel-release package is included in the CentOS Extras repository that is enabled by default. One just need to type :

# yum install epel-release

To clear any cached information, and to make sure the changes are immediately recognized :

# yum clean all 
# yum update

If you need, install some more utilities from Epel. I like p7zip.

Add Odoo repository

Odoo provide package. You can download it or install from nightly builds repository (both are the same).

# yum-config-manager --add-repo=https://nightly.odoo.com/10.0/nightly/rpm/odoo.repo
# yum clean all
# yum update
# yum install odoo
$ systemctl start odoo

Download wkhtmltopdf and install it. Do not use the package from Epel repository as it can’t handle headers and footers.

A bit of testing

Stop Firewalld and connect to http://[your-hostname]:8069/ default login/password is admin/admin. Create a dummy or template database. Don’t install applications, just configure Administrator account :
in configuration menu, go to users and change Administrator’s timezone, email, and choose a solid password. You will be disconnected. Login with the new params. If it’ ok, disconnect again and stop Odoo server. Restart Firewalld to protect your web server.

Basical configuration

Odoo master password, Firewalld, fail2ban, services.

Choose a new Odoo master password. You may play with a password generator. Add it to odoo.conf :

# nano /etc/odoo/odoo.conf

[options]
; This is the password that allows database operations:
admin_passwd = whatever big and solid
db_host = False
db_port = False
db_user = odoo
db_password = False
addons_path = /usr/lib/python2.7/site-packages/odoo/addons

Need to open the port on Firewalld. We create Odoo service that we will enable on the firewall public zone.

# nano /etc/firewalld/services/odoo.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
 <short>Odoo</short>
 <description>
  Open Odoo default port.
 </description>
 <port protocol="tcp" port="8069"/>
</service>

Enable Odoo on public zone ; the –permanent option needs to be the first option for all permanent calls (1). Don’t forget to reload the firewall !

# firewall-cmd --permanent --zone=public --add-service=odoo
# firewall-cmd --reload

Similarly, enable http and https services:

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload

Install and start Fail2ban, then enable services on startup :

# systemctl enable postgresql
# systemctl enable odoo
# systemctl enable fail2ban

And start Odoo again. Connect to Odoo.

A template database

Now we will setup a « template » database. Something with all the basics that we need. Start with security and backup :

Install Letsencrypt and Database Auto-Backup module from OCA’s server tools repository. Download zip from https://github.com/OCA/server-tools/

Setup auto-backup. Test it : make a backup, get it, try to restore.

You will certainly need to increase the time-out on your server. Beware that as long as you db grows, the backup grows as well. But the heavier part will certainly be the multiples files (images, documents, …) that Odoo will generates for you.

Use Letsencrypt to get an SSL certificate as soon as domains are moved on your server.

Web environment ribbon is a very useful utility for those who works on several Odoo instances. You will got a red ribbon on the top left corner in every page (ribbon name and color can be changed).

Add users, configure company, email servers, etc.

Backup or duplicate your database with Odoo database manager. You will leave your first copy untouched. It will be used as a template. For further installations, just duplicate your template and install everything you need.

If you want a server admin panel

Avoid extra dependencies (PHP, MySQL, …). If you can, choose Perl based or Python based software if possible.

  • Webmin use Perl, it have a lots of modules, is actively developped, but old ;
  • BlueOnyx is built with Java and Perl, based on a product developped by Cobalt, it’s solid but  a bit old ;
  • Ajenti use Python but does only a few things so far, it is recent and light ;
  • A few other ones doesn’t need MySQL, but use PHP.

Accelerate Odoo

Depending on what you need you will configure Postgresql, Odoo and Nginx web server for speed and efficiency.

How-to move Odoo to another server

On the old server Odoo is setup with e-commerce website. On the new server, avoid extra dependencies if Odoo doesn’t need them (web server, php, …).

First steps

  1. keep a TODO-list
  2. create a subdomain, to test your paiement module on the new server
  3. install your ssh-key
  4. install some command-line tools : midnight-commander, nano editor, mlocate, wget, screen, unzip
  5. might want to install a graphical web-server admin. I like Webmin, because it’s well maintained, depends only of Perl and use its own web server.
  6. install a networked resource monitoring tool with graphs output, like Munin (or webminstats if you use Webmin)
  7. install Postgresql, create necessary users and configure it. Refer to Odoo install documentation.
  8. install Odoo, setup Odoo with workers and debug log
  9. stop firewall to access Webmin and Odoo, you will configure the firewall later (TODO list)

Setup Odoo

  1. create a dummy database with all necessary modules, add all modules you had on the old server. Test it (might want to include demo datas to test it extensively — check ‘evaluate Odoo’ when you are creating the database).
  2. test your credit card paiement module
  3. backup your old Odoo database
  4. create a new, empty, database on the new server
  5. restore your old database on the new database. test it extensively
  6. install letsencrypt Odoo module, first install python-pip, then do
    sudo pip install acme-tiny
    sudo pip install IPy
  7. install auto backup odoo module on the new server and test it : do a backup/restore operation. First install python-pip and do
    sudo pip install pysftp
  8. install nginx and set it up
  9. install fail2ban
  10. open necessary ports on the firewall and restart it

 

Champs pour cataloguer ses livres

Voilà on peut dorénavant chanter un petit air et votre ordinateur catalogue un livre tout seul ! Par exemple :

♫ ♪ pom pom pom pom ! i, s, b, n ! 2, 950, 62, 10 ! 5, 8 ! comme neuf !  ♫ ♬ ♪

Oui oui oui.
Allez je complète :

Champs pour cataloguer ses livres dans une base de données

Des « champs » ? rien de compliqué, dans un tableau ce serait le nom des colonnes : auteur, titre, etc.
Comme ce n’est pas si facile de bien les choisir, voici ma liste (version 1.8), constituée après pas mal d’essais et de retouches. Je me suis inspiré de normes bibliographiques (BibTeX, DublinCore, Marc/Unimarc, ONIX, EDIFACT) et de logiciels pour vendeurs de livres (Prager, Booktrakker, HomeBase).
Et comme tous ces champs devaient être auto-magiquement remplis à partir de quelques renseignements de base (code ISBN ou titre ou mots-clefs), la liste est conditionnée aux information disponibles via les sources de données sur internet.
Un des problèmes à résoudre, c’est l’efficacité : entrer suffisamment d’informations pour lier n’importe quel livre à la bonne description sur les places de marché, sans avoir trop de cases à remplir « à la mano ». C’est tout bête : un truc trop complexe sera mal rempli ! J’ai donc mixés certains champs, par exemple le « titre original » va aussi bien dans « autre titre » et l’ISBN d’origine peut aller à la suite du titre original.

Donc, voici la liste, version 1.8

Elle est typographiquement structurée :

nom_interne_du_champ
Nom affiché : Description du champ (type de champ)

Généralités

On y décrit le livre en général, pas la version imprimée qu’on a en main.
author
Auteur (texte, plusieurs valeurs)
title
Titre (texte)
subtitle
Sous-titre (texte)
other_title
Autre titre : Sert aussi pour le titre dans la langue d’origine (texte)
first_publication_date
Première publication : Année de première publication (numérique)
original_language
Langue d’origine (texte, plusieurs valeurs)
personal_note
Avis : Brève appréciation de lecture (texte)
personal_rating
Note : De une à cinq étoiles (liste)
created_by
Noté par : Personne qui a lu le livre (liste)
movie
Film : En a t-on tiré un film ? (case à cocher)
feminism
Féminin : Auteur femme ou livre féministe ou sur les femmes (case à cocher)
[autre]
[Autre : Autre case à cocher utile (case à cocher)]
subject
Sujet : Sujet du livre, liste d’Amazon pour les vendeurs (liste)
genre
Genre : Importe l’arbre de classement d’Amazon (texte, plusieurs valeurs)
keyword
Mots-clés (texte, plusieurs valeurs)
dewey
Dewey : Classification Dewey, cote (texte)
lcc
LCC : Classification de la Librairie du Congrès, cote (texte)

Publication

Cette fois c’est la version imprimée!
isbn
ISBN# : Numéro international normalisé du livre (texte, contrôlé)
lccn
LCCN# : Numéro de contrôle de la Librairie du Congrès (texte, contrôlé)
asin
ASIN# : Code produit Amazon (texte)
binding
Reliure : Type de reliure, liste d’Amazon (liste)
publisher
Maison d’édition : Sans le « Éditions … » (texte)
address
Ville : Lieu d’édition (texte)
pub_year
Année de publication (numérique)
cr_year
Année copyright (numérique)
series
Collection / série (texte)
series_num
N° dans la série (texte)
translator
Traducteur : Premier traducteur
illustrator
Illustrateur : Seulement les récurrents, les moins prolifiques vont dans Autres noms (texte)
pages
Pages : Nombre total de pages, pas seulement numérotées (numérique)
language
Langue : Langue(s) de publication séparées par point-virgule, en anglais (texte, plusieurs valeurs)
edition
Édition : Première, deuxième édition, … (liste contenant 1ère Édition;2ème Édition;3ème Édition;4ème Édition;5ème Édition;Édition Club de livre;Édition spéciale;Édition limitée;Édition illustrée)
tirage
Tirage : Numéro de tirage (liste contenant 1er tirage;2ème tirage;3ème tirage;4ème tirage;5ème tirage et plus;Tirage inconnu)
volume
Tome / volume : Tome ou volume (numérique)
paper_format
Format bibliophile : Format de pliage du papier pour bibliophilie (liste contenant in-4°;in-8°;in-12°;in-16°;in-32°;in-48°;in-64°;Atlas Folio;Double Éléphant;Éléphant folio;in folio)
cover_rating
Impact de la couverture : Évaluer l’élégance et l’impact visuel de la couverture, pas l’état!. Ce champ sert à préparer des vitrines (liste de 1 à 5 étoiles)
other_names
Autres noms : Les autres noms possibles (tableau contenant Traducteur;Illustrateur;Auteur;Photographe;Préface;Introduction;Postface;Responsable d’édition (editor en anglais);Maquette;Autre)

Prix de vente

Ce sont des champs qui servent à déterminer le prix de vente. Ils sont tous automatiquement remplis (si, si même les frais de port!) sauf l’état, la note d’état et le prix de vente, bien sûr. Exemple avec Amazon.
amazon
Lien Amazon (url)
amz_sales_rank
Rang de vente sur Amazon (numérique)
amz_total_offers
Qté Amazon : Quantité vendue par Amazon (numérique)
amz_total_new
Qté neuf : Total de livres neufs vendus sur Amazon (numérique)
amz_lowest_new_price
Vendu neuf : Prix neuf le plus bas sur Amazon, port déduit (numérique)
amz_total_used
Qté occasion : Total de livres d’occasion vendus sur Amazon (numérique)
amz_lowest_used_price
Vendu occasion : Prix occasion le plus bas sur Amazon, port déduit (numérique)
amz_total_refurbished
Qté rénové : Total de livres « refurbished » vendus par Amazon (numérique)
amz_total_collectible
Qté collection : Total de livres de collection vendus sur Amazon
amz_has_reviews
Noté : Commenté par des lecteurs ? (case à cocher)
amz_rating
Note lecteurs : Note moyenne sur Amazon (liste de 1 à 5 étoiles)
amz_total_comments
Commentaires : Nombre de commentaires sur Amazon (numérique)
length
Longueur : Longueur en mm (numérique)
width
Largeur : Largeur en mm (numérique)
height
Hauteur : Hauteur en millimètres (numérique)
weight
Poids : Le poids en gramme (numérique)
dust_jacket_condition
État jaquette : Vide si livre normalement sans jaquette (liste contenant Neuf;Comme neuf;Très bon;Assez bon;Bon;Satisfaisant;Moyen;Mauvais;Pas de jaquette;Jaquette)
condition
État : État du livre (liste contenant New;UsedLikeNew;UsedVeryGood;UsedGood;UsedAcceptable;CollectibleLikeNew;CollectibleVeryGood;CollectibleGood;CollectibleAcceptable;Refurbished;Club)
condition_note
Note d’état : Très court, ce qui apparait pour les acheteurs sur Amazon (texte)
publisher_price
Prix éditeur : Prix imprimé sur la couverture (numérique)
pur_price
Prix d’achat (numérique)
pur_date
Date d’achat : Générée à partir de la date d’entrée du livre en base de données, sert à revoir les prix quand c’est en vente depuis trop longtemps (date)
shipping_price
Prix du port : Frais de port en France (numérique)
price
Prix de vente (numérique)
about_shipping
Envoi : Sur l’envoi, ira automatiquement dans note d’état (texte pré-rempli, adaptable)
about_seller
Vendeur : À propos du vendeur, ira automatiquement dans note d’état (texte pré-rempli, adaptable)

Inventaire

comments
Présentation : Présentation, avis, texte de la 4ème de couverture, récupéré en ligne (bloc de texte)
abstract
Résumé : Synopsis, résumé ou 4e de couverture, récupéré en ligne (bloc de texte)
cover
Couverture : Couverture, récupérée en ligne (image)
back_cover
Dos : Quatrième de couverture, récupérée en ligne (image)
nota_bene
Nota : Notes diverses, non visibles (texte)
warehouse_place
Carton : Emplacement de stockage (texte)
qty
Qté : Nombre d’exemplaires dans le même état (numérique, pré-rempli à 1)
sku
SKU : Identifiant unique (texte)
cdate
Créé le (date, automatique)
mdate
Modifié le (date, automatique)
Post Scriptum aux concepteurs de base de données :

Pour être compréhensible à tous, j’ai sauté la partie tables et relations et le type de champ est simplifié.