123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <?php
- namespace app\cxinv\controller;
- use app\cxinv\model\InvoiceInfo;
- use app\user\model\Business;
- use app\user\model\Headquarters;
- use think\App;
- use think\facade\Validate;
- class Invoice extends Base{
- public function __construct(App $app) {
- parent::__construct($app);
- $this->model = new \app\cxinv\model\Invoice();
- }
- public function List(){
- $param= $this->request->param(["start"=>"","end"=>"","supplierNo"=>"","companyNo"=>"","status"=>"",
- "invoice_number"=>"","invoice_type"=>"","page"=>1,"size"=>15,"apply_id"=>""],"post","trim");
- $where=[];
- $whereOr=[];
- if($param['start']!=='') $where[]=['createTime','>=',startTime($param['start'])];
- if($param['end']!=='') $where[]=['createTime','<=',endTime($param['end'])];
- if($param['supplierNo']!=='') $where[]=['supplierNo','like','%'.$param['supplierNo'].'%'];
- if($param['companyNo']!=='') $where[]=['companyNo','like','%'.$param['companyNo'].'%'];
- if($param['status']!=='') $where[]=['status','=',$param['status']];
- if($param['invoice_number']!=='') $where[]=['invoice_number','like','%'.$param['invoice_number'].'%'];
- if($param['invoice_type']!=='') $where[]=['invoice_type','=',$param['invoice_type']];
- if($param['apply_id']!=='') $where[]=['apply_id','=',$param['apply_id']];
- if($this->level!=1) {
- if($param['supplierNo']!==''||$param['companyNo']!==''){
- $whereOr[]=['apply_id','=', $this->uid];
- if($param['status']!=='') $whereOr[]=['status','=', $param['status']];
- if($param['start']!=='') $whereOr[]=['createTime','>=',startTime($param['start'])];
- if($param['end']!=='') $whereOr[]=['createTime','<=',endTime($param['end'])];
- if($param['invoice_number']!=='') $whereOr[]=['invoice_number','like','%'.$param['invoice_number'].'%'];
- if($param['invoice_type']!=='') $whereOr[]=['invoice_type','=',$param['invoice_type']];
- }
- }
- $list=$this->model->where($where)->whereOr(function($query)use($whereOr){
- $query->where($whereOr);
- })->order('id desc')->paginate(['page'=>$param['page'],'list_rows'=>$param['size']]);
- return success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
- }
- public function create(){
- $param= $this->request->param(["list"=>[]],"post","trim");
- if (!is_array($param['list'])) return error("请传入正确参数");
- $valid = Validate::rule([
- "invoice_code|发票代码"=>"max:255",
- "invoice_number|发票号码"=>"require|max:255|unique:app\cxinv\model\Invoice,invoice_number",
- "invoice_type|发票类型"=>"require|in:".implode(",",array_keys(\app\cxinv\model\Invoice::$invoiceType)),
- "invoice_total|发票税前金额"=>"float",
- "open_date|开票日期"=>"require|date|dateFormat:Y-m-d",
- "invoice_subtotal|发票税后金额"=>"float",
- "check_code|校验码"=>"max:255"
- ]);
- $number= array_column($param['list'],'invoice_number');
- if (count($number)!=count(array_unique($number))) return error("发票号码重复");
- foreach ($param['list'] as $k=>$v){
- if(!$valid->check($v)) return error($valid->getError());
- validate_invoice_info($v,$return);
- if($return['code']!=0) return error($v['invoice_number'].":".$return['message']);
- $param['list'][$k]['InvCode']=makeNo("FP",str_pad($k,4,"0",STR_PAD_RIGHT));
- $param['list'][$k]['apply_id']=$this->uid;
- $param['list'][$k]['apply_name']=$this->uname;
- }
- $this->model->saveAll($param['list']);
- return success("添加成功");
- }
- //0待验证 1待确认公司信息 2 待关联数据 3 关联中 4 关联完成
- public function save(){
- $param= $this->request->param([
- "id"=>"",
- "invoice_code"=>"",
- "invoice_number"=>"",
- "invoice_type"=>"",
- "invoice_total"=>"",
- "open_date"=>"",
- "invoice_subtotal"=>"",
- "check_code"=>"",
- "companyNo"=>"",
- "status"=>0,
- "supplierNo"=>""],"post","trim");
- $valide=Validate::rule([
- "id|发票编号id"=>"require|max:255",
- "invoice_code|发票代码"=>"requireIf:status,0|max:255",
- "invoice_number|发票号码"=>"requireIf:status,0|max:255|unique:app\cxinv\model\Invoice,invoice_number",
- "invoice_type|发票类型"=>"requireIf:status,0|in:".implode(",",array_keys(\app\cxinv\model\Invoice::$invoiceType)),
- "invoice_total|发票税前金额"=>"float",
- "open_date|开票日期"=>"requireIf:status,0|date|dateFormat:Y-m-d",
- "invoice_subtotal|发票税后金额"=>"float",
- "check_code|校验码"=>"max:255",
- "companyNo|业务公司"=>"requireIf:status,1|max:255",
- "supplierNo|供应商公司"=>"requireIf:status,1|max:255"
- ]);
- $invoice=$this->model->where("id",$param['id'])->findOrEmpty();
- if($invoice->isEmpty()) return error("发票编号不存在");
- $param['status'] = $invoice->status;
- if(!$valide->check($param)) return error($valide->getError());
- if ($invoice->status>1) return error("发票当前状态无法修改");
- if ($param['status']==0){
- $invoice->invoice_code=$param['invoice_code'];
- $invoice->invoice_number=$param['invoice_number'];
- $invoice->invoice_type=$param['invoice_type'];
- $invoice->invoice_total=$param['invoice_total'];
- $invoice->open_date=$param['open_date'];
- $invoice->invoice_subtotal=$param['invoice_subtotal'];
- $invoice->check_code=$param['check_code'];
- }
- if($param['status']==1){
- $invoice->companyNo=$param['companyNo'];
- $invoice->companyName=Business::where("companyNo",$param['companyNo'])->value("company","");
- $invoice->supplierNo=$param['supplierNo'];
- $invoice->supplierName=Headquarters::where("code",$param['supplierNo'])->value("name","");
- $invoice->status=2;
- }
- $invoice->save();
- return success("保存成功");
- }
- public function delete(){
- $param= $this->request->param(["InvCode"=>""],"post","trim");
- $valide=Validate::rule([
- "InvCode|发票编号"=>"require|max:255"
- ]);
- if(!$valide->check($param)) return error($valide->getError());
- $info=$this->model->where("InvCode",$param['InvCode'])->findOrEmpty();
- if($info->isEmpty()) return error("发票编号不存在");
- if(in_array($info->status,[3,4])) return error("发票状态不允许删除");
- $info->delete();
- return success("删除成功");
- }
- public function info(){
- $param= $this->request->param(["InvCode"=>""],"post","trim");
- $valide=Validate::rule([
- "InvCode|发票编号"=>"require|max:255"
- ]);
- if(!$valide->check($param)) return error($valide->getError());
- $info=$this->model->where("InvCode",$param['InvCode'])->findOrEmpty();
- if($info->isEmpty()) return error("发票编号不存在");
- $info['ticket'] = InvoiceInfo::where("hpNo",$param['InvCode'])->findOrEmpty();
- return success("获取成功",$info);
- }
- }
|