Tryton ERP開発:パート3

会社(会社)、取引先(当事者)、商品(製品)、倉庫(在庫)のモジュールを操作します。


パート1:tryotndのインストール、クエリ構造、データベースの操作
パート2:メソッド構造、ユーザーとグループの操作、モジュールのインストール
パート3:会社(会社)、取引先(パーティー)、商品(製品)、倉庫(在庫)のモジュールを操作します。

1.モジュールのインストール例


最初のイテレーションとして、倉庫の運用を確保するという課題がありました。 それでは、適切なモジュールをインストールしましょう。

ストックモジュールをダウンロードして解凍した後は、インストールできません。モジュールが機能するには、依存関係をインストールする必要があるためです。 モジュールの依存関係のリストを取得するには、 ir.module.dependenciesメソッドがありますが、 ir.module.dependencies依存関係が1つ返されます;このメソッドで必要なモジュールのリストをすぐに取得できませんでした。

model.ir.module.module.readメソッドはdependenciesフィールドを返しますが、必要なモジュールのIDのみがあります。 これらのメソッドを再び使用して、これらのモジュールの名前を取得できます。 モジュールのルートとdependsセクションにあるtryton.cfgを開いて必要なモジュールを確認する方が簡単ですが、 倉庫の場合、これは会社、通貨、IR、パーティー、製品です。 パーティーモジュールには会社の依存関係もあります。 必要なモジュールをダウンロードしてインストールします。

インストール後、 system.server.listMethodsはモデルクラスでさらに625個のメソッドを返します。 以下は、新しいメソッドの概略図です。



次に、これらの方法をさらに詳しく検討します。

2.モジュールを操作するためのAPI



すべてのクラスには、作成、削除、fields_get、検索、読み取り、書き込みの6つの主要なメソッドがあります。 以下に、主要なモジュールのクラスについて説明します。
2.1。 会社モジュールAPI

メソッド名パラメータ説明
model.company.company.search[user_id、cookie、[]、start、end、null、{}]既存の企業のidリストのスライスを返します(id [start:end])。
model.company.company.fields_get[user_id、cookie、[]、{}]会社が持っているフィールドのリストを返します。
model.company.company.read[user_id、cookie、list_of_company_ids、list_of_field_names、{}]指定した会社の指定したフィールドの値を返します。
model.company.company.create[user_id、cookie、[{field_name:field_data、field_name:field_data、...}]、{}]会社を作成します。少なくとも名前フィールドを設定する必要があります。
model.company.company.delete[user_id、cookie、list_delete_company_ids、{}]IDでユーザーを削除します。
model.company.company.write[user_id、cookie、list_update_company_ids、[{field_name:field_data、field_name:field_data、...}]、{}]IDによってユーザーフィールドの値を変更します。


会社モジュールには、従業員を作成できるマイナー従業員クラスがあります。 従業員を任命するには、会社の雇用者フィールドを変更する必要があります。

2.2。 パーティーモジュールAPI(カウンターパーティ)


メソッド名パラメータ説明
model.party.party.search[user_id、cookie、[]、start、end、null、{}]既存の請負業者のIDリストのスライスを返します(id [start:end])。
model.party.party.fields_get[user_id、cookie、[]、{}]取引相手が利用できるフィールドのリストを返します。
model.party.party.read[user_id、cookie、list_of_party_ids、list_of_field_names、{}]指定された取引相手の指定されたフィールドの値を返します。
model.party.party.create[user_id、cookie、[{field_name:field_data、field_name:field_data、...}]、{}]取引相手を作成します。少なくとも名前フィールドを設定する必要があります。
model.party.party.delete[user_id、cookie、list_delete_party_ids、{}]IDで取引相手を削除します。
model.party.party.write[user_id、cookie、list_update_party_ids、[{field_name:field_data、field_name:field_data、...}]、{}]IDによって取引先フィールドの値を変更します。


相手方モジュールにはセカンダリクラスアドレスがあり、アドレスを作成して相手方に割り当てることができます。 同じクラスがウェアハウスモジュールで使用されます。

2.3。 製品モジュールAPI

