Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 12
CRAP
0.00% covered (danger)
0.00%
0 / 80
RejectedBillController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 12
1332.00
0.00% covered (danger)
0.00%
0 / 80
 index
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 create
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 store
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 apiGetRecent
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 6
 apiStore
0.00% covered (danger)
0.00%
0 / 1
42.00
0.00% covered (danger)
0.00%
0 / 14
 apiUpdate
0.00% covered (danger)
0.00%
0 / 1
30.00
0.00% covered (danger)
0.00%
0 / 13
 validator
0.00% covered (danger)
0.00%
0 / 1
42.00
0.00% covered (danger)
0.00%
0 / 16
 apiSetIsLoadedAll
0.00% covered (danger)
0.00%
0 / 1
42.00
0.00% covered (danger)
0.00%
0 / 13
 show
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 edit
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 9
 update
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 destroy
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 4
<?php
namespace App\Http\Controllers;
use App\Logistic;
use App\Owner;
use App\QualityLabel;
use App\Rejected;
use App\RejectedBill;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\View\View;
use Ramsey\Uuid\Uuid;
class RejectedBillController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        //
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return Response
     */
    public function create()
    {
        //
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param Request $request
     * @return Response
     */
    public function store(Request $request)
    {
        //
    }
    public function apiGetRecent()
    {
        if(!Gate::allows('退货管理-查询')){
            return ['success'=>'false','fail_info'=>'没有权限'];}
        $user=Auth::user();
        $rejectedBills = RejectedBill::query()->orderByDesc('id')->whereIn('id_owner',
            $user?$user->getPermittingOwnerIdsAttribute():[])->limit(20)->get();
        return ['success'=>'true','rejectedBills'=>$rejectedBills->toArray()];
    }
    public function apiStore(Request $request)
    {
        if(!Gate::allows('退货管理-录入')){
            return ['success'=>'false','fail_info'=>'没有权限'];
        }
        $softDeleted=RejectedBill::withTrashed()->where('logistic_number_return',$request->input('logistic_number_return'))->first();
        if($softDeleted&&$softDeleted->trashed()){
            $softDeleted->forceDelete();
        }
        if($request['is_loaded']=='null')$request['is_loaded']=null;
        $errorFields= $this->validator($request->all())->errors()->getMessages();
        if(!empty($errorFields)){
            return ['success'=>'false','error_fields'=>$errorFields,'fail_info'=>'fileds error'];
        }
        $rejectedBill=new RejectedBill($request->all());
        $rejectedBill['id_operator'] = Auth::user()['id'];
        $rejectedBill->save();
        $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
        return ['success'=>'true','id'=>$rejectedBill['id']];
    }
    public function apiUpdate(Request $request)
    {
        if(!Gate::allows('退货管理-编辑')){
            return ['success'=>'false','fail_info'=>'没有权限'];
        }
        if($request['is_loaded']=='null')$request['is_loaded']=null;
        $errorFields= $this->validator($request->all(),true)->errors()->getMessages();
        if(!empty($errorFields)){
            return ['success'=>'false','error_fields'=>$errorFields,'fail_info'=>'fileds error'];
        }
        $rejectedBill=RejectedBill::find($request->input('id'));
        $rejectedBill->fill($request->all());
        $rejectedBill->save();
        if($request->input('is_at_edit_page')==true){
            Session::put('rejected.index.isFromEditPage',true);
        }
        $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
        return ['success'=>'true'];
    }
    protected function validator(array $data,$isUpdate=false)
    {
        $logistic_number_return_unique='unique:rejected_bills,logistic_number_return';
        if($isUpdate)
            $logistic_number_return_unique='';
        $mobileShouldBeRequired = 'required';
        $logistic=Logistic::find($data['id_logistic_return']);
        if($logistic){if(strstr($logistic['name'],'顺丰')){
            $mobileShouldBeRequired = 'nullable';
        }}
        $mobileDigits = '';
        if($data['mobile_sender']&&$data['mobile_sender'][0]=='1'){
            $mobileDigits = 'digits:11';
        }
        return Validator::make($data, [
            'id_owner' => ['required', 'numeric', 'exists:owners,id'],
            'order_number' => ['nullable', 'string','max:60'],
            'sender' => ['nullable', 'max:50'],
            'mobile_sender' => [$mobileShouldBeRequired, 'max:20',$mobileDigits],
            'logistic_number' => ['nullable', 'max:60'],
            'logistic_number_return' => ['required','string', 'max:60', $logistic_number_return_unique],
            'id_logistic_return' => ['required', 'numeric', 'exists:logistics,id'],
            'fee_collected' => ['nullable','between:0,99999','numeric'],
            'is_loaded' => ['nullable','boolean'],
        ],[
            'mobile_sender.digits'=>'如果是手机则必须为11位',
        ],[
            'id_owner'=>'客户名称',
            'order_number'=>'订单号',
            'sender'=>'寄件人',
            'mobile_sender'=>'寄件人手机',
            'logistic_number'=>'原单号',
            'logistic_number_return'=>'退回单号',
            'id_logistic_return'=>'物流公司',
            'fee_collected'=>'到付费用',
            'is_loaded'=>'是否入库',
        ]);
    }
    public function apiSetIsLoadedAll(Request $request)
    {
        if(!Gate::allows('退货管理-编辑')){ return redirect(url('/'));  }
        $ids=$request->input('ids')??'';
        $rejecteds=RejectedBill::whereIn('id',$ids)->get();
        $is_loaded = $request->input('is_loaded');
        switch ($is_loaded){
            case '0':$is_loaded=false;break;
            case '1':$is_loaded=true;break;
            case 'null':$is_loaded=null;break;
        }
        $rejecteds->each(function($rejected)use($is_loaded){
            $rejected['is_loaded']=$is_loaded;
            $re=$rejected->update();
            if (!$re){
                return ['success'=>'false','fail_info'=>"数据 {$rejected['id']} 更新失败"];
            }
        });
        return ['success'=>'true'];
    }
    /**
     * Display the specified resource.
     *
     * @param RejectedBill $rejectedBill
     * @return Response
     */
    public function show(RejectedBill $rejectedBill)
    {
        //
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param RejectedBill $rejectedBill
     * @param Request $request
     * @return Factory|RedirectResponse|Response|Redirector|View
     */
    public function edit(RejectedBill $rejectedBill,Request $request)
    {
        if(!Gate::allows('退货管理-编辑')){ return redirect(url('/'));  }
        $filterParams=$request->input('filterParams');
        Session::put('rejected.index.filterParams',$filterParams);
        $user=Auth::user();
        $owners=Owner::all()->whereIn('id',
            $user?$user->getPermittingOwnerIdsAttribute():[])->sortBy('name');
        $logistics=Logistic::all()->sortBy('name');
        $qualityLabels=QualityLabel::all()->sortBy('name');
        return view('rejected.edit',compact('owners','logistics','qualityLabels','rejectedBill'));
    }
    /**
     * Update the specified resource in storage.
     *
     * @param Request $request
     * @param RejectedBill $rejectedBill
     * @return Response
     */
    public function update(Request $request, RejectedBill $rejectedBill)
    {
        //
    }
    public function destroy(RejectedBill $rejectedBill)
    {
        if(!Gate::allows('退货管理-删除')){ return redirect(url('/'));}
        $re=$rejectedBill->delete();
        $this->log(__METHOD__,__FUNCTION__,$rejectedBill->toJson(),Auth::user()['id']);
        return ['success'=>$re];
    }
}