406 lines
11 KiB
PHP
406 lines
11 KiB
PHP
<?php
|
|
class flow_hrsalaryClassModel extends flowModel
|
|
{
|
|
protected $flowviewufieds = 'xuid';
|
|
|
|
public $floweditother = true; //可编辑uid别人的单据
|
|
|
|
//薪资是个严格的模块,只能设置权限后才可以查看,不管是不是管理员
|
|
protected function flowbillwhere($uid, $lx)
|
|
{
|
|
$key = $this->rock->post('key');
|
|
$dt = $this->rock->post('dt');
|
|
$ispay = $this->rock->post('ispay');
|
|
$isturn = $this->rock->post('isturn');
|
|
$where = '';
|
|
$where = $this->viewmodel->viewwhere($this->moders, $this->adminid, $this->flowviewufieds, 1);
|
|
if($lx=='faf'){
|
|
$where.=' and a.`status`=1';
|
|
}
|
|
if($ispay!='')$where.=' and a.`ispay`='.$ispay.'';
|
|
if($isturn!='')$where.=' and a.`isturn`='.$isturn.'';
|
|
|
|
//自己部门下的
|
|
if($lx=='dept'){
|
|
$uidall = $this->adminmodel->getdown($uid);
|
|
if(isempt($uidall))$uidall='0';
|
|
$where.=' and a.`xuid` in('.$uidall.')';
|
|
}
|
|
//echo $where;
|
|
|
|
//if($key!='')$where.=" and (c.deptallname like '%$key%' or a.uname like '%$key%' or a.ranking like '%$key%' )";
|
|
if($dt!='')$where.=" and a.`month`='$dt'";
|
|
return array(
|
|
'where' => $where,
|
|
'orlikefields' => 'c.`deptallname`,a.`uname`,a.`ranking`',
|
|
'tableleft' => '`[Q]userinfo` c on a.`xuid`=c.`id`',
|
|
'fieldsleft'=> 'c.`num`,c.deptallname,c.`bankname`,c.`banknum`',
|
|
'order' => 'a.`month` desc,a.`id` asc',
|
|
);
|
|
}
|
|
|
|
public function flowrsreplace($rs, $lx=0){
|
|
if(isset($rs['ispay'])){
|
|
$s = '<font color=red>待发放</font>';
|
|
$rs['ispays'] = $rs['ispay'];
|
|
if($rs['ispay']==1)$s = '<font color=green>已发放</font>';
|
|
$rs['ispay'] = $s;
|
|
|
|
$s = '<font color=red>待核算</font>';
|
|
if($rs['isturn']==1)$s = '<font color=green>已核算</font>';
|
|
$rs['isturnss'] = $s;
|
|
}
|
|
|
|
//详情展示时
|
|
if($lx==1){
|
|
}
|
|
|
|
return $rs;
|
|
}
|
|
|
|
private function fafang()
|
|
{
|
|
$this->addlog(array(
|
|
'name' => '发放'
|
|
));
|
|
$this->update('ispay=1', $this->id);
|
|
m('reim')->asynurl('asynrun','salaryff', array(
|
|
'id' => $this->id
|
|
));//异步通知给人员
|
|
}
|
|
|
|
public function todouser()
|
|
{
|
|
$this->push($this->rs['xuid'],'工资条','您['.$this->rs['month'].']月份薪资已发放,请注意查看对账。','薪资发放通知');
|
|
}
|
|
|
|
public function gongzifafang($sid)
|
|
{
|
|
$sarrid = explode(',',$sid);
|
|
foreach($sarrid as $id){
|
|
$this->loaddata($id, false);
|
|
if($this->rs['status']==1 && $this->rs['ispay']==0)$this->fafang();
|
|
}
|
|
}
|
|
|
|
//一键生成薪资
|
|
public function createdata($month)
|
|
{
|
|
$lmonth = c('date')->adddate($month.'-01','m',-1, 'Y-m');
|
|
$swer = m('admin')->monthuwhere($month);
|
|
$where = "`month`<'$month' and xuid in(select id from `[Q]userinfo` where 1=1 $swer) and `xuid` not in(select xuid from `[Q]".$this->mtable."` where `month`='$month')";
|
|
$addfes = 'base,postjt';//基本工资跟岗位工资
|
|
|
|
$adees = explode(',', $addfes);
|
|
$rows = $this->db->getall("select * from `[Q]hrsalary` where $where order by `month` desc");
|
|
$count = 0;
|
|
$xuarr = array();
|
|
foreach($rows as $k=>$rs){
|
|
unset($rs['id']);
|
|
$xuid = $rs['xuid'];
|
|
if(isset($xuarr[$xuid]))continue;
|
|
$count++;
|
|
$xuarr[$xuid] = 1;
|
|
$arr = array();
|
|
$arr1 = array(
|
|
'xuid' => $xuid,
|
|
'uname' => $rs['uname'],
|
|
'ranking' => $rs['ranking'],
|
|
'udeptname' => $rs['udeptname'],
|
|
'uid' => $this->adminid,
|
|
'optid' => $this->adminid,
|
|
'optname' => $this->adminname,
|
|
'optdt' => $this->rock->now,
|
|
'applydt' => $this->rock->date,
|
|
'status' => 0,
|
|
'isturn' => 0,
|
|
'month' => $month,
|
|
);
|
|
foreach($adees as $adees1)$arr[$adees1]=$rs[$adees1];
|
|
|
|
foreach($arr1 as $k1=>$v1)$arr[$k1]=$v1;
|
|
$arr['explain']='一键生成参考了'.$rs['month'].'月份的工资';
|
|
|
|
//读取固定值的
|
|
$farrr = $this->getfiearrs($xuid, $month);
|
|
foreach($farrr as $k1=>$rs1){
|
|
foreach($rs1['fieldsarr'] as $k2=>$rs2){
|
|
if($rs2['type']=='0')$arr[$rs2['fields']] = $rs2['devzhi'];
|
|
|
|
if($rs2['gongsi']=='last')$arr[$rs2['fields']] = $rs[$rs2['fields']]; //读取上月
|
|
}
|
|
}
|
|
|
|
$arr['jxdf'] = '0';
|
|
$arr['jiansr'] = '0';
|
|
$arr['otherzj'] = '0';
|
|
$arr['otherjs'] = '0';
|
|
|
|
/*
|
|
$money = 0;
|
|
|
|
|
|
foreach($adees as $fid){
|
|
$arr[$fid] = $rs[$fid];
|
|
$money += floatval($rs[$fid]);
|
|
}
|
|
$money -= floatval($rs['socials']);
|
|
$arr['money'] = $money;*/
|
|
|
|
$this->insert($arr);
|
|
}
|
|
return '成功生成'.$count.'条';
|
|
}
|
|
|
|
//导入数据的测试显示
|
|
public function flowdaorutestdata()
|
|
{
|
|
$barr = array(
|
|
'uname' => '貂蝉',
|
|
'month' => '[2017-08]',
|
|
'base' => '1700',
|
|
'skilljt' => '3500',
|
|
'telbt' => '0',
|
|
'travelbt' => '0',
|
|
'postjt' => '500',
|
|
'reward' => '0',
|
|
'jiabans' => '0',
|
|
|
|
'punish' => '0', //处罚
|
|
'socials' => '0',
|
|
'taxes' => '0',
|
|
'money' => '5700',
|
|
'explain' => '本月薪资',
|
|
'isturn' => '是',
|
|
'status' => '是',
|
|
|
|
);
|
|
$barr1 = array(
|
|
'uname' => '大乔',
|
|
'month' => '[2017-08]',
|
|
'base' => '1700',
|
|
'skilljt' => '3000',
|
|
'telbt' => '0',
|
|
'travelbt' => '0',
|
|
'postjt' => '500',
|
|
'reward' => '0',
|
|
'jiabans' => '0',
|
|
|
|
'explain' => '本月薪资',
|
|
|
|
'punish' => '0', //处罚
|
|
'socials' => '0',
|
|
'taxes' => '0',
|
|
'money' => '5200',
|
|
'isturn' => '是',
|
|
'status' => '是',
|
|
|
|
);
|
|
$barr2 = array(
|
|
'uname' => '小乔',
|
|
'month' => '[2017-08]',
|
|
'base' => '1700',
|
|
'skilljt' => '2500',
|
|
'telbt' => '0',
|
|
'travelbt' => '0',
|
|
'postjt' => '500',
|
|
'reward' => '0',
|
|
'jiabans' => '0',
|
|
|
|
'explain' => '导入',
|
|
|
|
'punish' => '5', //处罚
|
|
'socials' => '0',
|
|
'taxes' => '0',
|
|
'money' => '4695',
|
|
'isturn' => '是',
|
|
'status' => '是',
|
|
|
|
);
|
|
return array($barr,$barr1,$barr2);
|
|
}
|
|
|
|
//导入之前判断
|
|
public function flowdaorubefore($rows, &$errdata)
|
|
{
|
|
$inarr = array();
|
|
$uarra = array();
|
|
foreach($rows as $k=>$rs){
|
|
$name = $rs['uname'];
|
|
|
|
$month = str_replace('[','', $rs['month']);
|
|
$month = substr(str_replace(']','', $month),0,7);
|
|
|
|
$arr = $rs;
|
|
$urs = $this->adminmodel->getone("`name`='$name'");
|
|
if(!$urs){
|
|
$errdata[$rs['drxu']] = '('.$name.')用户不存在';
|
|
continue;
|
|
}
|
|
|
|
$to = $this->rows("`xuid`='".$urs['id']."' and `month`='$month'");
|
|
if($to>0){
|
|
$errdata[$rs['drxu']] = '('.$name.'的'.$month.')已经存在了';
|
|
continue;//已经存在了
|
|
}
|
|
|
|
$arr['month'] = $month;
|
|
$arr['xuid'] = $urs['id'];
|
|
$arr['udeptname'] = $urs['deptname'];
|
|
$arr['ranking'] = $urs['ranking'];
|
|
|
|
$arr['isturn'] = (arrvalue($arr,'isturn')=='是') ? 1 : 0;
|
|
$arr['status'] = (arrvalue($arr,'status')=='是') ? 1 : 0;
|
|
$arr['ispay'] = (arrvalue($arr,'ispay')=='是') ? 1 : 0;
|
|
|
|
if($arr['status']==1)$arr['isturn'] = 1;
|
|
|
|
$inarr[] = $arr;
|
|
}
|
|
|
|
return $inarr;
|
|
}
|
|
|
|
//导入后处理,未审核需要提交审核
|
|
public function flowdaoruafter($drdata=array())
|
|
{
|
|
foreach($drdata as $k=>$rs){
|
|
//
|
|
//if($rs['status']==0 && $rs['isturn']==1){
|
|
// $id = $rs['id'];
|
|
// $this->loaddata($id, false);
|
|
// $this->submit('提交');
|
|
//}
|
|
}
|
|
}
|
|
|
|
//读取薪资模版上的
|
|
private $pipeibarr = array();
|
|
public function getfiearrs($uid, $month, $bo=true)
|
|
{
|
|
if($this->pipeibarr && $bo)return $this->pipeibarr;
|
|
$month= substr($month, 0, 7);
|
|
$rows = m('hrsalarm')->getall("`status`=1 and `startdt`<='$month' and `enddt`>='$month'",'*','`sort`');
|
|
$rowa = array();
|
|
foreach($rows as $k=>$rs){
|
|
$rs['xuhao'] = $k+1;
|
|
$rowa[$rs['atype']][] = $rs;
|
|
}
|
|
$kqob = m('kaoqin');
|
|
$dbs = m('hrsalars');
|
|
$garr = array();
|
|
foreach($rowa as $klx=>$carr){
|
|
$xu = $kqob->getpipeimid($uid, $carr, 'xuhao',0);
|
|
if($xu>0){
|
|
$nrsaa = $rows[$xu-1];
|
|
$nrsaa['fieldsarr'] = $dbs->getall('mid='.$nrsaa['id'].'','*','`sort`');
|
|
$garr[] = $nrsaa;
|
|
}
|
|
}
|
|
|
|
if($bo)$this->pipeibarr = $garr; //最后匹配到的模版
|
|
|
|
//echo $xu;
|
|
return $garr;
|
|
}
|
|
|
|
public function flowgetfields($lx)
|
|
{
|
|
$farr = $this->flowfieldarr($this->fieldsarra, 3);
|
|
$barr = array();
|
|
foreach($farr as $k=>$rs){
|
|
if(isset($rs['iszs']) && $rs['iszs']==2)$barr[$rs['fields']]=$rs['name'];
|
|
}
|
|
return $barr;
|
|
}
|
|
|
|
//先运行这个$lx=0,1移动端,2保存,3展示
|
|
public function flowfieldarr($farr, $lx)
|
|
{
|
|
$mid = (int)$this->rock->get('mid','0');
|
|
$demonth = c('date')->adddate($this->rock->date,'m',-1,'Y-m');
|
|
$dexuid = $this->adminid;
|
|
if($mid>0 && $mrs=$this->getone($mid)){
|
|
$demonth = $mrs['month'];
|
|
$dexuid = $mrs['xuid'];
|
|
}
|
|
|
|
$month= $this->rock->post('month', $demonth);
|
|
$xuid = (int)$this->rock->post('xuid', $dexuid);
|
|
|
|
$cfarr= $this->getfiearrs($xuid, $month);
|
|
$fnar = array();
|
|
foreach($cfarr as $k=>$rs){
|
|
foreach($rs['fieldsarr'] as $k1=>$rs1)$fnar[$rs1['fields']]=$rs1;
|
|
}
|
|
$urs = $this->adminmodel->getone($xuid);
|
|
|
|
foreach($farr as $k=>$rs){
|
|
$farr[$k]['suantype']=-1;
|
|
$fid = $rs['fields'];
|
|
if(isset($fnar[$fid])){
|
|
$nfrs = $fnar[$fid];
|
|
if($nfrs['gongsi']=='last')$nfrs['gongsi']='';
|
|
$farr[$k]['dev'] = $nfrs['devzhi'];
|
|
$farr[$k]['gongsi'] = $nfrs['gongsi']; //公式
|
|
$farr[$k]['islu'] = 1;
|
|
$farr[$k]['iszs'] = 2;
|
|
$farr[$k]['suantype']= $nfrs['type'];
|
|
}
|
|
if($fid=='month'){
|
|
$farr[$k]['dev'] = $month;
|
|
}
|
|
if($fid=='uname'){
|
|
$farr[$k]['dev'] = ''.$urs['name'].'|'.$xuid.'';
|
|
}
|
|
if($fid=='udeptname'){
|
|
$farr[$k]['dev'] = $urs['deptname'];
|
|
}
|
|
if($fid=='ranking'){
|
|
$farr[$k]['dev'] = $urs['ranking'];
|
|
}
|
|
if($fid=='gonghao'){
|
|
$farr[$k]['dev'] = $urs['num'];
|
|
}
|
|
}
|
|
|
|
return $farr;
|
|
}
|
|
|
|
//在运行这个,模版处理
|
|
public function flowinputtpl($cont, $lx)
|
|
{
|
|
//pc
|
|
if($lx==0){
|
|
$cfarr = $this->pipeibarr;
|
|
$str = '';
|
|
foreach($cfarr as $k=>$rs){
|
|
$carr = $rs['fieldsarr'];
|
|
if(isempt($rs['title']))$rs['title']=$rs['atype'];
|
|
$str.='<div><br><strong>'.$rs['title'].'</strong></div>';
|
|
if(count($carr)%2!=0)$carr[]=array(
|
|
'name' => '',
|
|
'fields' => '',
|
|
);
|
|
$str.='<table width="100%" border="0" class="ke-zeroborder">';
|
|
$str.='<tr>';
|
|
foreach($carr as $k1=>$rs1){
|
|
$str.='<td align="right" class="ys1" width="15%">'.$rs1['name'].'</td>';
|
|
$str.='<td class="ys2" width="35%">{'.$rs1['fields'].'}</td>';
|
|
|
|
if(($k1+1)%2==0)$str.='</tr><tr>';
|
|
}
|
|
$str.='</tr>';
|
|
$str.='</table>';
|
|
}
|
|
$cont = str_replace('{autotpl}', $str, $cont);
|
|
}
|
|
return $cont;
|
|
}
|
|
|
|
public function flowviewtpl($cont, $lx)
|
|
{
|
|
$this->getfiearrs($this->rs['xuid'], $this->rs['month']);
|
|
return $this->flowinputtpl($cont, $lx);
|
|
}
|
|
} |