メソッド名パラメータ説明
model.product.product.search[user_id、cookie、[]、start、end、null、{}]既存の製品のidリストのスライスを返します(id [start:end])。
model.product.product.fields_get[user_id、cookie、[]、{}]製品で使用可能なフィールドのリストを返します。
model.product.product.read[user_id、cookie、list_of_product_ids、list_of_field_names、{}]指定された製品の指定されたフィールドの値を返します。
model.product.product.create[user_id、cookie、[{field_name:field_data、field_name:field_data、...}]、{}]製品を作成するには、少なくともフィールド名list_price、cost_price、default_uomを設定する必要があります。
model.product.product.delete[user_id、cookie、list_delete_product_ids、{}]IDで製品を削除します。
model.product.product.write[user_id、cookie、list_update_product_ids、[{field_name:field_data、field_name:field_data、...}]、{}]IDによって製品フィールドの値を変更します。


product.templateと同じことを行う同様のproduct.templateメソッドがあります。
商品の測定単位を示す必須フィールドdefault_uomにも注意を払う必要があります。 単位product.uom 、測定単位を操作するために使用されます。 したがって、使用可能な測定単位のリストを取得するには、メソッドmodel.product.uom.search, model.product.uom.read使用できます。

uom名のリストID
id役職
1ピース
2キログラム
3グラム
4カラット
5ポンド
6オズ
7第二
8
9
10営業日
11
12メーター
13キロメートル
14センチメートル
15ミリ
16
17
18インチ
19マイル
20立方メートル
21リットル
22立方センチメートル
23立方インチ
24立方フィート
25ガロン
26平方メートル
27平方センチメートル
28Ar
29日ヘクタール
30平方インチ
31平方フィート
32スクエアヤード



既存のユニットを取得する方法の例
 import json import requests url = 'http://localhost:8000/try' id = 1 methodname = 'common.server.login' params = ('test', 'test') request = json.dumps({ 'id': id, 'method': methodname, 'params': params, }) r = requests.post(url, data=request) user_id, cookie = r.json()['result'] print user_id, cookie id = 2 methodname = 'model.product.uom.search' params = [user_id, cookie, [], 0, 1000, None, {}] request = json.dumps({ 'id': id, 'method': methodname, 'params': params, }) r = requests.post(url, data=request) print request uom= r.json()['result'] id = 4 methodname = 'model.product.uom.read' params = (user_id, cookie, uom, ['name'], {}) request = json.dumps({ 'id': id, 'method': methodname, 'params': params, }) r = requests.post(url, data=request) print r.json()['result'] 



2.4。 カテゴリーAPI

すべてのメインクラスについて、階層的な分類を作成できます。 階層を作成するには、親のIDを示す親フィールドが使用されます。

メソッド名パラメータ説明
model。*。category.search[user_id、cookie、[]、start、end、null、{}]既存のカテゴリのIDリストのスライスを返します(id [start:end])。
モデル。*。category.fields_get[user_id、cookie、[]、{}]カテゴリで使用可能なフィールドのリストを返します。
モデル。*。category.read[user_id、cookie、list_of_category_ids、list_of_field_names、{}]指定されたカテゴリの指定されたフィールドの値を返します。
model。*。category.create[user_id、cookie、[{field_name:field_data、field_name:field_data、...}]、{}]カテゴリを作成します。少なくとも名前フィールドを設定する必要があります。
model。*。category.delete[user_id、cookie、list_delete_category_ids、{}]IDでカテゴリを削除します。
モデル。*。category.write[user_id、cookie、list_update_category_ids、[{field_name:field_data、field_name:field_data、...}]、{}]IDによってカテゴリフィールドの値を変更します。


2.5。 在庫モジュールAPI(倉庫)

倉庫ドキュメントを操作するにはadmin以外のユーザーを使用する必要があることを理解するのに多くの時間がかかりました。さらに、それを会社にバインドする必要があります(会社フィールドを指定)。そうしないと、応答でUserErrorが返されます。

ウェアハウスモジュールには、5種類のドキュメントがあります。
  1. stock.shipment.in-サプライヤから倉庫への商品の配達のドキュメント。
  2. stock.shipment.in.return-サプライヤへの商品の返品を文書化します。
  3. stock.shipment.internal-倉庫間の内部移動の文書。
  4. stock.shipment.out-倉庫からバイヤーへの商品の出荷のドキュメント。
  5. stock.shipment.out.return-バイヤーからの返品ドキュメント。


