タイムカードのシステムみたいのを、試行錯誤しながら行っております。
基本的に名前の選択して打刻の種類とかのInsertや、その後のUpdate、Delete、データを検索とかする用のSelectなどは動作できるようになっています。
ただし、現在のやり方は例えば、「出勤」というと、基本的にその日の内に一度しか打刻することはないものですが、そういうエラーチェックのようなのを飛ばしてただ、動作させるような感じにしています。
一応動作する形はできたので、そういう1日に一度しかないものは重複させないなどのチェックを入れていこうと思ったのですが、、、一点だけ、うちの中で特殊な例がある部分をどうするかで悩んでいます。
###とりあえず自分で考えたこと
タイムカードで一般的に押されるとしたら
「出勤」
「退勤」
「休入」
「休戻」
はあろうかと思います。
そして、基本的にはこれらは一日の内一度だけ押されるものであることの方が多いかと思います。
今やってるうちのやり方は、名前の選択と打刻する種別も選択して送信します。
送信ボタン自体で振分とかではありません。
これは、一回に複数人分を入れたりしたいということもあるのとその複数人が全て出勤ではない場合などがある為です。
チェック方法としては、
○○さん出勤で送信があったら、DBで○○さん日時出勤でSELECTして、データが無ければInsert、データが有れば何もしないって感じで行けばとりあえずはできるのかな、、と思います。
これは他の退勤とかでも同じ考え方ができるかと思っています。
###特殊な例
上記の部分においても、実は考えることはまだあるかもしれませんが、、、
とりあえず本題はここの部分です。
今、うちでやっている中で「待機」という項目があります。あくまでも「休憩」ではない項目です。
外に出る仕事がメインの為、お客様の都合などで時間が空いたとか、そもそもそこの時間は仕事が無かったなどの時に発生するものです。
「待入」「待戻」というように項目は作成しています。
この「待機」は一日の内に複数回あると思われるので、特に上記のような制限は設けないのですが、、、
一つだけ条件があります。
1.「待入」14:00「待戻」14:29だった場合
「待機」0:29と計算できますが、この場合は0となります。
2.「待入」14:00「待戻」14:30だった場合
「待機」0:30と計算できますが、この場合は0:30となります。
ようは、30分以上から計算するけれど、30分未満は計算しないということです。
###最終的にやりたいこと
現在、一か月分の実働を計算するという方法を考えていて、、、
前回別の質問で、「項目ごとに集計する」方法をまずは見つけました。
「出勤」=○○時間(実際は秒で計算させます)
「退勤」=○○時間
「休入」=○○時間
「休戻」=○○時間
これなら、【退勤 - 出勤 - (休戻 - 休入) = 結果】という式ができるので、特に問題ありません。
待機も一日に一回であれば、
【退勤 - 出勤 - (休戻 - 休入) - (待戻 - 待入) = 結果】という式だけでなんとかなるかもしれませんが、特殊な例として、(待戻 - 待入)=30分以上か未満かによって、結果が変わること、そして、待機は1日に複数回あるかもしれないことがあるので、一概に上記のように項目ごとに出してしまってはダメになります。
###最後に
上記の一回だけ判定を利用して、「待戻」を入れるときは__直近の「待入」を抽出__して、一度それで計算させて、30分未満ならその待入を削除して待戻はInsertしない。30分ならそのまま待戻をInsertするというやり方はどうかな?と考えました。
基本的にタイムカードなので、常に順番に打刻はされていっているものという前提になるかもしれませんが、、、
もしくは、そもそも打刻をするUser側が時間を見て判断すれば良い話にはなるんですが、、、
30分あると思って入れたら計算したら無かったっていうことはあると思うんです。
なにか、「待機」の部分の判定の仕方として妥当な方法というか、どのような手法をとったら良いかと考えております。
コードなどの話ではないので、大変申し訳ありませんが、、、アドバイスいただければと思います。
###今回の解決策
そもそも情報が不足しており大変申し訳ございませんでした。
テーブル構成としては
id, user, dakoku, timedateとし、闇雲に打刻を打った分だけ入れていくというようなやり方をとってしまっていました。
今回は早速教えていただきました内容として、、、基本的には同様の回答でしたので、テーブル構成から見直していきたいと思っています。
[勤怠]
id, user, 出勤, 退勤, 休入, 休戻
[待機]
id, 待入, 待戻, 計算, 適用
[職員]
id, user
日本語が適切かどうかは置いてくださいw
とりあえずこのような構成にすると、確かに他の悩みも違った解決ができそうですので、やってみたいと思います。
回答いただきましてありがとうございました!
BAをいつも複数答えてくださるとどなたも参考になるので、困るんですが、最初の方にさせていただきます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/14 00:57