You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
simple-yewu/frontend/controllers/PersonnelController.php

484 lines
16 KiB

<?php
namespace frontend\controllers;
use common\libs\MyLib;
use common\models\GroupT;
use common\models\PayT;
use common\models\UserT;
use common\models\WorkDayT;
use common\models\UserLogT;
use Yii;
use yii\data\Pagination;
use yii\web\Response;
use yii\web\UploadedFile;
use common\models\CompanyT;
class PersonnelController extends \frontend\controllers\UserBaseController
{
public $my = null;
public $enableCsrfValidation = false;
public $layout = 'blue-main';
public function init()
{
parent::init();
$cookie = Yii::$app->request->cookies;
$user_id = MyLib::encrypt($cookie->get('aid'),'DECODE');
if($user_id != 0)
{
$this->my = UserT::findOne(['id'=>$user_id]);
} else {
Yii::$app->response->redirect('/common/login')->send();
exit;
}
}
/**
* 人事工资列表
* @return string
*/
public function actionPayList() {
$group_items = GroupT::getTree();
return $this->render('pay-list',[
'group_items' => $group_items
]);
}
public function actionPayListJson()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->request;
$username = $request->get('username');
$name = $request->get('name');
$pay_date = $request->get('pay_date',date('Y-m'));
$group_id = $request->get('group_id',0);
$is_leave = $request->get('is_leave',0);
$status_id = $request->get('status_id',0);
$offset = $request->get('offset', 0);
$limit = $request->get('limit', 10);
$query = UserT::find()
->leftJoin('pay_t','pay_t.user_id=user_t.id')
->where('user_t.group_id>0 and is_delete=0');
if($username != '') {
$query->andWhere('user_t.username like "'.$username.'"');
}
if($name != '') {
$query->andWhere('user_t.name like "'.$name.'"');
}
if($is_leave != ''){
$query->andWhere(['user_t.is_leave' => $is_leave]);
}
if($group_id > 0) {
$query->andWhere('user_t.group_id='.$group_id);
}
if($status_id > 0) {
$query->andWhere('pay_t.status_id='.$status_id);
}
$query->orderBy('user_t.username ASC,user_t.id ASC');
$total = $query->count();
$query->offset($offset)->limit($limit);
$items = $query->all();
$data = [];
$data['total'] = $total;
$data['rows'] = [];
foreach($items as $item) {
$row = $item->toArray();
$row['pay_date'] = $pay_date;
$row['group_name'] = $item->group ? $item->group->path : '';
$row['is_leave'] = $item->is_leave ? '已离职':'';
$pay_info = $item->getPay($pay_date);
$row['status_name'] = $pay_info ? $pay_info->getStatus($pay_info->status_id) : '';
$row['real_pay'] = $pay_info ? $pay_info->base_real_pay : 0 ;
$data['rows'][] = $row;
}
return $data;
}
/**
* 人事工资-详情
* @return string
*/
public function actionPayInfo()
{
$request = Yii::$app->request;
$user_id = $request->get('id',0);
$pay_date = $request->get('pay_date',date('Y-m'));
$back_params = $request->get('back_params');
$user_info = UserT::findOne(['id'=>$user_id]);
$work_day = WorkDayT::findOne(['date' => $pay_date]);
$group_info = $user_info->group;
if($user_info->is_double == 1) {
$day_num = $work_day ? $work_day->double_break : '0';
}else{
$day_num = $work_day ? $work_day->single_break : '0';
}
if($day_num == '0'){
echo '请填写工作天数!';
echo '[<a href="/personnel/pay-list?'.$back_params.'">返回</a>]';
die;
}
$pay_info = PayT::findOne(['user_id'=>$user_id,'pay_date'=>$pay_date]);
if($pay_info){
$try_pay = $user_info->worktype?round(($pay_info->try_pay) / $day_num, 2):'0';
$true_pay = $user_info->worktype?round(($pay_info->formal_pay) / $day_num, 2):'0';
}else{
$try_pay = $user_info->worktype?round(($user_info->try_pay) / $day_num, 2):'0';
$true_pay = $user_info->worktype?round(($group_info?($group_info->base_pay + $group_info->job_pay + $group_info->station_pay + $user_info->ext_pay):$user_info->ext_pay) / $day_num, 2):'0';
}
if(!$pay_info) {
$pay_info = new PayT();
$pay_info->user_id = $user_id;
$pay_info->pay_date = $pay_date;
$pay_info->formal_pay = ($group_info?($group_info->base_pay + $group_info->job_pay + $group_info->station_pay + $user_info->ext_pay):$user_info->ext_pay);
$pay_info->try_pay = floatval($user_info->try_pay);
$last_month = date('Y-m', strtotime($pay_date.'last month'));
//获取上个月的提成计算
$formulae = PayT::findOne(['user_id' => $user_id, 'pay_date' => $last_month]);
if($formulae)
$pay_info->formulae = $formulae->formulae;
else
$pay_info->formulae = '';
if($group_info) {
$pay_info->should_pay =floatval($group_info->base_pay + $group_info->job_pay + $group_info->station_pay + $user_info->ext_pay);
} else {
$pay_info->should_pay = floatval($user_info->ext_pay);
}
if(!$pay_info->save()) {
var_dump($pay_info->errors);
exit;
}
$pay_info = PayT::findOne(['user_id'=>$user_id,'pay_date'=>$pay_date]);
// die;
}
return $this->render('pay-info',[
'pay_date' => $pay_date,
'user_info' => $user_info,
'group_info' => $group_info,
'pay_info' => $pay_info,
'back_params' => $back_params,
'try_pay' => $try_pay,
'true_pay' => $true_pay
]);
}
/**
* 人事工资-保存
* @return array
*/
public function actionPaySave()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->request;
$result = array();
$result['success'] = false;
$result['msg'] = '保存失败';
if($request->isPost) {
$id = $request->post('id',0);
$assessment_pay = $request->post('assessment_pay',0);
$goodjob_pay = $request->post('goodjob_pay',0);
$pass_pay = $request->post('pass_pay',0);
$incentive_pay = $request->post('incentive_pay',0);
$bonus_pay = $request->post('bonus_pay',0);
$extjob_pay = $request->post('extjob_pay',0);
$group_pay = $request->post('group_pay',0);
$grants_pay = $request->post('grants_pay',0);
$late_pay = $request->post('late_pay',0);
$leave_pay = $request->post('leave_pay',0);
$sick_pay = $request->post('sick_pay',0);
$social_pay = $request->post('social_pay',0);
$fine_pay = $request->post('fine_pay',0);
$electricity_pay = $request->post('electricity_pay',0);
$deposit = $request->post('deposit',0);
$public_pay = $request->post('public_pay',0);
$extjob_days = $request->post('extjob_days',0);
$attendance_days = $request->post('attendance_days');
$try_attendance_days = $request->post('try_attendance_days');
$try_extjob_pay = $request->post('try_extjob_pay');
$give_social_pay = $request->post('give_social_pay');
$full_attendance_pay = $request->post('full_attendance_pay');
$pass_time_pay = $request->post('pass_time_pay');
// $formulae = $request->post('formulae');
$get_full_attendance_pay = $request->post('get_full_attendance_pay', 0);
$get_pass_time_pay = $request->post('get_pass_time_pay', 0);
$try_pay = $request->post('try_pay', 0);
$formal_pay = $request->post('formal_pay', 0);
$calls = $request->post('calls', 0);
$bus = $request->post('bus', 0);
$bonus = $request->post('bonus', 0);
$turnover = $request->post('turnover', 0);
$tax = $request->post('tax', 0);
$pay_info = PayT::findOne(['id'=>$id]);
if($pay_info) {
$pay_info->assessment_pay = $assessment_pay;
$pay_info->goodjob_pay = $goodjob_pay;
$pay_info->pass_pay = $pass_pay;
$pay_info->incentive_pay = $incentive_pay;
$pay_info->bonus_pay = $bonus_pay;
$pay_info->extjob_pay = $extjob_pay;
$pay_info->group_pay = $group_pay;
$pay_info->grants_pay = $grants_pay;
$pay_info->late_pay = $late_pay;
$pay_info->leave_pay = $leave_pay;
$pay_info->sick_pay = $sick_pay;
$pay_info->social_pay = $social_pay;
$pay_info->fine_pay = $fine_pay;
$pay_info->electricity_pay = $electricity_pay;
$pay_info->deposit = $deposit;
$pay_info->public_pay = $public_pay;
$pay_info->extjob_days = $extjob_days;
$pay_info->attendance_days = $attendance_days;
$pay_info->try_attendance_days = $try_attendance_days;
$pay_info->try_extjob_pay = $try_extjob_pay;
$pay_info->give_social_pay = $give_social_pay;
$pay_info->full_attendance_pay = $full_attendance_pay;
$pay_info->pass_time_pay = $pass_time_pay;
// $pay_info->formulae = $formulae;
$pay_info->get_full_attendance_pay = $get_full_attendance_pay;
$pay_info->get_pass_time_pay = $get_pass_time_pay;
$pay_info->try_pay = $try_pay;
$pay_info->formal_pay = $formal_pay;
$pay_info->calls = $calls;
$pay_info->bus = $bus;
$pay_info->bonus = $bonus;
$pay_info->turnover = $turnover;
$pay_info->tax = $tax;
$pay_info->renshi_status_id = 1;
$pay_info->status_id = $pay_info->chuna_status_id + 1;
$pay_info->save();
$pay_info->calPay();
$content = '人事:'.$this->my->showName.'提交'.$pay_info->pay_date.'工资';
$this->addUserLog($pay_info->id, $content);
$result['success'] = true;
$result['msg'] = '保存成功';
}
}
return $result;
}
/**
* @return array
* 获取表格数据
* xzz
* 2017-12-29
*/
public function actionImport()
{
set_time_limit(0);
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->request;
$result = [
'success' => false,
'msg' => '操作失败'
];
$time = $request->post('time');
$file_url = $request->post('urlfile');
if($time == '' || $file_url == ''){
$result['msg'] = '时间和文件为必填项!';
return $result;
}
$web_path = Yii::$app->getBasePath().'/../frontend/web';
$file_path = realpath($web_path.$file_url);
//实例化Excel表格
$PHPReader = new \PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($file_path)){
$PHPReader = new \PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($file_path)){
return $result;
}
}
$PHPExcel = $PHPReader->load($file_path);
$currentSheet = $PHPExcel->getSheet(0);
$data = $currentSheet->toArray('', true, true);
$ii = count($data);
for($i = 2; $i < $ii; $i++){
if(empty($data[$i][1]) || empty($data[$i][2]))
return $result;
$user_info = UserT::findOne(['username'=>$data[$i][1],'name'=>$data[$i][2]]);
if($user_info->id < 0)
return $result;
$pay_info = PayT::findOne(['user_id' => $user_info->id, 'pay_date' => $time]);
if(!$pay_info){
$pay_info = new PayT();
$pay_info->user_id = $user_info->id;
$pay_info->pay_date = $time;
$group_info = $user_info->group;
if($group_info) {
$pay_info->should_pay =floatval($group_info->base_pay + $group_info->job_pay + $group_info->station_pay + $user_info->ext_pay);
} else {
$pay_info->should_pay = floatval($user_info->ext_pay);
}
}
$pay_info->try_attendance_days = round(trim($data[$i][3]), 1);
$pay_info->try_extjob_pay = round(trim($data[$i][4]), 2);
$pay_info->attendance_days = round(trim($data[$i][5]), 1);
$pay_info->extjob_pay = round(trim($data[$i][6]), 2);
$pay_info->give_social_pay = round(trim($data[$i][7]), 2);
$pay_info->late_pay = round(trim($data[$i][8]), 2);
$pay_info->leave_pay = round(trim($data[$i][9]), 2);
$pay_info->sick_pay = round(trim($data[$i][10]), 2);
$pay_info->social_pay = round(trim($data[$i][11]), 2);
$pay_info->electricity_pay = round(trim($data[$i][12]), 2);
$pay_info->full_attendance_pay = $data[$i][13];
$pay_info->pass_time_pay = $data[$i][14];
$pay_info->formulae = PayT::findOne(['user_id' => $user_info->id, 'pay_date' => '2017-11'])->formulae;
$pay_info->save();
$pay_info->calPay();
}
$result = [
'success' => true,
'msg' => '操作成功'
];
return $result;
}
/**
* @return string
* 上传文件
* xzz
* 2017-12-29
*/
public function actionUpload()
{
Yii::$app->response->format = Response::FORMAT_RAW;
$result = [
'success' => false
];
$file = UploadedFile::getInstanceByName('file');
if(!empty($file)){
$name = md5(rand(100, 200));
$ext = $file->extension;
$filename = $name.'.'.$ext;
$destination = '/upload';
$web_path = Yii::$app->getBasePath().'/../frontend/web';
if(!is_dir($web_path.$destination))
mkdir($web_path.$destination);
$destination .= '/gz';
if(!is_dir($web_path.$destination))
mkdir($web_path.$destination);
$destination .= '/'.date('Ym');
if(!is_dir($web_path.$destination))
mkdir($web_path.$destination);
$destination .= '/'.$filename;
$file->saveAs($web_path.$destination);
$row['name'] = $file->name;
$row['size'] = $file->size;
$row['url'] = $destination;
$row['thumbnailUrl'] = $destination;
$row['deleteUrl'] = '';
$row['deleteType'] = 'DELETE';
$result['success'] = true;
$result['files'][] = $row;
return json_encode($result);
}
$result['files'][0]['error'] = '上传文件失败';
return json_encode($result);
}
public function actionAjaxHistoryIndex()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->request;
$pay_id = $request->get('pay_id');
$page = $request->get('page',1);
$result = array();
$result['success'] = false;
$result['msg'] = '读取失败';
$query = UserLogT::find()
->where(['pay_id'=>$pay_id])
// ->andWhere('op_time>='.strtotime("-6 months"))
->orderBy('id DESC');
$total = $query->count();
$pagination = new Pagination(['totalCount' => $total,'pageSize'=>20]);
$pagination->setPage($page-1);
$query = $query->offset($pagination->offset)->limit($pagination->limit);
$items = $query->all();
$page_info = MyLib::getAjaxPageInfo($pagination,'car_history_list');
$html = $this->renderPartial('ajax-history-index',[
'pay_id' => $pay_id,
'items' => $items,
'page' => $page,
'page_info' => $page_info
]);
$result['success'] = true;
$result['msg'] = '读取成功';
$result['html'] = $html;
return $result;
}
}