分享

SQL请假范围时间设定/考勤规则

 时间剧毒 2014-11-07
推荐资料自学网址:http://www./study.asp?vip=10241777 
ALTER  proc [dbo].[HN_Kq_TimeTest] (
@userid as varchar(50),         --员工代号
@begindate as datetime ,    -- 开始时间
@enddate as datetime,      --截止时间
@type as int --0 标示请假  1 标示加班  2 标示补卡
)
as
declare @begin as datetime     --开始时间
declare @end as datetime
set @begin=@begindate
set @end=@enddate
declare @begintime as varchar(20)     --开始时间
declare @endtime  as varchar(20)      --截止时间
declare @Depno as varchar(20)       --部门代号
declare @morring1 as varchar(20)     --早上上班时间
declare @morring2 as varchar(20)       --早上下班时间
declare @afternoon1 as varchar(20)     --下午上班时间
declare @afternoon2 as varchar(20)       --下午下班时间
declare @night1 as varchar(20)     --晚上上班时间
declare @night2 as varchar(20)       --晚上下班时间

declare @morring1B as varchar(20)     --早上上班刷卡起
declare @morring2E as varchar(20)       --早上下班刷卡止
declare @afternoon1B as varchar(20)     --下午上班刷卡起
declare @afternoon2E as varchar(20)     --下午下班刷卡止
declare @night1B as varchar(20)     --晚上上班刷卡起
declare @night2E as varchar(20)     --晚上上班刷卡止


declare @column as varchar(200)      --列名
 declare @ErrorTitle as varchar(80)
declare @bz as bit
declare @rowtimecount as int
  
select @Depno=cardbranchid  from  [HN_Employee] where userID=@userid

set @rowtimecount=(select  COUNT(*) as con from [HN_KqTimeSet] where branchid=@Depno and years=year(@begin) and months=month(@begin))
if  @rowtimecount>0
begin

select
@morring1= CONVERT(varchar(100),MB, 24) ,
@morring2=CONVERT(varchar(100),ME, 24) ,
@afternoon1=CONVERT(varchar(100),AB, 24),
@afternoon2=CONVERT(varchar(100),AE, 24) ,
@night1=CONVERT(varchar(100),NB, 24) ,
@night2=CONVERT(varchar(100),NE, 24), 
@morring1B= CONVERT(varchar(100),MBup, 24) ,
@morring2E=CONVERT(varchar(100),MEdown, 24) ,
@afternoon1B=CONVERT(varchar(100),ABup, 24),
@afternoon2E=CONVERT(varchar(100),AEdown, 24) ,
@night1B=CONVERT(varchar(100),NBup, 24) ,
@night2E=CONVERT(varchar(100),NEdown, 24)
from [HN_KqTimeSet] where branchid=@Depno and years=year(@begin) and months=month(@begin)

set @begintime =CONVERT(varchar(100),@begin ,24)  --取时间部分 08:00
set @endtime =CONVERT(varchar(100),@end ,24)      --取时间部分 17:00
----***********-------------  0 标示请假 
if @type=0
begin
set @ErrorTitle='正常'
     set @bz=1    
    --判断请假开始时间是否在上班时间段内  自动规范请假时间
 if ( (@begintime  >= @morring1 and @begintime <@morring2)  or  (@begintime >= @afternoon1 and  @begintime<@afternoon2) or    (@begintime >= @night1 and @begintime< @night2) )
     begin
   set @begintime=@begintime
  end
     else
    begin
    
    set @ErrorTitle=  '请假起始时间不在在正常上班时间段内,请更正!'
     set @bz=0 
    end

  if @bz=1
  begin
  if ( (@endtime > @morring1 and @endtime< =@morring2)  or  (@endtime>@afternoon1 and @endtime<= @afternoon2) or    (@endtime> @night1 and   @endtime<=@night2))
  begin
    set @endtime=@endtime
  end
  else
  begin
    set @ErrorTitle=  '请假截止时间不在正常上班时间段内,请更正!' 
    set @bz=0
  end
  end
