Dienstag, 25. November 2014

Odoo/OpenERP: Wenn der "Primary Key" mal verloren geht.

Bei unseren Odoo/OpenERP Installationen kam es nach einigen Updates vor, dass die "Sequence ID"s der PostgreSQL Datenbank nicht mehr gestimmt haben.

Hintergrund:
Jede Tabelle in der Odoo-Datenbank hat ein ID-Feld. Darauf zeigt der "Primary Key". Dadurch wird verhindert, dass ein Datensatz doppelt vorkommt.
Über einen "Autozähler" wird der Wert beim "Insert" erhöht, was über eine Sequenz verwaltet wird.

Diese ID war auf einmal zu niedrig, was dazu führte, dass keine neuen Datensätze vor allem in den Tabellen der Website hinzugefügt werden konnten.

Das folgende Skript kontrolliert alle Tabellen der Odoo-Datenbank und setzt den Sequenz Wert auf den MAX-Wert.


# -*- coding: UTF-8 -*- ############################################################################## # # Python Script for Odoo, Open Source Management Solution # Copyright (C) 2014-now Equitania Software GmbH(<http://www.equitania.de>). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## __author__ = 'm.schmid@equitania.de' import psycopg2 #Connection with the Connectionstring conn = psycopg2.connect('dbname=Databasename user=postgres host=localhost password=Databasepassword') cur = conn.cursor() #Gets the tables with an primary key cur.execute("""select tc.table_schema, tc.table_name, kc.column_name from information_schema.table_constraints tc, information_schema.key_column_usage kc where tc.constraint_type = 'PRIMARY KEY' and kc.table_name = tc.table_name and kc.table_schema = tc.table_schema and kc.constraint_name = tc.constraint_name order by 1, 2;""") #Tables that have the id field, without a value. blacklist = ['ir_act_client', 'ir_act_report', 'ir_act_report_xml', 'ir_act_server', 'ir_act_url', 'ir_act_window'] for table in cur.fetchall(): if table[1] not in blacklist: #Max ID cur.execute("SELECT MAX(id) FROM %s;" % (table[1])) max_id = cur.fetchone() #Next ID cur.execute("SELECT nextval('%s_id_seq');" % (table[1])) next_id = cur.fetchone() #If max_id bigger than next_id and both aren't None if max_id[0] != None and next_id[0] != None: if int(next_id[0]) <= int(max_id[0]): #Sets the PKey to the max_id + 1 cur.execute("SELECT setval('%s_id_seq', %s);" % (table[1], max_id[0] + 1)) print("Tabelle " + table[1] + " hatte eine fehlerhafte ID.") else: print('ID für die Tabelle ' + table[1] + ' ist fehlerfrei.') else: print('Kein Eintrag in der Tabelle ' + table[1] + '.') print("Fertig!")

Sonntag, 23. November 2014

QWEB Pickinglist für Odoo/OpenERP

In unserem Open Source Repository auf GITHub haben wir jetzt auch die "Pickinglist/Lieferschein" für Odoo/OpenERP bereitgestellt.

Näheres unter
https://github.com/equitania/odoo-addons



Samstag, 22. November 2014

Spracheinstellungen, Dezimalstellen und Tausender-Separator mit Odoo/OpenERP

Wenn man eine neue Datenbank für Odoo/OpenERP erzeugt und die deutsche Lokalisation gewählt hat, wundert man sich, warum das Datum und die Zahlenformate nicht stimmen.

Ich hoffe, dass wir es schaffen unter dem OCA Projekt http://portal.sliderocket.com/openbig/OCA-Deutsche-Lokalisierung künftig eine bessere deutsche Oberfläche hinbekommen. Jeder ist eingeladen dort mitzumachen. http://odoo-community.org/

Bis dahin hier ein paar Tipps:

Datums- und Zahlenformate

Odoo: Spracheinstellungen
































Unter Languages/Sprachen wählt man die deutsche Sprache aus und korrigiert das Datumsformat von "%m/%d/%Y" auf "%d.%m.%Y". Danch setzt man den Dezimalseparator auf "," und the Tausender-Separator auf ".".

Wichtig!
Nie beide Separatoren gleichsetzen!

Jetzt korrigiert man das Separator-Format auf "[3,0]".

Dezimalstellen

