2025-02-27 09:55:33 +08:00

148 lines
5.6 KiB
PHP

<?php
namespace app\adminapi\controller\works\finance;
use app\adminapi\controller\BaseAdminController;
use app\common\model\auth\Admin;
use app\common\model\dept\Dept;
use think\facade\Db;
class IncomeController extends BaseAdminController
{
public function index(){
$params = $this->request->get(['start_time','end_time','status','page_no','page_size']);
$page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
$page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
$where = [];
if(!empty($params['start_time']) && !empty($params['end_time'])){
if(strtotime($params['end_time']) <= strtotime($params['start_time'])){
return $this->fail('结束时间不等小于开始时间');
}
$where[] = ['create_time','between',[strtotime($params['start_time']),strtotime($params['end_time'])]];
}
if(!empty($params['status'])){
$where[] = match ($params['status']){
'1'=> ['is_cash','=',0], //未到账
'2'=> ['is_cash','=',1], //部分到账
'3'=> [['is_cash','=',2]], //全部到账
};
}else{
$where[] = ['is_cash','in','0,1,2'];
}
$lists = Db::name('oa_invoice')->field('id,is_cash,enter_amount,enter_time,type,invoice_title,amount,invoice_type,admin_id,create_time,code,open_time,check_admin_ids,open_admin_id')->where('check_status',5)->where($where)
->page($page_no, $page_size)->order('id desc')->select()->each(function($data){
$admin = Admin::field('name,dept_id')->where('id',$data['admin_id'])->findOrEmpty();
$dept = Dept::where('id',$admin['dept_id'])->value('name');
$check_admin_users = Admin::where('id','in',$data['check_admin_ids'])->column('name');
$data['user_name'] = $admin['name'];
$data['dept_name'] = $dept ?? '';
$data['check_admin_users'] = !empty($check_admin_users) ? implode(',',$check_admin_users) : '';
$data['create_time'] = date('Y-m-d H:i:s',$data['create_time']);
$data['type_text'] = match ($data['type']){
1=>'企业',2=>'个人'
};
$data['invoice_type_text'] = match ($data['invoice_type']){
1=>'增值税专用发票',2=>'普通发票',3=>'专用发票'
};
$data['is_cash_text'] = match ($data['is_cash']){
0=>'未到账',1=>'部分到账',2=>'全部到账'
};
$data['open_time'] = !empty($data['open_time']) ? date('Y-m-d',$data['open_time']) : '';
$data['enter_time'] = !empty($data['enter_time']) ? date('Y-m-d H:i:s',$data['enter_time']) : '';
$data['open_admin_name'] = Admin::where('id',$data['open_admin_id'])?->value('name');
return $data;
})->toArray();
$count = Db::name('oa_invoice')->where($where)->where('check_status',5)->count();
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
}
public function add(){
$params = $this->request->post(['invoice_id','detail']);
if(empty($params['invoice_id']) || empty($params['detail'])){
return $this->fail('参数错误');
}
$invoice = Db::name('oa_invoice')->where('id',$params['invoice_id'])->find();
if(empty($invoice)){
return $this->fail('开票信息不存在');
}
if(!is_array($params['detail'])){
return $this->fail('到账记录数据格式错误');
}
$income_amount = 0;
$save_data = [];
foreach($params['detail'] as $k=>$v){
if(empty($v['enter_time']) || !strtotime($v['enter_time'])){
return $this->fail('到账记录第'.($k+1).'行到账日期为空');
}
if(empty($v['amount'])){
return $this->fail('到账记录第'.($k+1).'行到帐金额为空');
}
$income_amount += $v['amount'];
$save_data[] = [
'inid' => $params['invoice_id'],
'amount' => $v['amount'],
'admin_id' => $this->adminId,
'enter_time' => strtotime($v['enter_time']),
'remarks' => $v['remarks'] ?? '',
'create_time' => time(),
'status' => 1
];
}
if($income_amount > $invoice['amount']){
return $this->fail('到账金额大于发票金额,不允许保存');
}
Db::startTrans();
try {
Db::name('oa_invoice_income')->where('inid',$params['invoice_id'])->delete();
Db::name('oa_invoice_income')->insertAll($save_data);
Db::name('oa_invoice')->where('id',$params['invoice_id'])->update([
'enter_amount' => $income_amount,
'enter_time' => time(),
'is_cash' => $income_amount < $invoice['amount'] ? 1 : 2
]);
Db::commit();
return $this->success('ok');
} catch (\Exception $e) {
Db::rollback();
return $this->fail();
}
}
public function lists(){
$params = $this->request->get(['invoice_id']);
if(empty($params['invoice_id'])){
return $this->fail('参数错误');
}
$data = Db::name('oa_invoice_income')->where('inid',$params['invoice_id'])->order('create_time desc')->select()->each(function($data){
$data['enter_time'] = date('Y-m-d',$data['enter_time']);
$data['admin_name'] = Admin::where('id',$data['admin_id'])?->value('name');
return $data;
})->toArray();
return $this->data($data);
}
public function fdz(){
$params = $this->request->post(['invoice_id']);
if(empty($params['invoice_id'])){
return $this->fail('参数错误');
}
$invoice = Db::name('oa_invoice')->where('id',$params['invoice_id'])->find();
if(empty($invoice)){
return $this->fail('开票信息不存在');
}
Db::startTrans();
try {
Db::name('oa_invoice_income')->where('inid',$params['invoice_id'])->delete();
Db::name('oa_invoice')->where('id',$params['invoice_id'])->update([
'enter_amount' => 0,
'enter_time' => 0,
'is_cash' => 0
]);
Db::commit();
return $this->success('ok');
} catch (\Exception $e) {
Db::rollback();
return $this->fail();
}
}
}