見出し画像

購買アプリを使う予定が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の中身やマスターパスワードの再設定というディープな内容となってしまいました。

この記事が気に入ったらサポートをしてみませんか?