購買アプリを使う予定がDB関係の探索に
Odooで購買アプリをインストールしたので、何か購入してみたくなりました。
今回の目標は
仕入れ先を設定
見積依頼を発行
仕入れ先からの見積書で価格と納期を設定
購買発注実行
納品
としてみましたが、事態は思わぬ方向へ。
請求と購買の設定
発注してみる前に、請求と購買の設定を確認しておきました。
管理設定アプリを開きます。
請求設定の確認
物理配置の選択してみます。
勘定科目表テンプレートのインストール
この設定では、勘定科目や税の定義が読み込めるようです
"パッケージを追加"を実行します。
日本の勘定科目表テンプレートパッケージをインストールしました。
”もっと知る”を押すと日本のコタエル(Quartile)社のページに遷移しました。どうやらこの会社が、日本用の勘定科目表テンプレートを提供してくれているようです。
”インストール”を押して先に進みます。
検証エラーが発生
何やらエラーが表示されてしまいました。
日本語でエラーを検索しても有益な情報は出てこないので、英語に切り替えます。
表示の切り替え方法についてはこちらの記事に書いてあります。
英語版に切り替えて、再度日本用の勘定科目テンプレートをインストールし直してみました。
なるほど。分からん。会計のEDIフォーマットの記帳のための外部キーの制約の関係でデータが削除できないような感じです。が、やっぱりよくわかりません。Google様でもそれらしい答えは見つけられませんでした。
一旦、請求と購買アプリをアンインストールしてみます。
さらにGoogleで検索すると、そのものズバリのエラーではないのですが似たようなDBの制約に関係するエラーが出てきました。
DBにログインして、この制約を削除するとエラーが出なくなるっぽいです。
この現象はどうもOdooのバグであるというコメントいただきました
コメントをいただきました。
デモデータが存在している状態で、会計モジュールをインストールしようとすると現象が発生するようです。
やっぱりいきなりDBで制約を削除というのは、あまりにも乱暴な方法でした。
ただし、DBマネージャやDBへの接続方法が理解できてよかったです。
OdooのDB探索
PostgresSQLでOdooのDBに入る
Dockerで動いているDBに入ります。
Docker desktopだとDashboardからCUIでコンテナに接続できました。psqlコマンドでDBの一覧を見てみます。
$ psql -U odoo -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+------------+------------+-------------------
Odoo14 | odoo | UTF8 | C | en_US.utf8 |
postgres | odoo | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | odoo | UTF8 | en_US.utf8 | en_US.utf8 | =c/odoo +
| | | | | odoo=CTc/odoo
template1 | odoo | UTF8 | en_US.utf8 | en_US.utf8 | =c/odoo +
| | | | | odoo=CTc/odoo
インストール後の最初の画面で指定したDB名"Odoo14"の中に全てのデータが格納されているようです。
Odoo14に接続してみましょう。
$ psql -U odoo -d Odoo14
psql (14.2 (Debian 14.2-1.pgdg110+1))
Type "help" for help.
Odoo14=#
入る事ができました。
制約の設定を確認する
まずこの制約がどのテーブルに対して設定されているか調べました。
SELECT table_name, constraint_name
FROM information_schema.table_constraints
WHERE
table_schema = 'public'
AND
constraint_type = 'FOREIGN KEY'
AND
constraint_name = 'account_edi_format_account_journal_rel_account_journal_id_fkey'
;
table_name | constraint_name
----------------------------------------+---------------------------------------
-------------------------
account_edi_format_account_journal_rel | account_edi_format_account_journal_rel
_account_journal_id_fkey
(1 row)
account_edi_format_account_journal_rel というテーブルに存在しているようです。
このテーブル内容を見てみましょう。
Odoo14=# select * from account_edi_format_account_journal_rel
Odoo14-# ;
account_journal_id | account_edi_format_id
--------------------+-----------------------
(0 rows)
何も入ってませんね。
とりあえず制約を削除してみます。
Odoo14=# ALTER TABLE account_edi_format_account_journal_rel
DROP CONSTRAINT IF EXISTS account_edi_format_account_journal_rel_account_journal_id_fkey;
ALTER TABLE
Odoo14=#
削除できたようです。
Odoo上で日本の勘定科目表テンプレートパッケージをインストールしてみましょう。
別のエラーが出ました。
デモデータがインストールできなかったようです。
何か気持ちが悪いですね。Odoo14のDBを削除して作り直すのはどうでしょうか?
というところで、購買発注をする予定がこのエラーを何とか解決してみたくなってしまいました。
OdooのDB Manager
Odooは複数のDBを持つことが出来て、そのDBを管理する画面が存在していました。
http://localhost:8069/web/database/manager
にアクセスするとDB Managerの画面が開きます。
マスターパスワードを設定するように言われています。とりあえず無視しましょう。
ほとんど設定されていないDBなのでサクッと削除してしまいます。
Odoo DB再作成
するとOdooのDB作成画面が表示されました。
今回は言語を英語にして作成してみます。
Master Passwordは初めてOdooの設定をした際に画面上に表示されていたものを使いました・・・が、エラーに。
マスターパスワードを設定し直してみる
マスターパスワードはodoo.confに存在しているので、これを書き直せば良いという記事を見つけました。
早速やってみましょう。
odooのインストール先
Odooのコンテナにrootでターミナル接続します。
docker exec -it --user root odoo /bin/bash
Docker hub のOdoo公式コンテナでは
/usr/lib/python3/dist-packages/odoo
にインストールされています。が、odoo.confは別の場所にありました。
odoo.conf の場所
Docker hub にあるOdoo公式イメージでは、
/etc/odoo
に存在しています。
このファイルの中の"admin_passwd"を変更すればマスターパスワードが変更できるようです。
ところがこのコンテナにはviがインストールされていません。
困った。
sedを使うと良いらしいです。
catでodoo.confファイルの中身を確認すると、3行目にadmin_passwdが存在していました。
$ sed -n '3p' odoo.conf
admin_passwd = $pbkdf2-sha512…..
これを書き換えてみます。
失敗しても良いようにコピーを作ってから作業しましょう。
# cp odoo.conf odoo.conf.org
# sed -i -e '3d' odoo.conf
# sed -i -e '3i admin_passwd = sugoipasswa-do' odoo.conf
# sed -n '3p' odoo.conf
admin_passwd = sugoi-passwa-do
ここまで終わったらOdooとPostgresSQLのコンテナを再起動します。
でもデータなしでDBを作り直しました。
アプリをインストールし直して初期設定実施
まず請求アプリだけインストールしてみます。
なぜか日本の勘定科目表テンプレートパッケージが適用済みでした。
消費税関係を設定し直しておきます。
言語に日本語を追加、会社情報も元に戻しておきました。
購買発注をするつもりが、Odooが使用するDBの中身やマスターパスワードの再設定というディープな内容となってしまいました。