久々に個人使用のプログラムかいたよー

いろいろあって,日常の個人タスクと工数の管理したくなったのでフルスクラッチで書いてみた.

開発環境 emacs + MacOSX snowleopard
開発言語 php5
webサーバ apache 2.0
データベース mysql 5.0
プログラム規模  6本 1013step = 1ks
開発規模 1人で3時間程度(0.02人月?)

備考
・入力チェックとか細かい事はしてない.
・初期要求仕様は網羅
・骨組みのみ構築


以下画面サンプル


図1.タスク登録画面



図2.タスクリスト
操作の終了リンクを押すと終了.
なんでボタンじゃないかって?
別に個人で使うんだからいいんじゃね?



図3.タスク情報更新画面
ここで工数の入力とかメモの入力をする.



図4.終了タスクリスト
終了済みタスクの「復活」及び「コピー」は今後追加する予定.
取りあえずは必要ないので省略.



図5.日付工数管理
タスク単位じゃなくて日付単位で串を通して作業時間を集計する.



これを作るのに,新しく知ったor思い出した事

1.Oracleのnvlはmysqlではifnull

select tk_name,ifnull(sum(tk_man_hour),'0') from task t left outer join man_hour mh on mh.tk_id = t.tk_id group by (t.tk_name);

タスク単位でグループかして,工数を合算した結果がnullなら0を表示する.

2.phpでの時間の差分が結構ややこしい

   /* 時間の比較 */
   $d1 = new DateTime($ct);
   $d2 = new DateTime($lists['tk_end']);
   $oDTDiff = $d1->diff($d2); 
   $dif = $oDTDiff->days;
   if ($d2 < $d1) {
     $dif = $dif * -1;
   }
   if ($dif == 7) {
     $bg_color = "#CCFFCC";
   } else if ($dif >=  4 && $dif < 7) {
     $bg_color = "#FFFDEE";
   } else if ($dif >= 0 && $dif < 4) {
     $bg_color = "#FFCCCC";
   } else if ($dif < 0) {
     $bg_color = "#FF3333";
     $color="#0000FF";
   } else {
     $bg_color = "#FFFFFF";
     $color="#0000FF";
   }

もっとスマートな方法を知ってる人がいたらご教授願いたい.
特に

   if ($d2 < $d1) {
     $dif = $dif * -1;
   }

が最低.

phpのマニュアルみたら
diffの引数の二番目に絶対値で返すかどうかのbooleanがいて.
デフォルトはfalseになってるって書いてあるんだけどなぁ〜



3.oracleでto_char(current_timestamp,'YYYYMMDD')はmysqlではdate_format(current_timestamp,'%Y%m%d')

これは結構はまった,date_format(current_timestamp,'YYYYMMDD')ってしてると,YYYYMMDDが値としてかえってくる.
それでgroup byしてたので,全く気づかなかった.



まぁ,久々に趣味でプログラム書くと楽しいね.
来月末にはもうチョッチ機能を追加してソースコードを公開する方向で.早速タスクを登録しました.



thanks for good infomation
プログラミング: 明日できることは今日やらない
MySQLとPostgreSQLの日付フォーマットの違い - Webプログラマー+WebデザイナーなZARU日記
http://www.futomi.com/lecture/macosx/php.html
http://php.benscom.com/manual/ja/datetime.diff.php
MacOSXでサーバー稼業 : Mac OS XにMySQLをインストールしよう