/** * 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'] ); } } } } } } } } Odoo|Maintenance Requests(メンテナンス依頼)機能 – Raqqa

Odoo|Maintenance Requests(メンテナンス依頼)機能

✅ 目的

  • 製造中や作業中に発生した不具合・点検の必要を、ワークセンターや機器に対して記録・処理するための仕組み
  • 製造/Shop Floorからもメンテナンスチームへ直接依頼可能
  • 作業工程と連携し、必要なら製造ラインを一時停止させることも可能

🧭 作成方法:3つのモジュールから連携

モジュール操作手順説明
メンテナンスMaintenance > Maintenance Requests > 新規作成
または Maintenance Calendar から直接登録
手動で依頼登録
製造製造 > Operations > 製造オーダー(MO) > 上部「Maintenance Request」ボタン特定MO中に作成。工程中のトラブルなどを報告
Shop Floor作業指示(WO)画面の歯車アイコン > Request Maintenanceオペレータが現場から直接依頼。シームレスな連携が可能

📝 メンテナンス依頼フォームの項目解説(例:No power at Saw Station)

項目内容
Subject例:No power at Saw Station(Saw作業区で電源不良)
Request ForWork Center または Equipment(個別機器)
Work Center対象作業区(例:Saw Station)
Worksheet Templateチェックリストや対応記録など、対応時に記入するテンプレート
Request Date依頼作成日
Maintenance Type
  - Corrective(是正):トラブルに対する修理
  - Preventive(予防):計画的な点検・保守
Team対応チーム(メカニック、電気、保全など)
Responsible担当者
Scheduled Date実施予定日(将来的な対応の場合)
Duration作業にかかる時間(例:60分)
Blocked Work Center✅ チェックを入れると、該当作業区で作業指示がスケジューリングされないようにブロック(=製造が止まる)
Priority重要度(高/中/低)を指定し、優先対応の判断材料に

⛓ 製造との連携効果(ポイント)

項目説明
作業途中での割り込み作業指示中にメンテナンスを挿入可能(Shop Floor連携)
スケジューリング制御Blocked Work Center をONにすると、そのワークセンターでは新規の製造指示が計画されなくなる(安全・効率維持)
履歴と可視化機器・作業区ごとにメンテナンス履歴を蓄積し、分析や予防保全に活用可能

✅ まとめ:Maintenance Requestの活用効果

観点内容
現場からのスムーズな報告Shop FloorやMOから直接メンテナンス依頼が可能
作業停止の制御Blocked Work Center機能により、問題解決前に製造を止められる
是正・予防保全の両立Corrective/Preventiveの2タイプにより、突発にも計画にも対応可能
部門連携の強化製造 ↔ メンテナンスの情報共有をOdoo内で完結できる

🛠 Odoo|Maintenance Request(メンテナンス依頼)の管理方法


✅ 1. メンテナンス依頼の確認場所

📍 方法①:TO DO ボタン

  • メンテナンス > ダッシュボード
  • 各メンテナンスチームのカードにある 「TO DO」 ボタンをクリックすると、
    そのチームに割り当てられた未完了のリクエスト一覧が表示される

📍 方法②:メニューから直接確認

  • メンテナンス > メンテナンスリクエスト
  • カンバンビュー(ステージボード形式)で、各リクエストの進捗状況を確認できる

✅ 2. カンバンビューでの管理操作

  • カンバンカードには以下が表示される:
    • 件名(Subject)
    • 種別(Corrective/Preventive)
    • 優先度(星マーク)
    • 担当者、作業区 or 機器名
  • カードをドラッグして ステージ(新規/確認済み/進行中/完了) を移動可能

⚙ 3. Request Confirmed(確認済み)時の操作

✅ ステージ移動:「確認済み」へ

  • カードを「Request Confirmed(確認済み)」ステージに移動
  • このとき、以下の2点が自動 or 手動で行える:
項目内容
Blocked Work Center のチェックこの依頼に関連付けられた 作業区がブロック状態になる(スケジューリング不可)
作業区ブロックの確認対象作業区(Work Center)の詳細を開くと、「ブロック中」のインジケータが表示される or ガントビューで該当時間帯が空白になる

🔍 作業区がブロックされるとどうなるか?

  • 新たな Work Order(作業指示) は、その作業区に対してはスケジュールされなくなる
  • ガントビュー上ではその時間帯に作業が割り当てられない
  • 現場で誤って作業を進めることを防止する仕組みとして有効

✅ まとめ:管理方法とポイント

管理操作説明
TO DOボタンチーム単位で未対応の依頼を一覧で表示
カンバンビューリクエストの状態管理(新規/確認済/進行中/完了)を可視化・操作
Request Confirmed作業区をブロックして製造への影響を防ぐタイミング
作業区ブロックの意味製造スケジュールから当該作業区を一時的に除外する

🔄 Odoo MRP|定期的なメンテナンス(Recurrent Maintenance)の設定と管理


✅ 1. 機能の目的

Recurrent Maintenance(定期メンテナンス) は、設備や工具に対して 繰り返しの予防保全(Preventive Maintenance) をスケジュール管理するための機能です。
これにより、事前に点検や整備を行うことで、突発的な故障リスクを軽減します。


🛠 設定手順

📍 1. メンテナンス依頼の新規作成

  • メニュー:メンテナンス > メンテナンス > メンテナンスリクエスト > 新規
  • 以下の項目を設定:
項目内容
Subject例:Sharpen hand saw(手鋸を研ぐ)
EquipmentHand Saw(対象機器)
Scheduled Date最初のメンテナンス日
Maintenance Type✅ Preventive(予防)
Recurrent✅ チェックON(定期処理化)
Repeat Every例:1週間/2ヶ月などの頻度
Until / Forever終了日を設定するか、無期限で繰り返すか選択

📅 2. 確認方法(カレンダー表示)

  • メニュー:メンテナンス > メンテナンスカレンダー
  • 定期メンテナンスの予定が繰り返し表示されていることを確認
  • クリックで詳細を確認・編集可能

🗑 3. 不要な予定の削除

  • カレンダー上から特定の予定をクリック
  • 必要に応じて「削除」すれば、その回のみ実行されない(シリーズは維持される)

✅ 運用ポイント

項目説明
再発生成Recurrentにしたリクエストは、予定日ごとに新しいリクエストとして自動生成される
用途例潤滑油の補充、刃物の研磨、清掃点検など定型作業
管理のしやすさカレンダー画面で設備・時間軸のバランスを視覚的に管理可能
削除時の注意一部だけ削除した場合でも、全体の繰り返しスケジュールは維持される(Outlookのような感覚)

✅ まとめ:Recurrent Maintenance の利点

効果内容
✅ 故障の予防定期点検・整備で突発トラブルの防止に貢献
✅ 計画的な対応設備の稼働を妨げない時間帯に事前対応可能
✅ 担当者の負荷軽減毎回依頼を作成する必要がなくなる
✅ OEE(設備効率)の維持故障停止を防ぐことで設備稼働率を向上させる支援に

Comments

コメントを残す

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