このプロジェクトは株式会社Fusicのエンジニアの方々から頂いた提案です。要するにある案件が来たとき、エンジニアの空き状況がわからない営業者はその案件の受け入れに付いて判断できないようです。そのために我々はこのプロジェクトを開発しました。主な機能は次の2つです:
1.ガントチャート: 現在、様々な案件に取り組んでいるチームすべての情報の可視化する機能です。
2. 検索機能: 案件、エンジニア、と技術につて様々な条件のもとで検索ができ、会社全体がより深く理解できます。

-
index: この関数は、'search.index'というビューファイルを返します。その中には'overtime'作業を行ったすべての従業員が含まれた変数 'projects' があります。 'overtime' メソッドは、Employeeモデルで呼び出され、'overtime' 作業を行った従業員のみを取得します。
-
create: この関数は、'search.input'というビューファイルを返します。これは従業員を名前や他の基準に基づいて検索するための入力フォームを表示します。
-
init: この関数は、'search.see'というビューファイルを返しますが、与えられたコードスニペットからはその目的が明確ではありません。
-
employeeSearch: この関数は、キーワード、カテゴリ、順序などのさまざまな検索パラメータに基づいて従業員を検索し、 'search.employeeIndex' ビューテンプレートを使用してページネーションされた検索結果を返します。
-
projectSearch: この関数は、キーワード、カテゴリ、ステータス、順序などのさまざまな検索パラメータに基づいてプロジェクトを検索し、 'search.projectIndex' ビューテンプレートを使用してページネーションされた検索結果を返します。
-
technologySearch: この関数は、キーワード、カテゴリなどのさまざまな検索パラメータに基づいて技術を検索し、 'search.technologyIndex' ビューテンプレートを使用してページネーションされた検索結果を返します。
- getProjectDataforGantt:
- 開始日で昇順にソートされたすべてのプロジェクトを取得します。
- $tasksおよび$linksという2つの配列を初期化します。これらの配列は、ガントチャートをレンダリングするために必要な情報を保持します。
- 各プロジェクトをループし、以下の手順を実行します:
- プロジェクトの期間(日単位)を計算します。
- プロジェクトの進捗を決定します。現在の日付がプロジェクトの開始日よりも前の場合、進捗をゼロに設定します。それ以外の場合は、開始日からの経過時間と総期間の比率を計算します。
- $tasks配列に、プロジェクトに関する情報を含む新しいエントリを作成します。これには、ID、テキストラベル(つまり、プロジェクト名)、開始日、終了日、タイプ("project"に設定)、およびオープン状態(trueに設定)が含まれます。
- プロジェクトに割り当てられたすべての従業員を取得します。
- 各従業員に対して、以下の手順を実行します:
- 従業員のタスクの開始日と期間を計算します。
- 従業員のタスクの進捗を決定します。プロジェクトがまだ始まっていない場合、進捗をゼロに設定します。それ以外の場合、プロジェクトが終了している場合は進捗を1に設定します。それ以外の場合は、プロジェクトの開始日からの経過時間と総期間の比率を計算します。
- $tasks配列に、従業員のタスクに関する情報を含む新しいエントリを作成します。これには、ID、テキストラベル(つまり、従業員の名前)、開始日、期間、および親ID(プロジェクトのID)が含まれます。
- $links配列に、従業員のタスクをその親プロジェクトに接続するリンクレコードを追加します。
- 従業員のタスクの開始日と期間を計算します。
- プロジェクトの期間(日単位)を計算します。
- $tasksおよび$linksの配列を含むJSONレスポンスを返します。
- *index: *このメソッドはユーザーをプロジェクトの検索ページにリダイレクトします。
- **show:**このメソッドは、関連する技術や従業員を含む単一のプロジェクトを取得し、それをビューにレンダリングします。
- index: この関数はユーザーを
search.employeeにリディレクとしています。 - **show:**この関数は、特定の従業員に関する詳細情報を取得し表示します。関連する技術、開始日でソートされたプロジェクト、すべてのプロジェクトでの総労働時間を含み、これらを 'employee.show' ビューにレンダリングします。
1.index: この関数はユーザーをsearch.technologyにリディレクとしています。
2. show: この関数は、特定の技術に関する情報を取得し、関連する従業員やプロジェクトを含めて 'technology.show' ビューにレンダリングします。
| カラムの名前 | 意味 | 種類 |
|---|---|---|
| id | 識別子 | Integer |
| name | 名前 | String |
| age | 年齢 | Integer |
| sex | 性別 | String |
| start_of_employment | 就業開始日 | Date |
| profile_url | プロフィールURL | String |
| still_working | 今も働いている | Boolean |
| timestamps | タイムスタンプ | datetime |
- Technology・テクノロギ: 多対多
- Position・役職:多対多関
- Project・プロジェクト:多対多
| カラムの名前 | 意味 | 種類 |
|---|---|---|
| id | 識別子 | Integer |
| project_name | プロジェクト名 | String |
| customer_name | 顧客名 | String |
| details | 詳細 | Long Text |
| start_date | 開始日 | Date |
| end_date | 終了日 | Date |
| hours_required_per_month | 月間必要時間 | Integer |
| cost | コスト | Integer |
| timestamps | タイムスタンプ | datetime |
- Employee・社員:多対多
- Technology・テクノロギ:多対多
| カラムの名前 | 意味 | 種類 |
|---|---|---|
| id | 識別子 | Integer |
| technology_name | 技術名 | String |
| technology_field | 技術分野 | String |
| timestamps | タイムスタンプ | datetime |
- Employee・社員:多対多
- Project・プロジェクト:多対多
| カラム名 | 意味 | 種類 |
|---|---|---|
| id | 識別子 | Integer |
| employee_id | 従業員の外部キー | Integer (外部キー制約) |
| technology_id | 技術の外部キー | Integer (外部キー制約) |
| timestamps | タイムスタンプ | datetime |
| カラム名 | 意味 | Type |
|---|---|---|
| id | 識別子 | Integer |
| project_id | プロジェクトの外部キー | Integer (外部キー制約) |
| technology_id | テクノロジーの外部キー | Integer (外部キー制約) |
| timestamps | タイムスタンプ | datetime |
| カラム名 | 意味 | Type |
|---|---|---|
| id | 識別子 | Integer |
| project_id | プロジェクトの外部キー | Integer (外部キー制約) |
| employee_id | 従業員の外部キー | Integer (外部キー制約) |
| project_employee_hours | プロジェクトにかかる従業員の時間数 | Integer (外部キー制約) |
| timestamps | タイムスタンプ | datetime |
| カラム名 | Faker で生成されるデータの説明 |
|---|---|
| name | フェイカーによって生成される偽名 |
| age | フェイカーによって生成される18歳から50歳までの年齢 |
| sex | フェイカーによってランダムに選択される「男性」または「女性」 |
| start_of_employment | フェイカーによって過去8年から現在までの間で生成される雇用開始日 |
| profile_url | https://fusic.co.jp/members/ にランダムな番号が付与されるプロフィールURL |
| still_working | フェイカーによって生成される真偽値(働いているかどうか) |
| カラム名 | Faker で生成されるデータの説明 |
|---|---|
| project_name | 3 ~ 6 語のランダムなプロジェクト名 |
| customer_name | ランダムに生成される企業名 |
| details | 最大 700 文字のランダムなテキスト |
| start_date | 直近 6 ヶ月から次の 1 年までの間のランダムな開始日時 |
| end_date | 開始日時から次の 2 年以内のランダムな終了日時 |
| hours_required_per_month | 1 ヶ月あたりの必要な労働時間(60 ~ 100 時間のランダムな数値) |
| cost | プロジェクトのコスト(1,000,000 ~ 10,000,000 円のランダムな数値) |
| カラム名 | Faker で生成されるデータの説明 |
|---|---|
| technology_name | ランダムに選択された技術名 |
| technology_field | 技術が属する領域('frontend'、'server-side'、'backend' のいずれか) |
- User モデルに対して、ランダムなユーザー情報を生成し、10人分のデータをデータベースに保存します。
- User モデルに対して、特定の情報を持つテストユーザーを1人生成し、データベースに保存します。
- Technology モデルの生成: Technology モデルに対して、TechnologyFactory で定義された技術名とそのフィールドのリストを使用して、それぞれの技術情報を生成し、データベースに保存します。これにより、様々な技術情報がデータベースに挿入されます。
- Employee モデルの生成とアタッチ: Employee モデルに対して、ランダムに生成された従業員情報を100人分生成し、それぞれの従業員に対してランダムに技術をアタッチします。これにより、従業員の技術スキルがデータベースに関連付けられます。
- Project モデルの生成とアタッチ: Project モデルに対して、ランダムに生成されたプロジェクト情報を20個分生成し、それぞれのプロジェクトに対してランダムに技術と従業員をアタッチします。これにより、プロジェクトが使用する技術や関連する従業員がデータベースに登録されます。