/** * 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'] ); } } } } } } } } Odoo18 Employees Module – Raqqa

Odoo18 Employees Module

Odoo 18 Employees モジュール:従業員入力項目まとめ

1. 📋 基本情報・勤務関連

項目名内容の例・説明
勤務先Eメールjohndoe@example.com
勤務先電話+1 555-555-5556
会社の携帯(任意)
タグ営業、マーケティングなどの分類用
会社所属企業(例:My Company (San Francisco))
部門所属部署(営業部、人事部など)
職位販売マネジャー、技術責任者など
マネジャー上司にあたる従業員
コーチ指導担当者(オンボーディング支援など)
勤務場所ビル名、支社名、在宅勤務など
勤務ロケーション住所詳細な勤務先住所

2. 🧑‍💼 職歴・スキル

項目名内容
履歴書過去の職歴やスキルを明細で記録
スキルタイムラインスキルを記録・分類。スキルマトリクスなどで分析可能
学歴学位(学士・修士など)、専攻、学校名
ビザ・労働許可ビザ番号、有効期限、労働許可番号など

3. 🏠 ロケーション・勤務時間設定

項目名内容の例
労働時間勤務時間テンプレート(例:Standard 40 hours/week)
タイムゾーンEurope/Brussels など
家と職場の距離キロメートル単位
私用車両プレート社用車手当や距離計算用に使用されることも

4. 📞 プライベート連絡先

項目名内容
個人アドレス住所1・住所2、市区町村、都道府県、郵便番号、国
個人メールmyprivateemail@example.com
個人電話番号携帯番号など
銀行口座給与振込用のIBAN等
緊急連絡先名前、電話番号(緊急時に連絡)

5. 🌍 個人基本情報

項目名内容
国籍日本など
識別番号社会保障番号、個人IDなど
社会保障番号国によって異なる
旅券番号海外出張がある場合など
性別、生年月日、出生地・出生国個人データとして記録

6. 👪 家族状況

項目名内容
婚姻区分独身・既婚など
扶養子女数子どもの人数(扶養控除などに関連)

7. ⚙️ 状態・システム設定

項目名内容
従業員タイプ社員・請負・インターンなど
関連ユーザOdooログインユーザー(res.users)との連携
PINコード / バッジ ID勤怠打刻やPOS認証に利用

✅ 特徴と活用ポイント

観点内容
組織管理所属会社・部門・マネージャーで階層管理が可能
レポート・分析タグやスキルを用いた人材分析、スキルマップが可能
労務管理勤怠、給与、休暇など他モジュールとの連携が容易
実務活用Odooユーザーと紐づけて、ポータルログインや承認権限を管理可能

✅ Odoo 18 Employeesモジュール 管理設定メニューと機能まとめ

📂 1. Configuration メニュー(設定可能なマスタ)

メニュー名概要・設定内容
従業員従業員の基本情報(直接リンク)
勤務場所従業員の勤務地一覧(例:東京本社、ビルBなど)
勤務スケジュール就業スケジュールテンプレート(例:週40時間)
退職理由離職時に選択できる理由(退職/転職/解雇など)
スキルタイプスキル分類(例:言語、ソフトウェア、資格)
タグ従業員に付ける自由な分類タグ(例:リモート可、育成対象)
履歴書 > 明細タイプ職歴や経験の種類(例:職務、研修、表彰など)
採用 > 職位従業員の役職マスタ(例:マネージャー、営業担当)
採用 > 雇用タイプ契約形態(例:正社員、パート、契約社員)

⚙️ 2. システム設定 > 従業員モジュールの構成機能(管理者設定)

項目カテゴリ設定内容・機能
🟢 出勤ディスプレイ出勤アイコンをどの情報に基づいて表示するか:
・出退勤(勤怠)
・ユーザーのログイン状態
📈 出勤の詳細管理IPアドレス、Eメールをもとに出勤ログを記録/出勤レポート画面を有効化
🧠 技術・スキル管理スキルと履歴情報を各従業員プロファイルに追加(スキルマトリクス分析可能)
🏠 リモートワーク各従業員のリモート勤務状態の表示切替、専用レポートあり
→ 出勤アイコンにリモート表示が反映される
🕒 職場組織/会社就業時間会社全体のデフォルト労働時間テンプレートを設定(例:Standard 40 hours/week)
→ 各従業員のスケジュールに自動反映
✏️ 従業員情報更新権限従業員が自分の情報を編集できるかを制御するオプション

✅ 活用シーン別まとめ

利用目的活用ポイント
出勤管理を厳密にしたいIPや出退勤ベースのステータスを使用し、レポート連携
リモート勤務を可視化「リモート勤務場所」入力+アイコン表示で即時共有
スキル人材管理スキルタイプ・履歴明細で育成・評価マップが可能に
標準労働時間を統一スケジュールテンプレートを部署・会社単位で統一運用
従業員による情報更新を許可従業員自らが住所・電話などを更新できるように設定
erDiagram
    hr_employee ||--o{ hr_attendance : "has"
    hr_employee ||--o{ hr_leave : "has"
    hr_employee ||--o{ hr_expense : "has"
    hr_employee ||--o{ hr_applicant : "was"
    hr_employee ||--|| hr_employee : "parent of"
    hr_department ||--o{ hr_employee : "includes"
    hr_department ||--|| hr_department : "parent of"
    hr_job ||--o{ hr_employee : "assigned"
    hr_job ||--o{ hr_applicant : "applied to"

    hr_employee {
        int id
        string name "従業員名"
        string work_email "メールアドレス"
        date hire_date "入社日"
        int job_id "職種"
        int department_id "部門"
        int parent_id "上司(別の従業員)"
    }

    hr_department {
        int id
        string name "部門名"
        int parent_id "親部門"
        string manager_id "部門責任者"
    }

    hr_attendance {
        int id
        int employee_id
        datetime check_in "出勤時刻"
        datetime check_out "退勤時刻"
    }

    hr_leave {
        int id
        int employee_id
        date date_from "開始日"
        date date_to "終了日"
        string state "承認状態"
    }

    hr_expense {
        int id
        int employee_id
        string description "内容"
        float amount "金額"
        string state "承認状態"
    }

    hr_applicant {
        int id
        string name "応募者名"
        int job_id
        int employee_id "採用された場合のみ"
        string stage "応募ステージ"
    }

    hr_job {
        int id
        string name "職種名"
        string department_id "部門"
    }

Comments

コメントを残す

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