以下は、倉庫内の商品の動きを明確に理解するための図です。



複数の物理倉庫については、倉庫を配達および出荷のゾーンと複製するか、複数の保管ゾーンを作成する必要があります。

以下は、倉庫ドキュメントを操作するためのAPIであり、アスタリスクの代わりに、必要なドキュメントのクラスをmodel.stock.shipment.in.searchようにmodel.stock.shipment.in.searchます。

メソッド名パラメータ説明
モデル。[user_id、cookie、[]、start、end、null、{}]既存のドキュメントのidリストのスライスを返します(id [start:end])。
モデル。*。fields_get[user_id、cookie、[]、{}]ドキュメントで利用可能なフィールドのリストを返します。
モデル。[user_id、cookie、list_of_shipment_ids、list_of_field_names、{}]指定されたドキュメントの指定されたフィールドの値を返します。
モデル。[user_id、cookie、[{field_name:field_data、field_name:field_data、...}]、{}]ドキュメントを作成します。
モデル。[user_id、cookie、list_delete_shipment_ids、{}]IDでドキュメントを削除します。
モデル。[user_id、cookie、list_update_shipment_ids、[{field_name:field_data、field_name:field_data、...}]、{}]IDによってドキュメントフィールドの値を変更します。
モデル。[user_id、cookie、list_shipment_ids、{}]IDによって保留中のドキュメントの状態を変更します。
モデル。[user_id、cookie、list_shipment_ids、{}]ドキュメントの状態をidに変更します。


倉庫モジュールには、倉庫とゾーン間での商品の移動ではなく、倉庫と直接作業するための2次ロケーションクラスがあります。

model.stock.shipment.in.createメソッドのパラメーターの例を次に示します[user_id, cookie, [{"company": 1, "incoming_moves": [["create", [{"to_location": 1, "product": 1, "from_location": 5, "company": 1, "unit_price": {"decimal": "12.000", "__class__": "Decimal"}, "currency": 123, "uom": 2, "quantity": 90.0}]]], "warehouse": 4, "supplier": 1}], {}] 。 「unit_price」に注意してください:{「decimal」:「12.000」、「__ class__」:「Decimal」}、リクエストで「unit_price」:12.000を設定した場合、ウェアハウスモジュールは必要な番号を変換できないため、リクエストは実行されませんDecimalクラスに。 この動作は、価格を担当するフィールドでのみ見られます。

配達書類stock.shipment.inには、ドラフト(ドラフト)、完了の2つの状態があります。 残りのドキュメントには、ドラフト(ドラフト)、待機(待機)、完了(完了)の3つの状態があります。 文書のステータスは、商品と倉庫の残高に関するレポートに影響します。 ドキュメントにドラフトステータスがある場合、そのドキュメントに示されている製品はレポートに表示されません。 文書が待機状態の場合、レポートでは商品は転送/出荷元の倉庫にあります。 文書が完了状態の場合、レポート内の商品は、転送/出荷が行われる倉庫にあります。

倉庫モジュールには、特定の倉庫/供給-出荷エリアの製品のバランスに関するレポートがあります-wizard.stock.products_by_locations。 メインウィザードクラスは、レポートを取得するために使用されます。 createメソッドを使用すると、データベースクエリが作成されてデータベースに書き込まれ、executeメソッドがクエリを実行して結果がデータベースに書き込まれ、deleteメソッドがクエリとその実行結果をデータベースから削除します。

メソッド名パラメータ説明
wizard.stock.products_by_locations.create[user_id、cookie、[]、{}]在庫のある製品に関するレポートのクエリを作成します。 メソッドはレポートのIDを返します。
wizard.stock.products_by_locations.execute[user_id、cookie、wizard_id、{"start":{"forecast_date":{"month":number_of_month、 "__class__": "date"、 "day":number_of_day、 "year":number_of_year}}、 "open" 、{"Active_id":warehouse_id、 "active_model": "stock.location"、 "active_ids":[warehouse_ids]}]要求を満たします。 残高と倉庫IDの計算が行われる日付を指定する必要があります。
wizard.stock.products_by_locations.delete[user_id、cookie、wizard_id、{}]IDでレポートを削除します。

Source: https://habr.com/ru/post/J224907/


All Articles