没看懂,什么叫 ,“减在USER的09年里”? 流程说明再详细说说

解决方案 »

  1.   

    请假表:
    ID, 请假人ID, 发起请假的时间, 申请假期开始时间, 申请假期结束时间, 请假理由, 此记录的状态, 批准人ID
      

  2.   

    减USER假都是减在每个USER的对应表中可用的字段(balance)
    也是有时间对应的,
    BALANCE ID  USERID    BALANCE     YEAR 
       01         001      6.0        2008
       02         001      3.0        2009
    意思就是:
    “08年 一个USER来申请08年的假,09年AO来批,结果减去的假,是减在这个USER 对应表中09年里可用的假里,(本应减在08年里的),”
      

  3.   

    对于AO批假人来说,
    假是不会过期的,
    因为AO的记录中会显示申请过的假的,(权限决定)
    只是要批的假时间过去了,
    那USER的假就当自由流失,
    这个和我问的那问没关系的,
    谢谢
      

  4.   

    3楼注意
    谢谢你帮我看问题。
    可 “08年 一个USER来申请08年的假,08年时AO来批,情况正常,” 
    这情况正常呀,
    我想应该不是数据库的问题,
    帮我想想其它的办法吧,
    要代码也可以给你看的,
    谢谢!
      

  5.   

    我觉得这个流程的问题,不是代码的问题AO点击批准,这个时候程序应该先判断下这个请假条是哪一年的,再到那个年份里面去减
    而不是AO哪一年批就到哪一年减你应该不是开发者吧?在用别人的产品时遇到这个问题?那就得去问开发这个产品的人啊
      

  6.   

    数据库操作的时候,你是怎么找到那一条你要减去的记录的?  01        001      6.0        2008 
      02        001      3.0        200909年批准08请的假时候,为什么减去02这条,而不减去01这条,sql语句 echo出来看看,然后往前回溯,找到什么时候判断要操作那一条记录的
      

  7.   

    楼上的。
    加下我的MSN [email protected]
    速度。。
      

  8.   

    对应函数:很难看清楚,还是加我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);
                }    
      

  9.   


             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);
                }
                }