end
----------------------------------------------------------------------------------
----***********-------------1 标示加班
if @type=1
begin
set @ErrorTitle='正常'
set @begintime =CONVERT(varchar(100),@begin ,23)  --取日期部分 2014-08-08
set @column='D'+convert(varchar(20),day(@begintime))
CREATE TABLE #KqDayJ(KqDayJ INT)
set @column='  INSERT INTO #KqDayJ(KqDayJ) select  count(*) AS KqDayJ   from [HN_KqDaySet] where  branchid='+@Depno+' and years=year('''+@begintime+''') and  months=month('''+@begintime+''') and '+@column+'=1'
exec (@column)
declare @KqDayJ as INT
SET @KqDayJ=(SELECT TOP 1  KqDayJ  FROM #KqDayJ)
if @KqDayJ>0
begin
---正常上班的加班
set @bz=1   
    --判断加班开始时间是否在上班时间段内  自动规范请假时间
 if ( ( @begintime <@morring1)  or ( @begintime >=@morring2)  or  (  @begintime>=@afternoon2) or ( @begintime>= @night2) )
     begin
      set @begintime=@begintime
    end
     else
    begin
    --select @begintime
    --  select @morring2
    set @ErrorTitle=  '加班起始时间不在在正常下班时间段内,请更正!'
     set @bz=0 
    end

  if @bz=1
  begin
  if ( ( @endtime <@morring1)  or(@endtime>@morring2)  or  ( @endtime> @afternoon2) or    (@endtime>@night2))
  begin
    set @endtime=@endtime
  end
  else
  begin
    set @ErrorTitle=  '加班截止时间不在正常下班时间段内,请更正!' 
    set @bz=0
  end
  end
 if @bz=1
  begin
   --    --判断加班开始时间是否在上班时间内
 if ( (@begintime <@morring1 and @endtime>'00:00:00' and @endtime <= @morring1  )  or  
         (@begintime >=@morring2 and @begintime<@afternoon1 and @endtime >@morring2 and @endtime<=@afternoon1) or 
         (@begintime >=@afternoon2 and @begintime<@night1 and @endtime>@afternoon2 and @endtime<=@night1) or
         (@begintime >=@night2 and @begintime<'23:59:59' and @endtime >@night2)     )
     begin
   set @begintime=@begintime
      set @endtime=@endtime
  end
     else
    begin
    set @ErrorTitle=  '加班时间段不在下班时间段内,请更正!'
     set @bz=0 
    end
   end
end
end
DROP TABLE #KqDayJ

----------------------------------------------------------------------------------
----***********-------------2 标示补卡
if @type=2
begin
set @ErrorTitle='正常'
set @begintime =CONVERT(varchar(100),@begin ,23)  --取日期部分 2014-08-08
set @endtime =CONVERT(varchar(100),@end ,24)      --取时间部分 17:00
set @column='D'+convert(varchar(20),day(@begintime))
CREATE TABLE #KqDay(KqDay INT)
set @column='  INSERT INTO #KqDay(KqDay) select  count(*) AS KqDay   from [HN_KqDaySet] where  branchid='+@Depno+' and years=year('''+@begintime+''') and  months=month('''+@begintime+''') and '+@column+'=1'
exec (@column)
declare @KqDay as INT
SET @KqDay=(SELECT TOP 1  KqDay  FROM #KqDay)
DROP TABLE #KqDay
 --if @@error >0 or @@rowcount=1
 if @KqDay>0
 begin
        if (@endtime between @morring1B and @morring1)
         or (@endtime between @morring2 and @afternoon2E)
        or (@endtime between @afternoon1B and @afternoon1)
        or (@endtime between @afternoon2 and @afternoon2E)
        or (@endtime between @night1B and @night1)
         or (@endtime between @night2 and @night2E)
        begin 
          set  @begintime=@begintime
          set  @endtime=@endtime
        end
        else
        begin
          set @ErrorTitle='补卡时间 '+@endtime+'  不在正常刷卡时间范围内!'
        end
 end 
 else
 begin
     set @ErrorTitle='当前补卡日期 '+@begintime+'考勤天数表设置不用出勤,无需补卡,请更正!'
    end
end
--------------------------------------------------------------------------------------
end
else
begin
 set @ErrorTitle='当前时间年月,员工刷卡部门未设置有效考勤时间,请设置!'
end

select @ErrorTitle as    ErrorTitle

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约