| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- <?php
- //模块 hrcheck.考核评分
- class flow_hrcheckClassModel extends flowModel
- {
- public $dtobj;
- //审核完成处理
- protected function flowcheckfinsh($zt){
- //最后得分计算,
- if($zt==1){
- $fenzp = floatval($this->rs['fenzp']);
- $fensj = floatval($this->rs['fensj']);
- $fenrs = floatval($this->rs['fenrs']);
-
- //默认分数=自己评分*50% + 上级评分*25% + 人事评分*25%
- $fen = $fenzp*0.5 + $fensj*0.25 + $fenrs*0.25;
-
- //3个平均分
- //$fen = ($fenzp+$fensj+$fenrs)/3;
-
- $this->update(array('fen' => $fen), $this->id);
- }
- }
-
- //需要评分就可以查看
- protected function flowisreadqx()
- {
- $boss = $this->getpfrows();
- if($boss)return true;
- return false;
- }
-
- private function getpfrows()
- {
- return m('hrcheckn')->getall('mid='.$this->id.' and `optid`='.$this->adminid.' and `optdt` is null','*', '`sort`');
- }
-
- public function flowrsreplace($rs, $lx=0)
- {
- if(isset($rs['abclex']))return $rs;
- $ztstr = '';
- if(isempt($rs['pfrens'])){
- $ztstr = '<font color=green>评分已完成</font>';
- }else{
- if($rs['uid']==$this->adminid){
- $ztstr = '待<font color=blue>'.$rs['pfrens'].'</font>评分';
- }else{
- $ztstr = '<font color=blue>待评分</font>';
- }
- }
- $rs['pfrenids'] = $ztstr;
- if($lx==1){
- $ckbo = $this->isreadqxs();//是否设置查看权限
-
-
-
- $ispf = $this->getpfrows();
- if(!$ispf){
- if($ckbo){ //设置可查看
- $rs['subdatastr'] = $this->getsubdatastr($this->id);
- $this->moders['isgbcy'] = 0;
- $this->moders['isgbjl'] = 0;
-
- }else{
- if($rs['uid']!=$this->adminid)$rs['fen'] = '-';
- }
- }else{
- $rs['fen'] = '-';
- }
- }
- if($rs['uid']!=$this->adminid && !contain($this->atype, 'all'))$rs['fen']='-';//自己只能看自己分
- return $rs;
- }
-
- public function getsubdatastr($id, $glx=0)
- {
- $srows = m('hrchecks')->getrows('`mid`='.$id.'','*','`sort`');
- $nrows = m('hrcheckn')->getrows('`mid`='.$id.'','*','`sort`');
- $pars = array();
- $fsarr = array();
- foreach($nrows as $k2=>$rs2){
- $pars[$rs2['pfid']] = $rs2['pfname'].'<br>'.$rs2['optname'].'(权重'.$rs2['weight'].'%)';
- $fsarr['s'.$rs2['sid'].'_'.$rs2['pfid'].''] = $rs2['defen'];
- }
- $fenshu = 0;
- $toarr = array();
- foreach($srows as $k1=>&$rs1){
- $rs1['xuhaos'] = $k1+1;
-
- foreach($pars as $k3=>$v3){
- $val = arrvalue($fsarr, 's'.$rs1['id'].'_'.$k3.'');
- if(!isset($toarr[$k3]))$toarr[$k3] = 0;
- $toarr[$k3]+=floatval($val);
-
- if($val==0)$val= '';
- $rs1['pfzd'.$k3.''] = $val; //得分
- }
-
-
- $fenshu+=floatval($rs1['fenshu']);
- }
-
- //统计的
- $tjarr = array();
- foreach($toarr as $k3=>$v1){
- if($v1==0)$v1='';
- $tjarr['pfzd'.$k3.''] = $v1;
- }
- $tjarr['itemname'] = '小计';
- $tjarr['fenshu'] = $fenshu;
- $srows[]= $tjarr;
-
- if($glx==1){
- return array(
- 'data'=>$srows,
- 'colums'=> $pars
- );
- }
-
- $herstr = 'xuhaos,,center@itemname,考核内容,left@fenshu,分值';
- foreach($pars as $k1=>$v1)$herstr.='@pfzd'.$k1.','.$v1.'';
-
- $pfrowsstr = c('html')->createrows($srows, $herstr,'#dddddd');
-
- return $pfrowsstr;
- }
-
-
- protected function flowinit()
- {
- $this->dtobj = c('date');
- }
-
- protected function flowbillwhere($uid, $lx)
- {
- $month = $this->rock->post('month');
- $where = '';
- if(!isempt($month)){
- $where="and a.`startdt` like '".$month."%'";
- }
- return array(
- 'table' => '`[Q]hrcheck` a left join `[Q]userinfo` b on a.uid=b.id',
- 'fields' => 'a.*,b.deptname',
- 'asqom' => 'a.',
- 'where' => $where,
- 'orlikefields' => 'b.deptname'
- );
- }
-
-
- //是否可评分
- protected function flowdatalog($arr)
- {
- $pfrows = $this->getpfrows();
- foreach($pfrows as $k=>&$rs){
- $rs['xuhaos'] = $k+1;
- $rs['defenstr'] = '<input type="number" min="0" max="'.$rs['fenshu'].'" class="inputs" onfocus="js.focusval=this.value" name="pingfen_'.$rs['id'].'" onblur="js.number(this)">';
- $rs['itemname'] = '<div style="max-width:200px">'.$rs['itemname'].'</div>';
- }
- $pfrowsstr = c('html')->createrows($pfrows, 'xuhaos,,center@itemname,考核内容,left@pfname,评分名称@fenshu,总分数@defenstr,评分分数','#dddddd');
- return array(
- 'pfrows' => $pfrows,
- 'pfrowsstr' => $pfrowsstr,
- );
- }
-
- public function hrkaohemrun()
- {
- $dt = $this->rock->date;
- $dbs = m('hrkaohes');
- $dbs1 = m('hrchecks');
- $dbn1 = m('hrcheckn');
- $dbn = m('hrkaohen');
- $rows = m('hrkaohem')->getall("`status`=1 and `startdt`<='$dt' and `enddt`>='$dt'");
- $keox = 0;
- foreach($rows as $k=>$rs){
-
- $bo = $this->xuyuns($rs);
- if(!$bo)continue;
-
- $keox++;
- $rowxm = $dbs->getall("`mid`='".$rs['id']."'",'*','`sort`');
- $rowpf = $dbn->getall("`mid`='".$rs['id']."'",'*','`sort`');
-
- $inarr = array(
- 'khid' => $rs['id'],
- 'title' => $rs['title'],
- 'startdt' => $this->rock->date,
- 'applydt' => $this->rock->date,
- 'optdt' => $this->rock->now,
- 'createdt' => $this->rock->now,
- 'optname' => $rs['optname'],
- 'optid' => $rs['optid'],
- 'isturn' => 1,
- 'month' => date('Y-m'),
- 'status' => 1,
- 'enddt' => ''
- );
- if($rs['pfsj']>0)$inarr['enddt'] = $this->dtobj->adddate($inarr['startdt'],'d', $rs['pfsj']);
- $recwe = $this->adminmodel->gjoin($rs['receid'],'', 'where');
- $uarr = $this->adminmodel->getall("`status`=1 and ($recwe)",'id,name');
- foreach($uarr as $uk=>$urs){
- $inarr['uid'] = $urs['id'];
- $inarr['applyname'] = $urs['name'];
- $pfren = $pfrenid = $pfrenids = $pfrens = '';
- $mid = 0;
- $where1 = "`uid`='".$urs['id']."' and `startdt`='".$inarr['startdt']."' and `khid`='".$rs['id']."'";
- if($mrs = $this->getone($where1)){
- $mid= (int)$mrs['id'];
- }else{
- $where1= '';
- }
- //保存的hrcheck表
- $bo = $this->record($inarr, $where1);
- if($mid==0)$mid = $this->db->insert_id();
-
- //在保存到hrchecks考核内容表
- $sids = '0';
- $sids1 = '0';
- foreach($rowxm as $k1=>$rs1){
- $where1 = "`mid`='$mid' and `itemname`='".$rs1['itemname']."'";
- $sid = (int)$dbs1->getmou('id',$where1);
- if($sid==0)$where1 = '';
- $fenshu = floatval($rs['maxfen']) * floatval($rs1['weight']) * 0.01;
- $dbs1->record(array(
- 'mid' => $mid,
- 'sort' => $k1,
- 'itemname' => $rs1['itemname'],
- 'weight' => $rs1['weight'],
- 'fenshu' => $fenshu
- ), $where1);
- if($sid==0)$sid = $this->db->insert_id();
- $sids.=','.$sid.'';
-
- //添加到hrcheckn考核内容表
-
- foreach($rowpf as $k2=>$rs2){
- $pfarr = $this->getpftype($urs, $rs2);
- $where2= "`mid`='$mid' and `pfid`='".$rs2['id']."' and `sid`='$sid'";
- $sid1 = 0;
- $srs = $dbn1->getone($where2);
- if($srs){
- $sid1 = (int)$srs['id'];
- }
- if($sid1==0)$where2 = '';
-
- $dbn1->record(array(
- 'mid' => $mid,
- 'sort' => $k2,
- 'itemname' => $rs1['itemname'],
- 'weight' => $rs2['pfweight'],
- 'pfid' => $rs2['id'],
- 'pfname' => $rs2['pfname'],
- 'sid' => $sid,
- 'fenshu' => $fenshu,
- 'optid' => $pfarr[0],
- 'optname' => $pfarr[1],
- ),$where2);
- if($sid1==0)$sid1 = $this->db->insert_id();
- $sids1.=','.$sid1.'';
- if(!isempt($pfarr[0]) && !contain(','.$pfrenid.',',','.$pfarr[0].',')){
- $pfren .= ','.$pfarr[1];
- $pfrenid .= ','.$pfarr[0];
- }
- //未评分人
- $ispf = false;
- if($srs && !isempt($srs['optdt']))$ispf=true;
-
- if(!$ispf && !isempt($pfarr[0]) && !contain(','.$pfrenids.',',','.$pfarr[0].',')){
- $pfrenids .= ','.$pfarr[0];
- $pfrens .= ','.$pfarr[1];
- }
- }
- }
- $dbs1->delete("`mid`='$mid' and `id` not in($sids)");
- $dbn1->delete("`mid`='$mid' and `id` not in($sids1)");
- if($pfrenid!=''){
- $pfrenid = substr($pfrenid,1);
- $pfren = substr($pfren,1);
- }
- if($pfrenids!=''){
- $pfrenids = substr($pfrenids, 1);
- $pfrens = substr($pfrens, 1);
- }
-
-
- $this->update(array(
- 'pfrenid' => $pfrenid,
- 'pfren' => $pfren,
- 'pfrenids' => $pfrenids,
- 'pfrens' => $pfrens,
- ), $mid);
-
- //发给对应人通知
- $this->loaddata($mid, false);
- $this->numtodosend('pftodo','评分');
- }
- }
- return $keox;
- }
- private function xuyuns($rs){
- $pinlv = $rs['pinlv'];
- $sctime = $rs['sctime'];
- if(isempt($sctime))return false;
- if($pinlv=='d')return true; //每天
- if($pinlv=='m'){
- if(date('d')==date('d', strtotime($sctime)))return true;
- }
- //每季度
- if($pinlv=='j'){
- $m = (int)date('m');
- $jdr = array(1,4,7,10);
- if(in_array($m, $jdr)){
- if(date('d')==date('d', strtotime($sctime)))return true;
- }
- }
- //每年
- if($pinlv=='y'){
- if(date('m-d')==date('m-d', strtotime($sctime)))return true;
- }
- return false;
- }
- //获取评分人
- private function getpftype($urs, $rs2){
- $pftype = $rs2['pftype'];
- $sid = '';
- $sna = '';
- if(!isempt($rs2['pfren'])){
- $sid = $rs2['pfrenid'];
- $sna = $rs2['pfren'];
- }
- if($pftype=='my'){
- $sid = $urs['id'];
- $sna = $urs['name'];
- }
- //上级
- if($pftype=='super' && $sid==''){
- $sua = $this->adminmodel->getsuperman($urs['id']);
- if($sua){
- $sid = $sua[0];
- $sna = $sua[1];
- }
- }
- return array($sid, $sna);
- }
-
- public function defen($mid)
- {
- $rows = m('hrcheckn')->getall('`mid`='.$mid.'');
- $fshu = 0;
- $pfren = $pfrenid = $pfrenids = $pfrens = '';
- foreach($rows as $k=>$rs){
- $fshu += floatval($rs['defen']) * floatval($rs['weight']) * 0.01;
-
- if(!isempt($rs['optid']) && !contain(','.$pfrenid.',',','.$rs['optid'].',')){
- $pfren .= ','.$rs['optname'];
- $pfrenid .= ','.$rs['optid'];
- }
-
- if(isempt($rs['optdt']) && !isempt($rs['optid']) && !contain(','.$pfrenids.',',','.$rs['optid'].',')){
- $pfrenids .= ','.$rs['optid'];
- $pfrens .= ','.$rs['optname'];
- }
- }
-
- if($pfrenid!=''){
- $pfrenid = substr($pfrenid,1);
- $pfren = substr($pfren,1);
- }
- if($pfrenids!=''){
- $pfrenids = substr($pfrenids, 1);
- $pfrens = substr($pfrens, 1);
- }
-
- $this->update(array(
- 'pfrenid' => $pfrenid,
- 'pfren' => $pfren,
- 'pfrenids' => $pfrenids,
- 'pfrens' => $pfrens,
- 'fen' => $fshu,
- ), $mid);
- }
-
- /**
- * 提交评分
- */
- public function pingfen()
- {
- $str = $this->rock->post('str');
- $star= c('array')->strtoarray($str);
- $dbn = m('hrcheckn');
- foreach($star as $kv2){
- $sid = $kv2[0];
- $defen = $kv2[1];
-
- $uarr = array(
- 'defen' => $defen,
- 'optdt' => $this->rock->now
- );
-
- $dbn->update($uarr, $sid);
- }
- $this->defen($this->id);
- $sm = $this->rock->post('sm');
-
- $this->addlog(array(
- 'name' => '评分',
- 'explain' => $sm
- ));
- //$this->numtodosend('pftz','评分', $sm);
-
- return 'ok';
- }
- }
|