package com.csc.library.dwr; import java.util.Enumeration; import java.util.Hashtable; import com.csc.library.session.DbInquiry; import com.csc.library.utilities.CscCalendar; import com.csc.library.utilities.CscTime; public class TA_DWR_Services extends DWR_base { public String chkOTOver(String employeeid , String dataOT) { this.setUProfile(); Hashtable<String,Float> otRequestData = this.extractData(dataOT); Enumeration e = otRequestData.keys(); //fix �������բ����ŷ�� table mconfig String otMsg = ""; float maxOTPerWeek = 36; try{ //get data from table mconfig DbInquiry otMaxRec = this.getInquiry("mconfig", "config_value", "configid = 'TA1013' ", "", this.up); if(otMaxRec.next()){ maxOTPerWeek =otMaxRec.getCurrentDbRecord().getFloat("config_value") ; }//end if String whereClause =""; while( e. hasMoreElements() ){ String dataKey = String.valueOf(e.nextElement()) ; //OT �����ͧ�� CscTime hour = new CscTime(); hour.add(otRequestData.get(dataKey)); String[] keys = dataKey.split(":"); CscCalendar stDate = new CscCalendar (keys[0]) ; CscCalendar endDate = new CscCalendar (keys[1]); whereClause = "doctype in('O','B','OM')" +" and employeeid ='" + employeeid+ "'" +" and dateid >= '" + stDate.getYYYYMMDD() +"'" +" and dateid <= '" + endDate.getYYYYMMDD() +"'" ; DbInquiry otRec = this.getInquiry("tleave_summary", "m_lv", whereClause, "", this.up); otRec.refresh(); while(otRec.next()){ //OT ����¶١��������� �ѻ������� hour.add(otRec.getCurrentDbRecord().getFloat("m_lv")) ; }//end while if(hour.getFloat()>=maxOTPerWeek ){ //�������ö�� OT ��ѻ���� ���� ���ա System.out.print("Sorry ! u can't request OT in this week..."); if(otMsg.equals("")){ otMsg = stDate.getDDMMYYYY()+":" +endDate.getDDMMYYYY(); }else{ otMsg +="#"+ stDate.getDDMMYYYY()+":" +endDate.getDDMMYYYY(); }//end if }else{ //����ö�� OT ��ѻ���� ���� �� System.out.print("OK ! u can request OT in this week..."); }//end if }//end while }catch (Exception ex){ System.out.print("Error in TA_DWR_Services " + ex.getStackTrace()); }//end try return otMsg; }//end chkOTOver private Hashtable<String,Float> extractData(String dataOT){ //ત����ѹ��� ����кء����ͧ�� OT � row ���� �ѹ�Һ������ѻ�������� ? //������ �¡�͡�� ���� modify dataOT ���� dataOT = modifyDataOT(dataOT); String[] dataPerDay = dataOT.split("#"); //���ѹ�� �ѹ����������-����ش��ѻ������ �Ѻ �ӹǹ ��. OT ��� �����ҵ����ǧ������¡������� Hashtable<String,Float> hstOT = new Hashtable<String,Float>(); try{ for (int ii =0;ii<dataPerDay.length;ii++){ String[] data = dataPerDay[ii].split(":"); CscCalendar stDateTime = new CscCalendar(data[0]); CscCalendar endDateTime = new CscCalendar(data[1]); int daySpan = endDateTime.subForDay(stDateTime); CscCalendar tmpStDate = new CscCalendar(stDateTime.getYYYYMMDD()); CscCalendar tmpEndDate = new CscCalendar(stDateTime.getYYYYMMDD()); CscTime otHourPerWeek = new CscTime(); for (int dayIndex =0;dayIndex<=daySpan;dayIndex++){ if(dayIndex ==0){ tmpStDate.incDate(0); tmpStDate.setCSCTime(Double.valueOf(data[2])); }else{ tmpStDate.incDate(1); tmpStDate.setCSCTime(Double.valueOf(data[2])); }//end if if (Double.valueOf(data[3])< Double.valueOf(data[2])){ tmpEndDate = new CscCalendar(tmpStDate.getYYYYMMDD()); tmpEndDate.incDate(1); tmpEndDate.setCSCTime(Double.valueOf(data[3])); }else{ if(dayIndex ==0){ tmpEndDate.incDate(0); tmpEndDate.setCSCTime(Double.valueOf(data[3])); }else{ tmpEndDate.incDate(1); tmpEndDate.setCSCTime(Double.valueOf(data[3])); }//end if }//end if //otTotal otHourPerWeek.add(tmpEndDate.subForHour(tmpStDate)); }//end for dayIndex //key= �纪�ǧ�ѹ�����������ѻ����-����ش�ѻ���� value = �ӹǹ ��.OT ��� //set data to Hashtable CscCalendar stOTRqt = new CscCalendar(data[0]); int dayOfWeek = stOTRqt.getCSCDOW(); CscCalendar stDayInWeek = new CscCalendar(stOTRqt.getYYYYMMDD()).decDate(dayOfWeek-1); CscCalendar stWeekDate = new CscCalendar (stDayInWeek.getYYYYMMDD()); CscCalendar endWeekDate = new CscCalendar (stDayInWeek.incDate(6).getYYYYMMDD()); if (hstOT.size()==0){ hstOT.put(stWeekDate.getYYYYMMDD()+":"+endWeekDate.getYYYYMMDD() ,otHourPerWeek.getFloat()); }else{ //����� key �繤��������ʴ����������ѻ�������ǡѹ �� ������� key ���ǡѹ��� if(hstOT.containsKey(stWeekDate.getYYYYMMDD()+":"+endWeekDate.getYYYYMMDD())){ float oldValue = hstOT.get(stWeekDate.getYYYYMMDD()+":"+endWeekDate.getYYYYMMDD()); hstOT.put(stWeekDate.getYYYYMMDD()+":"+endWeekDate.getYYYYMMDD() ,otHourPerWeek.getFloat() + oldValue); }else{ hstOT.put(stWeekDate.getYYYYMMDD()+":"+endWeekDate.getYYYYMMDD() ,otHourPerWeek.getFloat()); }//end if }//end if }//end for ii }catch(Exception ex){ System.out.print("Error in extractData "+ ex.getStackTrace()); }//end try return hstOT; }//end extractData private String modifyDataOT(String dataOT){ String newDataOT =""; String[] dataPerDay = dataOT.split("#"); for (int ii =0;ii<dataPerDay.length;ii++){ String[] data = dataPerDay[ii].split(":"); CscCalendar stDateTime = new CscCalendar(data[0]); CscCalendar endDateTime = new CscCalendar(data[1]); CscCalendar curDate = new CscCalendar(stDateTime.getYYYYMMDD()); int dayOfWeek = curDate.getCSCDOW(); CscCalendar stDayInWeek = new CscCalendar(curDate.getYYYYMMDD()).decDate(dayOfWeek-1); CscCalendar stDate = new CscCalendar (stDayInWeek.getYYYYMMDD()); CscCalendar endDate = new CscCalendar (stDayInWeek.incDate(6).getYYYYMMDD()); //��� �ѹ��� ������� ,�ѹ�������ش ����㹪�ǧ �ѻ�������ǡѹ �稺 ����������¡ if(stDateTime.subForDay(stDate) >= 0 && stDateTime.subForDay(endDate) <= 0 && endDateTime.subForDay(stDate) >= 0 && endDateTime.subForDay(endDate) <= 0){ if(newDataOT.equals("")){ newDataOT =stDateTime.getDDMMYYYY() +":"+ endDateTime.getDDMMYYYY() +":"+data[2]+":"+data[3]; }else{ newDataOT +="#"+stDateTime.getDDMMYYYY() +":"+endDateTime.getDDMMYYYY() +":"+data[2]+":"+data[3]; }//end if }else{ //�¡ if(newDataOT.equals("")){ newDataOT =stDateTime.getDDMMYYYY() +":"+endDate.getDDMMYYYY() +":"+data[2]+":"+data[3]; }else{ newDataOT +="#"+ stDateTime.getDDMMYYYY() +":"+endDate.getDDMMYYYY() +":"+data[2]+":"+data[3]; }//end if boolean isContinue = true; while(isContinue){ //�ѧ�Թ ���� ? if(endDateTime.subForDay(endDate)>6){ newDataOT +="#"+ endDate.incDate(1).getDDMMYYYY() +":"+endDate.incDate(6).getDDMMYYYY() +":"+data[2]+":"+data[3]; }else if(endDateTime.subForDay(endDate)==0){ isContinue = false; }else{ isContinue = false; newDataOT +="#"+ endDate.incDate(1).getDDMMYYYY() +":"+endDateTime.getDDMMYYYY() +":"+data[2]+":"+data[3]; }//end if }//end while }//end if }//end for //=========Debug==================== String[] dataDebug = newDataOT.split("#"); System.out.print("=====newDataOT after modify is============\n"); for (int ii = 0;ii<dataDebug.length ;ii++){ System.out.print(dataDebug[ii]+"\n"); }//end for System.out.print("=================================="); //================================= return newDataOT; }//end modifyDataOT }//end class