atdprocess.pas

来自「pasa人力资源考勤管理系统」· PAS 代码 · 共 1,026 行 · 第 1/5 页

PAS
1,026
字号
        while not Adopersonal.eof do
        begin
            basemoney:=0;
            addmoney:=0;
            workno:=adopersonalworkno.asstring;
            earlydec:=0; latedec:=0; kuanggongdec:=0;
            leavedec:=0; otmoney:=0; eveningmoney:=0;
            basemoney:=0;addmoney:=0;
            lastrq:='';
            adonormal.Close;
            adonormal.commandtext:='Select * from '+source+' where process=0 and workno='''+workno+''' order by rq,workno ';
            adonormal.Open;
            adonormal.First;
            while not adonormal.eof do
            begin
                eveningot:=0;
                overtimeot:=0;
                eveninghours:=0;
                presentdec:=0;
                process:=true;
                rq:=adonormalrq.asstring;
//计算底薪及津贴
                //求出本月应出勤天由行事历得来
                if adosalsetdivmode.AsBoolean then
                begin
                     days:=Getdays(copy(rq,5,2),copy(rq,1,4));
                     Query3.Close;
                     Query3.SQL.Text:='Select count(*) as con from pub06010 where (left(comdate,4)+substring(comdate,6,2)='''+copy(rq,1,6)+''') '+
                                  ' and comcode='''+adopersonaldothing.asstring+''' ';
                     Query3.Open;
                     days:=days-query3.fieldbyname('con').value;
                end
                else days:=adosalsetfixdays.AsFloat;
         //查找有无调薪
                Query1.close;
                Query1.sql.add('Select * from per27012 where workno='''+workno+''' order by cpushdate ');
                Query1.open;
                if Query1.RecordCount>0 then    //只有一次调薪
                begin
                    if Query1.RecordCount>1 then//有多次调薪
                    begin
                         Query1.first;
                         if rq<Query1.fieldbyname('cpushdate').value then   //在第一次调薪之前
                         begin
                            basemoney:=Query1.fieldbyname('basepay').value/days;
                            fixot:=adopersonalfixot.asfloat;
                            m:=adosalsetadditems.AsString;
                            while length(m)>0 do
                            begin
                                i:=pos('/',m);   //找出FieldName
                                x:=copy(m,1,i-1);
                                delete(m,1,i);
                                if x='profmoney' then
                                   addmoney:=addmoney+Query1.fieldbyname('profpay').value
                                else if x='techmoney' then
                                   addmoney:=addmoney+Query1.fieldbyname('techpay').value
                                else if x='deptmoney' then
                                   addmoney:=addmoney+Query1.fieldbyname('deptpay').value;
                                addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
                            end;
                            addmoney:=addmoney/days;   //时津贴
                         end  //第一次调薪
                         else
                         begin //88
                            Query1.Last;
                            if rq>=Query1.fieldbyname('cpusedate').value then //在最后一次调薪之后
                               goto normal
                            else //多次调薪之中
                            begin  //77
                                 Query1.first;   //返回第一笔顺序向下找确定属于那次调薪
                                 while not Query1.Eof do
                                 begin   //while out
                                      bookmark1:=Query1.Getbookmark;
                                      firstrq:=Query1.fieldbyname('cpusedate').value;
                                      Query1.next;
                                      if not Query1.eof then
                                      begin  //66
                                         if (rq>=firstrq) and (rq<Query1.fieldbyname('cpusedate').value) then
                                         begin  //55
                                            Query1.GotoBookmark(bookmark1);
                                            basemoney:=Query1.fieldbyname('basepay').value/days;
                                            fixot:=adopersonalfixot.asfloat;
                                            m:=adosalsetadditems.AsString;
                                            while length(m)>0 do
                                            begin //while
                                                i:=pos('/',m);   //找出FieldName
                                                x:=copy(m,1,i-1);
                                                delete(m,1,i);
                                                if x='profmoney' then
                                                   addmoney:=addmoney+Query1.fieldbyname('profpay').value
                                                else if x='techmoney' then
                                                   addmoney:=addmoney+Query1.fieldbyname('techpay').value
                                                else if x='deptmoney' then
                                                   addmoney:=addmoney+Query1.fieldbyname('deptpay').value;
                                                addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
                                            end;   //while
                                            addmoney:=addmoney/days;   //时津贴
                                         end  //55
                                         else
                                         begin  //else
                                             if rq>=firstrq then
                                             begin  //55
                                                Query1.GotoBookmark(bookmark1);
                                                basemoney:=Query1.fieldbyname('basepay').value/days;
                                                fixot:=adopersonalfixot.asfloat;
                                                m:=adosalsetadditems.AsString;
                                                while length(m)>0 do
                                                begin //while
                                                    i:=pos('/',m);   //找出FieldName
                                                    x:=copy(m,1,i-1);
                                                    delete(m,1,i);
                                                    if x='profmoney' then
                                                       addmoney:=addmoney+Query1.fieldbyname('profpay').value
                                                    else if x='techmoney' then
                                                       addmoney:=addmoney+Query1.fieldbyname('techpay').value
                                                    else if x='deptmoney' then
                                                       addmoney:=addmoney+Query1.fieldbyname('deptpay').value;
                                                    addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
                                                end;   //while
                                                addmoney:=addmoney/days;   //时津贴
                                             end; //55
                                         end;  //else
                                      end;  //66
                                 end;   //while out
                            end;  //77
                         end; //88
                    end else
                    begin
                         if rq>=Query1.fieldbyname('cpusedate').value then  //
                            goto normal
                         else
                         begin
                            basemoney:=Query1.fieldbyname('basepay').value/days;
                            fixot:=adopersonalfixot.asfloat;
                            m:=adosalsetadditems.AsString;
                            while length(m)>0 do
                            begin
                                i:=pos('/',m);   //找出FieldName
                                x:=copy(m,1,i-1);
                                delete(m,1,i);
                                if x='profmoney' then
                                   addmoney:=addmoney+Query1.fieldbyname('profpay').value
                                else if x='techmoney' then
                                   addmoney:=addmoney+Query1.fieldbyname('techpay').value
                                else if x='deptmoney' then
                                   addmoney:=addmoney+Query1.fieldbyname('deptpay').value;
                                addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
                            end;
                            addmoney:=addmoney/days;   //时津贴
                         end;
                    end;
                end else  //无调薪
                begin
                  normal:
                    basemoney:=adopersonalbasepay.AsFloat/days;    //时薪
                    fixot:=adopersonalfixot.AsFloat;
                    //找出津贴项目设定
                    m:=adosalsetadditems.AsString;
                    while length(m)>0 do
                    begin
                        i:=pos('/',m);   //找出FieldName
                        x:=copy(m,1,i-1);
                        delete(m,1,i);
                        addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
                    end;
                    addmoney:=addmoney/days;   //时津贴
                end;
         //查找有无调薪
//计算底薪及津贴
                otkind:=adonormal.fieldbyname('otkind').asstring;
                if (otkind=null) or (trim(otkind)='') then otkind:='平时加班';
                mustgo:=adonormal.fieldbyname('mustgo').asstring;
                mustout:=adonormal.fieldbyname('mustout').asstring;
                factgo:=adonormal.fieldbyname('factgo').asstring;
                factout:=adonormal.fieldbyname('factout').asstring;
                date1:=copy(rq,1,4)+dateseparator+copy(rq,5,2)+dateseparator+copy(rq,7,2)+' '+copy(mustgo,1,2)+timeseparator+copy(mustgo,3,2);
                date2:=copy(rq,1,4)+dateseparator+copy(rq,5,2)+dateseparator+copy(rq,7,2)+' '+copy(mustout,1,2)+timeseparator+copy(mustout,3,2);
                late:=date1decdate2minute(date1,copy(factgo,1,16));
                early:=date1decdate2minute(date2,copy(factout,1,16));
                musthours:=adonormal.fieldbyname('musthours').value;
                facthours:=date1decdate2hour(adonormal.fieldbyname('factgo').asstring,adonormal.fieldbyname('factout').asstring,adonormal.fieldbyname('decrease').asinteger);
                Query1.Close;
                Query1.Sql.Text:='Select * from '+dest+' where workno='''+workno+''' and rq='''+rq+''' ';
                Query1.open;
                if Query1.eof then  //
                begin
                    Query2.Close;
                    Query2.sql.text:='Insert into '+dest+' (workno,cardno,rq,facthours,eveninghours,late,early,kuanggong,ot,leavehave,leavenon,tempvalue,process) '+
                                     ' select a.workno,a.cardno,'''+rq+''',0,0,0,0,0,0,0,0,'''',0,0 from per24010 as a where a.workno='''+workno+''' ';
                    Query2.ExecSQL;
                end;
                Query2.Close;
                Query2.sql.clear;
                //本时段为加班且加班有考勤或不为加班
                if (not adonormal.fieldbyname('addtime').AsBoolean) or (adonormal.fieldbyname('addtime').asboolean and adoatdsetaddtime.asboolean) then
                begin
                     Query2.sql.add('Update '+dest+' set tempvalue=case when '+inttostr(late)+'>0 then '+inttostr(late)+' else 0 end where rq='''+rq+''' and workno='''+workno+''' ');
                     if adoatdsetlatecal.asboolean then    //迟到加基数     atd07010.latestyle=1 早迟按时间计atd07010.latestyle=0 按次数计
                        Query2.Sql.add('Update '+dest+' set late=isnull(late,0)+case when tempvalue>b.latetime then'+
                                       ' case when b.latestyle=1 then tempvalue else 1 end else 0 end '+
                                       ' from '+dest+' as a,atd07010 as b where a.rq='''+rq+''' and a.workno='''+workno+''' ')
                     else   //迟到不加基数
                        Query2.sql.add('Update '+dest+' set late=isnull(late,0)+case when tempvalue>b.latetime then'+
                                       ' case when b.latestyle=1 then tempvalue-b.latetime else 1 end else0 end '+
                                       ' from '+dest+' as a,atd07010 as b where a.rq='''+rq+''' and a.workno='''+workno+''' ');
                          //计算旷工

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?