/** * WPML compatibility functions * * @global array $duplicated_posts Array to store the posts being duplicated. * * @package Yoast\WP\Duplicate_Post * @since 3.2 */ add_action( 'admin_init', 'duplicate_post_wpml_init' ); /** * Add handlers for WPML compatibility. */ function duplicate_post_wpml_init() { if ( defined( 'ICL_SITEPRESS_VERSION' ) ) { add_action( 'dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10, 3 ); add_action( 'dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10, 3 ); add_action( 'shutdown', 'duplicate_wpml_string_packages', 11 ); } } global $duplicated_posts; // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: Renaming a global variable is a BC break. $duplicated_posts = []; /** * Copy post translations. * * @global SitePress $sitepress Instance of the Main WPML class. * @global array $duplicated_posts Array of duplicated posts. * * @param int $post_id ID of the copy. * @param WP_Post $post Original post object. * @param string $status Status of the new post. */ function duplicate_post_wpml_copy_translations( $post_id, $post, $status = '' ) { global $sitepress; global $duplicated_posts; remove_action( 'dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10 ); remove_action( 'dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10 ); $current_language = $sitepress->get_current_language(); $trid = $sitepress->get_element_trid( $post->ID ); if ( ! empty( $trid ) ) { $translations = $sitepress->get_element_translations( $trid ); $new_trid = $sitepress->get_element_trid( $post_id ); foreach ( $translations as $code => $details ) { if ( $code !== $current_language ) { if ( $details->element_id ) { $translation = get_post( $details->element_id ); if ( ! $translation ) { continue; } $new_post_id = duplicate_post_create_duplicate( $translation, $status ); if ( ! is_wp_error( $new_post_id ) ) { $sitepress->set_element_language_details( $new_post_id, 'post_' . $translation->post_type, $new_trid, $code, $current_language ); } } } } // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: see above. $duplicated_posts[ $post->ID ] = $post_id; } } /** * Duplicate string packages. * * @global array() $duplicated_posts Array of duplicated posts. */ function duplicate_wpml_string_packages() { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: renaming the function would be a BC-break. global $duplicated_posts; foreach ( $duplicated_posts as $original_post_id => $duplicate_post_id ) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: using WPML native filter. $original_string_packages = apply_filters( 'wpml_st_get_post_string_packages', false, $original_post_id ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: using WPML native filter. $new_string_packages = apply_filters( 'wpml_st_get_post_string_packages', false, $duplicate_post_id ); if ( is_array( $original_string_packages ) ) { foreach ( $original_string_packages as $original_string_package ) { $translated_original_strings = $original_string_package->get_translated_strings( [] ); foreach ( $new_string_packages as $new_string_package ) { $cache = new WPML_WP_Cache( 'WPML_Package' ); $cache->flush_group_cache(); $new_strings = $new_string_package->get_package_strings(); foreach ( $new_strings as $new_string ) { if ( isset( $translated_original_strings[ $new_string->name ] ) ) { foreach ( $translated_original_strings[ $new_string->name ] as $language => $translated_string ) { do_action( // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: using WPML native filter. 'wpml_add_string_translation', $new_string->id, $language, $translated_string['value'], $translated_string['status'] ); } } } } } } } } Inventory module – receipt(入荷) 入力項目 – Raqqa

Inventory module – receipt(入荷) 入力項目

転送>入荷

✅ 新規入荷(Receipts)の入力項目一覧

カテゴリ入力項目説明
📦 基本情報操作タイプ(Operation Type)デフォルトで「Receipts(入荷)」
参照元(Source Document)任意。通常はPO番号が自動入力(手動なら空)
パートナー(Vendor)サプライヤーの選択
予定日(Scheduled Date)入荷予定日(デフォルトは作成日時)
ステータス準備中 / 完了 / キャンセルなど(自動更新)
会社(Company)所属会社(マルチカンパニーの場合)
責任者(Responsible)担当者(任意入力)
🚚 移動明細(Move Lines)製品(Product)商品名(在庫管理対象の商品)
数量(Initial Demand / Quantity Done)入荷予定数、実際に受け取った数量
出発地(From)通常は「Vendor Location(仮想サプライヤー)」
到着地(To)入荷先ロケーション(例: WH/Stock)
ドキュメント参照(Reference)外部ドキュメントや伝票番号(任意入力)
シリアル/ロット番号(Lot/Serial Number)シリアル管理対象の場合に入力必須
💡 補足情報タグ(Tags)任意の管理用タグ(必要に応じて)
備考(Notes)メモ欄(必要に応じて)

✅ 新規入荷の流れ(入力作業イメージ)

1️⃣ サプライヤーを選択(パートナー)
2️⃣ 到着ロケーションを確認(通常はWH/Stock)
3️⃣ 商品と数量を入力(Move Linesに行を追加)
4️⃣ 必要ならシリアル/ロット番号を入力
5️⃣ 保存してステータスを「準備完了(Ready)」に変更
6️⃣ 検証(Validate)ボタンで在庫反映


✅ 標準+必要に応じた拡張

必要なら追加する入力項目カスタマイズ要否
サプライヤー納品書番号伝票番号メモ欄またはカスタムフィールド
送料・手数料請求処理用費用分配カスタムが必要
到着予定時刻AM/PM指定などカスタムで追加可能

✅ Odoo新規入荷の入力補助機能(標準機能)

補助機能説明対象フィールド
🔍 ドロップダウン検索入力時にマスターから候補が表示される(型番/商品名など部分一致で検索)サプライヤー、商品、ロケーション
🔗 商品選択時の自動入力商品を選択すると、単位、在庫管理方法(シリアル/ロット)、ルールが自動で反映商品(Product)、単位(UoM)、在庫引当ルール
🏢 サプライヤー選択時の情報補完サプライヤー(パートナー)を選ぶと、関連情報(住所、税区分など)が自動で反映パートナー
📦 出発地/到着地のデフォルト設定操作タイプ(Receipts)に基づき、From(Vendor Location)、To(WH/Stock)が自動設定出発地(From)、到着地(To)
🔢 数量自動計算購買オーダー(PO)から作成した場合、POの数量が自動反映数量(Initial Demand)
🔗 関連ドキュメントの自動リンクPO → Receipt作成時に、参照元(Source Document)が自動入力参照元(Source Document)
📝 シリアル/ロット番号の自動補助商品がシリアル/ロット管理対象の場合、入力フィールドが表示され、補助的な連番生成も可能シリアル/ロット番号
🕑 予定日自動設定作成時の日時が自動で予定日に設定(必要に応じて手動修正)予定日(Scheduled Date)

✅ 購買オーダー連携時の入力補助

もし購買オーダー(PO)から入荷を生成する場合は、さらに入力補助が強力になります:

項目自動反映内容
商品POの明細行から自動入力
数量POの数量が初期表示
サプライヤーPOの仕入先が自動設定
参照元PO番号が自動でSource Documentに反映
価格価格は入荷画面では使われないが、商品選択時に補助として確認可能(購買オーダー画面で確認)

✅ まとめ

Odooの入荷画面は、マスター選択時のサジェスト機能+購買オーダーからの自動入力が基本です。
POS連携やバーコード機能を併用すれば、さらに入力補助を強化できます!


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です