0
値保持について
現在、勤怠管理システムというものを以下の環境で作っています。
OS:WindowsXP Professional
通信環境:Apache Tomcat6.0.14
DB環境:MySQL Server 5.1
開発環境:Eclipse 3.4.2
記述言語:Java,JavaScript
各月ごとに勤務時間や、有給休暇などを入力して
その値や、差分を基に、実働時間やその他必要な時間や日数などを計算して出力後に、DBに登録するといった
システムなのですが、(登録後の修正も可)
1年分のデータ(2010/4 〜 2010/3)を登録したところ、
有給休暇の値が保持されていませんでした。。
ただ、前月分のみの値は保持されています。
例:2010/4月の勤怠データの有給取得日数→1日
有給残日数→9日(初期値が10日のため)
2010/5月の勤怠データの有給取得日数→0日
有給残日数→9日
このように1ヶ月ごとなら、ロジックがあるので前月分の値が保持されているのですが、
上記の例を参照して、6月の勤怠データで、有給取得を0日にすると、
有休残日数が初期値の10日に戻ってしまいます。。
(本来は9日であってほしいのです。)
全ての月のパターンで同じことになります。
全ての月の変数、Beanのgetter,setterを用意して、
セッションで保持すればよいのでしょうか?
どのような処理をしていけばよいか、まだ思いつきませんので、皆様の知恵をお借りできないでしょうか?
よろしくお願いします。
質問慣れしていないので質問の仕方・ソースの貼り付け等、おかしいところがありましたら、申し訳ございません。
以下がソースです。↓↓
※休暇に関する箇所のみ抜粋(Beanは省略)
// 該当月が「1月」である場合
if(Month.equals("1")) {
// 年度を数値型に変換
int Year_int = Integer.parseInt(Year);
/*
休暇日数テーブルより、有給付与日数、F休付与日数、
代休付与日数と、前月までの有給取得日数、F休取得日数、
代休取得日数、誕休取得日数を取得
*/
try {
// 引数:社員コード、該当年-1、前年度の12月
List<KintaiDBInputBean> DbList = Db.Kyuka(Syainid, Year_int-1, 12);
// Listの中身を取得
for(KintaiDBInputBean Kdb : DbList) {
// 取得した各休暇付与日数と各休暇取得日数(前月)を変数に格納
有給付与 Yukyu_D = Kdb.getYuukyu_d();
F休(フレックス休暇)付与
Fkyu_D = Kdb.getFkyu_d();
代休付与
Daikyu_D = Kdb.getDaikyu_d()
順に前月の有給、F休、代休、誕休(誕生日休暇)を取得
Yukyu_zen_R = Kdb.getYoukyu_r();
Fyu_zen_R = Kdb.getFkyu_r();
Daikyu_Zen_R = Kdb.getDaikyu_r();
Tankyu_Zen_R = Kdb.getTankyu_r();
}
}catch (SQLException e) {
e.printStackTrace();
}
// 該当月が「4月」である場合
}else if(Month.equals("4")) {
// 年度を数値型に変換
int Year_int = Integer.parseInt(Year);
/*
休暇日数テーブルより、有給付与日数、F休付与日数、
代休付与日数と、当月の有給取得日数、F休取得日数、
代休取得日数、誕休取得日数を取得
*/
try {
// 引数:社員コード、該当年、4月
List<KintaiDBInputBean> DbList = Db.Kyuka(Syainid, Year_int, 4);
// Listの中身を取得
for(KintaiDBInputBean Kdb : DbList) {
// 取得した各休暇付与日数と各休暇取得日数(前月)を変数に格納
Yukyu_D = Kdb.getYuukyu_d();
Fkyu_D = Kdb.getFkyu_d();
Daikyu_D = Kdb.getDaikyu_d();
Yukyu_zen_R = Kdb.getYoukyu_r();
Fyu_zen_R = Kdb.getFkyu_r();
Daikyu_Zen_R = Kdb.getDaikyu_r();
Tankyu_Zen_R = Kdb.getTankyu_r();
}
} catch (SQLException e) {
e.printStackTrace();
}
// それ以外の月の場合
}else {
// 年度、月を数値型に変換
int Year_int = Integer.parseInt(Year);
int Month_int = Integer.parseInt(Month);
/*
休暇日数テーブルより、有給付与日数、F休付与日数、
代休付与日数と、当月の有給取得日数、F休取得日数、
代休取得日数、誕休取得日数を取得
*/
try {
// 引数:社員コード、該当年、該当月-1
List<KintaiDBInputBean> DbList = Db.Kyuka(Syainid, Year_int, Month_int-1);
// Listの中身を取得
for(KintaiDBInputBean Kdb : DbList) {
// 取得した各休暇付与日数と各休暇取得日数(前月)を変数に格納
Yukyu_D = Kdb.getYuukyu_d();
Fkyu_D = Kdb.getFkyu_d();
Daikyu_D = Kdb.getDaikyu_d();
Yukyu_zen_R = Kdb.getYoukyu_r();
Fyu_zen_R = Kdb.getFkyu_r();
Daikyu_Zen_R = Kdb.getDaikyu_r();
Tankyu_Zen_R = Kdb.getTankyu_r();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 有休残日数算出のメソッド(別クラス)
(引数は有給付与日数、有給取得日数(前月)、有給取得日数(今月))
public double Yukyuzan(double Yukyu_D, double Yukyu_zen_R, double Yukyu_R) {
// 有給残日数算出
// 有給付与日数 - (有給取得日数(前月) + 有給取得日数(該当月))
double Yukyuzan_D = Yukyu_D - (Yukyu_zen_R + Yukyu_R);
// 戻り値をreturn
return Yukyuzan_D;
}
// ●有休残日数(上のメソッドの戻り値を受け取る)
// 勤務時間算出 (有休残日数)
// 引数:有給付与日数、有給取得日数(前月)、有給取得日数(該当月)
Yukyuzan_D = Kc.Yukyuzan(Yukyu_D,Yukyu_zen_R,Yukyu_R);
// 戻り値を(KintaiInputBean)に格納
Kib.setYoukyuzan_d(Yukyuzan_D);