質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

2回答

654閲覧

勤怠管理サービスの設計について

Yuinyan

総合スコア312

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/03/16 02:05

編集2018/03/16 12:17

前提・実現したいこと

勤怠管理サービスを開発しています。
具体的には、スマホで都度位置情報と業務内容と時刻を示したデータを一定間隔でRails側に送信し、集計するというようなものです。

1 位置情報 接客 14:00 2 位置情報 移動 14:15 3 位置情報 移動 14:30 4 位置情報 移動 14:40 5 位置情報 移動 14:50 6 位置情報 接客 15:00 7 位置情報 移動 16:00 8 位置情報 事務作業 16:45 9 位置情報 完了 17:30

このようなデータが取得できているのですが、ここから、業務内容ごとに集計をしてグラフとして出したいと考えております。

接客  合計:75分 移動  合計:90分 事務作業 合計:45分 総業務時間 3時間30分 (210分)

と、人間の目には普通に計算できるのですが、rails(ruby)で、はどのようにコードとしてかけますでしょうか。

私がイメージしている実装は、こんな感じなのかと思うのですが、何かもっと良い方法がありますか?それと、次の要素はどのように指定できるのでしょうか。

work_datas.each do |work_data| if work_data.type == "接客" 配列に入れておく?   次の要素.current_at - work_data.current_at else . . . end end

モデル

LocationLog 位置および業務内容のモデル # == Schema Information # # Table name: location_logs # # id :integer not null, primary key # user_id :integer not null # work_category_id :integer not null # item_id :integer # latitude :float not null # longitude :float not null # current_at :datetime # created_at :datetime not null # updated_at :datetime not null
# Table name: work_categories # # id :integer not null, primary key # name :string not null # created_at :datetime not null # updated_at :datetime not null # Seedで作成している # WorkCategory.create(id: 100, name:"その他") # WorkCategory.create(id: 1, name:"移動") # WorkCategory.create(id: 2, name:"休憩") # WorkCategory.create(id: 3, name:"接客") # WorkCategory.create(id: 4, name:"待機") # WorkCategory.create(id: 5, name:"完了")

以下は今回作ったモデルです。上記の情報を収集して格納したいと考えているものです。

集計結果を入れる予定のモデル(daily_reports) # Table name: daily_reports # # id :integer not null, primary key # item_count :string # total_distance :string # total_business_time :string # total_moving_time :string # total_breaking_time :string # total_working_time :string # total_waiting_time :string # total_other_time :string # created_at :datetime not null # updated_at :datetime not null

他にもモデルはたくさんありますが、関係するモデルを記しました。また、とりあえず作ったのでstringなど最終的にintegerにすべき部分もありそうですが取り急ぎ。

最終的には、sidekiq& wheneverを使って、翌日にBatch処理して、データを保存できたらと思っています。(そのためのWorkerはすでに出来ています。)

データベースは、postgresqlを利用しています。

補足情報(FW/ツールのバージョンなど)

rails5
jQuery

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

手作業で計算できる、というのなら、その手作業のプロセスをコードに落とせばいい、ということになります
まーはやいはなしが、業務の項目が変化した時点の時刻から、各業務の時間を積算していくということになります

んで、ここはあくまで質問に回答するところですので、プログラミングのヒントを出すことはできますが、具体的なコードを出すことはできません。
それはあなたが組むか、プログラマに依頼して作ってもらってください

投稿2018/03/16 14:04

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yuinyan

2018/03/16 14:14

念のためですが具体的なコードは求めていませんよ。より良いやり方がないか質問させてもらっただけでした。
y_waiwai

2018/03/16 14:15

ならよろしい。それではこちらの回答に感謝してください。
Yuinyan

2018/03/16 14:16

いやー、それは勘弁。こちらは、不愉快につき通報させてもらいますよ。
guest

0

データベースの存在が質問文には見えませんが、MySQL等のデータベースを使えば実現できるのではないでしょうか。

イメージとしてはこんな感じになるかと思います。

<データ保存部分>
アプリからRailsにデータを送信

Railsでは受信したデータをデータベースに保存

<データ表示部分>
RailsでSQL(RailsであればActiveRecord?)経由でデータベースからデータを取得し、画面生成。(グラフ等はjQueryを活用)

コードにフォーカスする前段階として、どのようなアーキテクチャにするのかという全体感をまずは考えたほうがいいのでは無いかと。(既にそのあたりも考えておられたのであれば、それも質問文に盛り込んでいただけるとベターです)

投稿2018/03/16 05:15

bassbone

総合スコア767

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yuinyan

2018/03/16 06:44

すみません。PostgreSQLを利用しています。データはモデルから引っ張ってこれるのですが、実際のコードが私のイメージ通りにいくのかが心配です。
Yuinyan

2018/03/16 06:55

1 位置情報 接客 14:00 2 位置情報 移動 14:15 3 位置情報 移動 14:30 4 位置情報 移動 14:40 5 位置情報 移動 14:50 6 位置情報 接客 15:00 7 位置情報 移動 16:00 8 位置情報 事務作業 16:45 9 位置情報 完了 17:30
Yuinyan

2018/03/16 06:56

このようなデータから 接客  合計:75分 移動  合計:90分 事務作業 合計:45分 総業務時間 3時間30分 (210分) このような結果を出すにはどのようなコードをかけばだせるか、、ということを知りたいと思っています。
bassbone

2018/03/16 06:58

了解です。データベースやモデル周りの情報をぜひ質問文に追記いただけると助かります。
Yuinyan

2018/03/16 12:17

追記しました。よろしくお願いいたします。
y_waiwai

2018/03/16 12:18

しかし、嫌な勤怠管理やなー。。
bassbone

2018/03/16 12:38

たしかに、、、
Yuinyan

2018/03/16 13:47

困っているから質問をしているのですが、、。言われた通りに情報を追記したのに、、、何なのでしょうか。。。
bassbone

2018/03/17 03:37

スマホで勤怠管理されてしまう点に引っかかりコメントしました。ただその是非はここでは関係無いようなので、失礼しました。 きちんと本題に回答すると、 1 位置情報 接客 14:00 2 位置情報 移動 14:15 3 位置情報 移動 14:30 4 位置情報 移動 14:40 5 位置情報 移動 14:50 6 位置情報 接客 15:00 7 位置情報 移動 16:00 8 位置情報 事務作業 16:45 9 位置情報 完了 17:30 から、 接客 0:15 移動 0:15 移動 0:10 移動 0:10 移動 0:10 接客 1:00 移動 0:45 事務作業 0:45 のかたちに変換できれば、後はカテゴリ毎に集計できると思います。 いただいたコードではカテゴリ全てに対してif文を書いていますが、カテゴリが完了かそうでないかのif文だけで書けるように思います。 取り急ぎ考え方を回答させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問