Odoo: Dezimalstellen
Unter Datenbank-Struktur kann man die Dezimalstellenlänge für die verschiedenen Werte ändern. Bis auf die Währungen. Diese Einstellung findet man unter den Einstellungen "Finanzen/Rechnung"

Odoo: Finanzen

Übersetzungen

Installiert man Module nach, kommt es meist vor, dass nicht alle Wörter auf Deutsch erscheinen.

Odoo: Sprache neu laden
Dies löst man, in dem man die Sprache neu lädt und die bestehende Übersetzung überschreibt.
Für manche Module gibt es leider keine deutsche Sprache-Version. Wie man diese übersetzt erkläre ich in einem späteren Blogeintag. Versprochen ;)








Samstag, 8. November 2014

Odoo/OpenERP installieren, updaten, Backup/Restore so einfach wie noch nie mittels Shellskripten

Da ich immer bemüht bin Prozesse zu optimieren, habe ich inzwischen diverse Shellskripte erstellt, die das Arbeiten mit Odoo einfacher machen.

Alle Skripte liegen unter https://github.com/equitania/odoo-addons/tree/master/scripts

Die Skript sind für den Ubuntu 14 LTS geschrieben und getestet.


Wenn man die Skript auf seinen Server kopiert hat, muss man diese noch ausführbar machen:
sudo chmod +x SKRIPTNAME
Gehen wir mal die Skripte im einzelnen durch:

Server Vorbereitung

https://github.com/equitania/odoo-addons/blob/master/scripts/prepare-odoo-server.sh 

Dieses Skript installiert alle nötigen Module, die für Odoo gebraucht werden. Das Skript wird regelmäßig angepasst und kann auch zum Server Update benutzt werden. Ferner für es eine PostgreSQL Optimierung durch.

Odoo Installation

https://github.com/equitania/odoo-addons/blob/master/scripts/install-odoo-server.sh 

Das Skript installiert den Odoo Server komplett und für den "Dämon" gleich als Autostart ein.
Die Installation basiert auf unserem Odoo-Fork https://github.com/equitania/odoo, welcher wöchtlich aktualisiert wird. Es legt einen User "odoo" an und setzt auch die Passworte für die PostgreSQL und die Datenbankpflege.

Odoo Server Update

https://github.com/equitania/odoo-addons/blob/master/scripts/update-odoo-server-addons.sh

Wichtig: Das muss als User "odoo" durchgeführt werden, aber vorher den Dämon stoppen!
sudo su /etc/init.d/openerp-server stop
sudo su odoo 
Das Skript führt zunächst ein Backup durch. Danach wird unser Odoo-Fork https://github.com/equitania/odoo geupdatet und auch die Equitania Erweiterungen installiert.
Danach wird die Datenbank aktualisiert. 

Sind alle Updates gelaufen (Error sind rot, Warnings gelb und sind meist zu ignorieren), stoppt man das Skript mit [crtl]+[c].
2014-11-08 14:47:33,658 22212 INFO db openerp.models: Computing parent left and right for table ir_ui_menu...

Backup & Restore

Mit diesen beiden Skripten kann man ein Backup/Restore auf Shell-Ebene durchführen. Das ist sicherer als es über die Weboberfläche zu machen.
Dazu auch den "odoo"-User nehmen.





Mittwoch, 5. November 2014

web.base.url im Odoo/OpenERP Server bei nginx setzen

Wenn man die Website von Odoo einsetzt und seinem Kunden einen Zugriff auf das Webportal ermöglichen will, dann muss man die web.base.url setzen.

Soweit so gut. 

Hat man allerdings eine Portweiterleitung mit dem "nginx" eingerichtet, dann wir die web.base.url immer wieder automatisch gesetzt.

Dies kann man durch den Zusatz-Parameter:

web.base.url.freeze = True

verhindern, siehe Grafik.

Danke an Josef Kaser von https://www.inox-tech.de  für den Tipp!

web.base.url parameters odoo





























Dienstag, 4. November 2014

Wie geht es mit Apple weiter, wenn schon die eingefleischten Fans zu Android wechseln?

Nachdem ich seit dem iPhone 3 bis zum iPhone 5s ein Gerät von Apple hatte, bin ich heute auf ein Sony Xperia Z3 umgestiegen. Man muss dazu sagen, dass ich auch Programme für iPhone entwickle.
Ferner habe ich mehrere Macs, Apple TV, iPad etc. und einen Apfelaufkleber auf dem Auto;)

