对应函数:很难看清楚,还是加我MSN,只要注明csdn就可 (因为这个系统我要一直维护,不是一天二天的事,) 谢谢各位。 function reduce_leave_balance($leave_id,$hr_adjust_days=''){ $sql="select b.*,a.user_id from leave a left join leave_detail b on a.leave_id=b.leave_id where a.leave_id=".$leave_id." and b.type_id != 0"; if($leave_type==1 && $year<=2008){ // annual leave process // check if last year have annual leave $strSQL="select balance from leave_balance where user_id =".$user_id." and leave_type=".$leave_type." and year=".intval($year-1); if($balance==0) { // if last annual leave is 0 , only update current year annual leave $main = array($total,$total,$user_id,$year,$leave_type); $sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?"; $ret = $this->db->execute($sql,$main); }
if($leave_type==1 && $year<=2008){ // annual leave process // check if last year have annual leave $strSQL="select balance from leave_balance where user_id =".$user_id." and leave_type=".$leave_type." and year=".intval($year-1); $this->db->query($strSQL,0,-1); $balance=0; if ($balance = $this->db->nextRecord()){ $balance=$balance["balance"]; }
if($balance==0) { // if last annual leave is 0 , only update current year annual leave $main = array($total,$total,$user_id,$year,$leave_type); $sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?"; $ret = $this->db->execute($sql,$main); }elseif($balance >= $total) { // only reduce last year annual leave balance $main = array($total,$total,$user_id,intval($year-1),$leave_type); $sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?"; $ret = $this->db->execute($sql,$main); }else { // reduce last year annual leave balance and set it is 0, and reduce current year annual leave // reduce last year $last_year_leave=$balance; $main = array($last_year_leave,$last_year_leave,$user_id,intval($year-1),$leave_type); $sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?"; $ret = $this->db->execute($sql,$main);
// reduce current year $current_year_leave=$total-$balance; $main = array($current_year_leave,$current_year_leave,$user_id,$year,$leave_type); $sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?"; $ret = $this->db->execute($sql,$main); } }
ID, 请假人ID, 发起请假的时间, 申请假期开始时间, 申请假期结束时间, 请假理由, 此记录的状态, 批准人ID
也是有时间对应的,
BALANCE ID USERID BALANCE YEAR
01 001 6.0 2008
02 001 3.0 2009
意思就是:
“08年 一个USER来申请08年的假,09年AO来批,结果减去的假,是减在这个USER 对应表中09年里可用的假里,(本应减在08年里的),”
假是不会过期的,
因为AO的记录中会显示申请过的假的,(权限决定)
只是要批的假时间过去了,
那USER的假就当自由流失,
这个和我问的那问没关系的,
谢谢
谢谢你帮我看问题。
可 “08年 一个USER来申请08年的假,08年时AO来批,情况正常,”
这情况正常呀,
我想应该不是数据库的问题,
帮我想想其它的办法吧,
要代码也可以给你看的,
谢谢!
而不是AO哪一年批就到哪一年减你应该不是开发者吧?在用别人的产品时遇到这个问题?那就得去问开发这个产品的人啊
02 001 3.0 200909年批准08请的假时候,为什么减去02这条,而不减去01这条,sql语句 echo出来看看,然后往前回溯,找到什么时候判断要操作那一条记录的
加下我的MSN [email protected]
速度。。
(因为这个系统我要一直维护,不是一天二天的事,)
谢谢各位。
function reduce_leave_balance($leave_id,$hr_adjust_days=''){ $sql="select b.*,a.user_id from leave a left join leave_detail b on a.leave_id=b.leave_id where a.leave_id=".$leave_id." and b.type_id != 0";
if($leave_type==1 && $year<=2008){ // annual leave process
// check if last year have annual leave
$strSQL="select balance from leave_balance where user_id =".$user_id." and leave_type=".$leave_type." and year=".intval($year-1);
if($balance==0)
{ // if last annual leave is 0 , only update current year annual leave
$main = array($total,$total,$user_id,$year,$leave_type);
$sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?";
$ret = $this->db->execute($sql,$main);
}
if($leave_type==1 && $year<=2008){ // annual leave process
// check if last year have annual leave
$strSQL="select balance from leave_balance where user_id =".$user_id." and leave_type=".$leave_type." and year=".intval($year-1);
$this->db->query($strSQL,0,-1);
$balance=0;
if ($balance = $this->db->nextRecord()){
$balance=$balance["balance"];
}
if($balance==0)
{ // if last annual leave is 0 , only update current year annual leave
$main = array($total,$total,$user_id,$year,$leave_type);
$sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?";
$ret = $this->db->execute($sql,$main);
}elseif($balance >= $total)
{
// only reduce last year annual leave balance
$main = array($total,$total,$user_id,intval($year-1),$leave_type);
$sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?";
$ret = $this->db->execute($sql,$main);
}else
{
// reduce last year annual leave balance and set it is 0, and reduce current year annual leave
// reduce last year
$last_year_leave=$balance;
$main = array($last_year_leave,$last_year_leave,$user_id,intval($year-1),$leave_type);
$sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?";
$ret = $this->db->execute($sql,$main);
// reduce current year
$current_year_leave=$total-$balance;
$main = array($current_year_leave,$current_year_leave,$user_id,$year,$leave_type);
$sql="update leave_balance set used=used+?, balance=balance-? where user_id=? and year=? and leave_type=?";
$ret = $this->db->execute($sql,$main);
}
}