Die Arroganz und der Umgang mit den Kunden ist für mich nicht länger hinnehmbar.
Nicht nur von Apple, sondern auch von meinem derzeitigen Provider Vodafone.

Vor fast genau einem Jahr habe ich meinen Vertrag bei Vodafone verlängert und bin vom iPhone 4s auf das iPhone 5s umgestiegen. Gesagt werden muss, dass wir als Firma noch andere Verträge bei Vodafone haben, die eigentlich mit einem neue Mobilfunkgerät verlängert werden könnten.

Dies wurde uns im Februar mitgeteilt. Als das iPhone 6 vorstellt wurde, wollte ich das tun - da sagte aber Vodafone, dass die anteiligen Zusatzgebühren nicht anrechenbar seien. Wo das stehen sollte, ist uns bis heute nicht gesagt worden. Auch der Wechsel auf einen SIM-Only-Tarif wäre nur möglich, wenn wir auf 24 weitere Monate verlängern.

Die Strategie ist ganz offensichtlich. Wegen 100-200 € geht keiner vor Gericht oder beauftragt einen Anwalt. Okay sagte ich mir, dann halt kein neues iPhone und habe alle Vodafone Verträge gekündigt.

Kurze Zeit später wurde ich Sprachqualität meines iPhone 5s immer schlecht. Danach habe ich etwas recherchiert und festgestellt, dass dieses Problem lange bekannt ist und es keine richtige Lösung dafür gibt. :( Man kann von einem Smartphone nicht erwarten, dass man damit telefonieren kann.

Also habe ich erstmal bei der Business Hotline von Vodafone angerufen. Dort wurde mir dann gesagt, ich müsste das Gerät einschicken, das wären die Vorgaben von Apple. Bei jedem anderen Gerät gäbe es sofort einen Austausch. Mit was ich inzwischen telefonieren sollte, wurde mir nicht gesagt und das es ein großer Aufwand ist das Gerät zu sichern und wieder herzustellen interessiert wohl niemanden. Ich solle mich direkt an Apple wenden.

Okay - dann rufe ich mal an, dachte ich. Nach über 20 min. Warteschleife habe ich entnervt aufgelegt und 20 min. nach einer E-Mail Adresse gesucht. Auffallend ist, dass man alles schnell findet, wenn Apple einem etwas verkaufen will. Bei Reklamationen wird es da schon schwieriger. An den Support kann man gar nicht schreiben. Also habe ich die allgemeine Adresse "contactus.de@euro.apple.com" gewählt. Nach einem Tag kam die lapidare Antwort, dass ich die Hotline anrufen soll.

Daraufhin habe ich meine "rosa" Apple-Brille abgesetzt und einfach mal die Frage gestellt, "was wäre wenn.. " Diese Frage hat sich vorher nie gestellt. Einmal Apple immer Apple.

Man kann noch so viele Tests derzeit lesen und kommt immer wieder zu dem Schluss, so toll sind die Apple-Produkte gegenüber der Konkurrenz gar nicht mehr. Und Android ist schon lange ebenbürtig, wenn nicht sogar in bestimmten Bereichen besser. Von der Hardware wollen wir gar nicht sprechen.

Jetzt habe ich ein Gerät, dass rund 40% günstiger war als ein vergleichbares Apple Produkt. Zudem ich es staubgeschützt und Wasser dicht. Zum Einrichten und übertragen der Daten habe ich auch nicht länger gebraucht, da ich vieles in der "Wolke" speichere.

Was ich aber kaum geglaubt hätte: Die Integration in meinen BMW ist besser! Jetzt kann ich zu den Kontakten sogar die Bilder sehen und kann SMS und E-Mail direkt in meinem ConnectedDrive vorlesen lassen. Ging mit dem iPhone nicht!

Mein Fazit: Wenn der Kunde nicht mehr als Kunde wahrgenommen wird und die Produkte auch kein wirkliches Alleinstellungsmerkmal haben, wird Apples Stern über kurz oder lang untergehen. Ich bin auf jeden Fall froh, dass ich den Schritt getan habe, auch wenn in mir jetzt einige Kommentare anhören muss. ;)

iTunes Match beende ich jetzt auch und mein Apple TV ist durch ein Kindle Fire TV ersetzt. Den Aufkleber auf meinem Auo mache ich auch runter!

Montag, 3. November 2014

Odoo/OpenERP Server mittels Shell-Skript vorbereiten

Heute habe ich ein kleines Shell-Skript erstellt, dass alle nötigen Pakete auf einem Ubuntu Server 14  installiert, die für Odoo benötigt werden.

Zunächst meldet man sich am Ubuntu Server an und wechselt zu "Root"-Rechten:
sudo su
Danach erstellt man die Datei z.B. mit dem Texteditor "nano"
nano prepare-odoo-server.sh
Dort kopiert man die folgenden Zeilen rein.

#!/bin/bash # Mit diesem Skript werden alle Pakete für den Odoo Betrieb unter Ubuntu installiert # Skript muss mit root-Rechten ausgeführt werden echo "Prepare Ubuntu" apt-get update && apt-get dist-upgrade && apt-get autoremove echo "Tools zip, unzip, mc(Midnight Comander) und htop werden installiert..." apt-get install mc zip unzip htop echo "Wollen Sie die PostgreSQL-DB installieren (j/n):" read mypsql if [ "$mypsql" = "j" ]; then echo "PostgreSQL wird installiert..." apt-get install postgresql else echo "PostgreSQL wird nicht installiert!" fi apt-get install ghostscript graphviz antiword git libpq-dev poppler-utils python-pip apt-get install python-dateutil python-pypdf python-requests \ python-feedparser python-gdata python-ldap python-libxslt1 \ python-lxml python-mako python-openid python-psycopg2 \ python-pybabel python-pychart python-pydot python-pyparsing \ python-reportlab python-simplejson python-tz python-vatnumber \ python-vobject python-webdav python-werkzeug python-xlwt \ python-yaml python-zsi python-docutils python-psutil \ python-unittest2 python-mock python-jinja2 python-dev \ python-pdftools python-decorator python-openssl python-babel \ python-imaging python-reportlab-accel \ python-paramiko python-software-properties pip install passlib beautifulsoup4 evdev echo "Wollen Sie das Modul HTML2PDF installieren (j/n):" read mypdf if [ "$mypdf" = "j" ]; then echo "HTML2PDF wird installiert..." wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-trusty-amd64.deb dpkg -i wkhtmltox-0.12.1_linux-trusty-amd64.deb rm wkhtmltox-0.12.1_linux-trusty-amd64.deb else echo "HTML2PDF wird nicht installiert!" fi echo "Wollen Sie die PostgreSQL-Einstellungen optimieren (j/n):" read mysql if [ "$mysql" = "j" ]; then echo "PostgreSQL wird optimiert..." apt-get install pgtune sudo pgtune -i /etc/postgresql/9.3/main/postgresql.conf -o /etc/postgresql/9.3/main/postgresql.conf.tuned sudo mv /etc/postgresql/9.3/main/postgresql.conf /etc/postgresql/9.3/main/postgresql.conf.old sudo mv /etc/postgresql/9.3/main/postgresql.conf.tuned /etc/postgresql/9.3/main/postgresql.conf sudo /etc/init.d/postgresql stop sudo /etc/init.d/postgresql start sudo cat /etc/postgresql/9.3/main/postgresql.conf else echo "PostgreSQL wird nicht optimiert!" fi echo "Finished!"

Zuletzt muss dem Skript noch Execute-Rechte gegeben werden:
chmod +x prepare-odoo-server.sh
Jetzt kann es gestartet werden:
./prepare-odoo-server.sh
Das Skript installiert nicht nur alle Pakete, es optimiert auch gleich die Postgres-Einstellungen.



Sonntag, 2. November 2014

Neue Quellen für unsere Odoo/OpenERP Installation und Addons

Wir haben unsere öffentlichen Repositories von Bitbucket zu Github umgezogen:

https://bitbucket.org/equitania-ondemand/odoo ist jetzt unter https://github.com/equitania/odoo

https://bitbucket.org/equitania-ondemand/odoo-addons ist jetzt unter https://github.com/equitania/odoo-addons

Dies hatte mehrere Gründe:

  • Wir haben nun einen direkten Fork von https://github.com/odoo/odoo gemacht. Dadurch wird die Pflege einfacher. 
  • In der Regel wird das Repository wöchentlich, in Ausnahmen täglich, aktualisiert. Es wurde kleinere Änderungen zu Installation und Entwicklung eingefügt.
  • Ferner ist das Handling für Laien mit einfacher.