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 / 15
CRAP
0.00% covered (danger)
0.00%
0 / 116
RejectedBillItemController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 15
1640.00
0.00% covered (danger)
0.00%
0 / 116
 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
 apiStore
0.00% covered (danger)
0.00%
0 / 1
30.00
0.00% covered (danger)
0.00%
0 / 18
 apiUpdate
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 13
 collectionsToPackConfirm
0.00% covered (danger)
0.00%
0 / 1
30.00
0.00% covered (danger)
0.00%
0 / 26
 apiPackConfirm
0.00% covered (danger)
0.00%
0 / 1
72.00
0.00% covered (danger)
0.00%
0 / 26
 apiPackDestroy
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 9
 validator
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 4
 apiGet
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 6
 apiDelete
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 7
 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
2.00
0.00% covered (danger)
0.00%
0 / 1
 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
2.00
0.00% covered (danger)
0.00%
0 / 1
<?php
namespace App\Http\Controllers;
use App\Commodity;
use App\Owner;
use App\Rejected;
use App\RejectedBill;
use App\RejectedBillItem;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Validator;
use Zttp\Zttp;
class RejectedBillItemController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }
    public function apiStore(Request $request)
    {
        if(!Gate::allows('退货管理-录入')){
            return ['success'=>'false','failure_info'=>'没有权限'];
        }
        $errorFields= $this->validator($request->all())->errors()->getMessages();
        if(!empty($errorFields)){
            return ['success'=>'false','error_fields'=>$errorFields,'failure_info'=>'fileds error'];
        }
        $rejectedBillItem=RejectedBillItem::where('barcode_goods',$request->input('barcode_goods'))
            ->where('id_quality_label',$request->input('id_quality_label'))
            ->where('id_rejected_bill',$request->input('id_rejected_bill'))->first();
        if($rejectedBillItem){
            $rejectedBillItem['amount']+=$request->input('amount');
            if($request->input('name_goods')){
                $rejectedBillItem['name_goods']=$request->input('name_goods');
            }
            $rejectedBillItem->update();
        }else{
            $rejectedBillItem=new RejectedBillItem($request->all());
            $rejectedBillItem->save();
        }
        $rejectedBillItem->injectCommodityName();
        $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
        return ['success'=>'true','id'=>$rejectedBillItem['id']];
    }
    public function apiUpdate(Request $request)
    {
        if(!Gate::allows('退货管理-编辑')){
            return ['success'=>'false','failure_info'=>'没有权限'];
        }
        $errorFields= $this->validator($request->all())->errors()->getMessages();
        if(!empty($errorFields)){
            return ['success'=>'false','error_fields'=>$errorFields,'failure_info'=>'fileds error'];
        }
        $rejectedBillItem=RejectedBillItem::where('id',$request->input('id'))->first();
        if(!$rejectedBillItem){
            return ['success'=>'false','failure_info'=>'数据库没有相应记录,请刷新后重加'];
        }else{
            $rejectedBillItem->fill($request->all());
            $rejectedBillItem->update();
            $rejectedBillItem->injectCommodityName();
            $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
            return ['success'=>'true','id'=>$rejectedBillItem['id']];
        }
    }
    public function collectionsToPackConfirm(Collection $rejectedBillItems)
    {
        $ids=[];
        $rejectedBillItems->each(function ($item)use(&$ids){
            $ids[]=$item->id;
        });
        if(!$ids)return ['success'=>'false','fail_info'=>'没有内容'];
        $collections=new Collection($ids);
        $i=0;
        $collections->each(function ($id)use(&$i,$ids){
            $rejectedBillItems=RejectedBillItem::whereIn('id', [$ids[$i]]);
            $rejectedBillItems->each(function(RejectedBillItem $rejectedBillItem)use(&$havingFail){
                $rejectedBill=RejectedBill::find($rejectedBillItem['id_rejected_bill']);
                $owner = Owner::find($rejectedBill['id_owner']);
                if(strstr($owner->name??'','笕尚')){
                    $rejected=new Rejected();
                    $rejected->fill($rejectedBill->toArray());
                    $rejected->fill($rejectedBillItem->toArray());
                    $rejectedJianshang=new api\jianshang\RejectedController();
                    $sended=$rejectedJianshang->sendRejected($rejected);
                    if(!$sended){
                        echo '<h1>数据发送给笕尚失败,请通知IT相关负责人</h1>';
                        $this->log(__METHOD__,'error','数据发送给笕尚失败');
                        $havingFail++;
                        return false;
                    }
                }
            });
            $i++;
            if($i%30==0)
                sleep(1);
        });
        return 'yes'.$i;
    }
    public function apiPackConfirm(Request $request)
    {
        if(!Gate::allows('退货管理-录入')){
            return ['success'=>'false','failure_info'=>'没有权限'];
        }
        $ids=$request->input('ids');
        if(!$ids)return ['success'=>'false','fail_info'=>'没有内容'];
        $rejectedBillItems=RejectedBillItem::whereIn('id', $ids);
        //TODO: 发送给笕尚,应该单独抽出然后做出可配置流程
        $havingFail=0;
        if(!config('api.API_FAKING'))
            $rejectedBillItems->each(function(RejectedBillItem $rejectedBillItem)use(&$havingFail){
                $rejectedBill=RejectedBill::find($rejectedBillItem['id_rejected_bill']);
                if($rejectedBill['is_loaded']){
                    return false;
                }
                $owner = Owner::find($rejectedBill['id_owner']);
                if(strstr($owner->name??'','笕尚')){
                    $rejected=new Rejected();
                    $rejected->fill($rejectedBill->toArray());
                    $rejected->fill($rejectedBillItem->toArray());
                    $rejectedJianshang=new api\jianshang\RejectedController();
                    $sended=$rejectedJianshang->sendRejected($rejected);
                    if(!$sended){
                        echo '<h1>数据发送给笕尚失败,请通知IT相关负责人</h1>';
                        $this->log(__METHOD__,'error','数据发送给笕尚失败');
                        $havingFail++;
                        return false;
                    }
                }
            });
        if($havingFail>0)return ['success'=>'false','failure_info'=>"$havingFail/{$rejectedBillItems->count()} 条记录没有发送成功"];
        $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
        return ['success'=>'true'];
    }
    public function apiPackDestroy(Request $request)
    {
        if(!(Gate::allows('退货管理-录入')||Gate::allows('退货管理-编辑'))){
            return ['success'=>'false','failure_info'=>'没有权限'];
        }
        $ids=$request->input('ids');
        if(!$ids)return ['success'=>'false','fail_info'=>'没有内容'];
        $rejectedBillItems=RejectedBillItem::whereIn('id', $ids);
        $rejectedBillItems->each(function(RejectedBillItem $rejectedBillItem){
            $rejectedBillItem->delete();
        });
        $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
        return ['success'=>'true'];
    }
    protected function validator(array $data,$isUpdate=false)
    {
        return Validator::make($data, [
            'id_rejected_bill' => ['required', 'numeric', 'exists:rejected_bills,id'],
            'barcode_goods' => ['required', 'string','max:60'],
            'name_goods' => ['nullable', 'string','max:50'],
            'amount' => ['numeric','nullable', 'max:99999'],
            'id_quality_label' => ['required','numeric',  'max:11'],
            'batch_number' => ['string', 'nullable',],
            'validity_at' => ['nullable','date_format:Y-m-d'],
            'remark' => ['nullable','string','max:191'],
        ],[],[
            'id_rejected_bill' =>'退单头',
            'barcode_goods' => '商品条码',
            'name_goods' => '商品名称',
            'amount' => '数量',
            'id_quality_label' => '品质',
            'batch_number' => '批次',
            'validity_at' => '效期',
            'remark' => '备注'
        ]);
    }
    public function apiGet(Request $request)
    {
        if(!Gate::allows('退货管理-查询')){
            return ['success'=>'false','failure_info'=>'没有权限'];}
        if(!$request->input('id_rejected_bill')){
            return ['success'=>'false','failure_info'=>'表头id不能为空'];
        }
        $rejectedBillItems = RejectedBillItem::where('id_rejected_bill',$request->input('id_rejected_bill'))->get();
        return ['success'=>'true','items'=>$rejectedBillItems->toArray()];
    }
    public function apiDelete(Request $request)
    {
        if(!Gate::allows('退货管理-删除')){
            return ['success'=>'false','failure_info'=>'没有权限'];}
        if(!$request->input('id')){
            return ['success'=>'false','failure_info'=>'传入id不能为空'];
        }
        $rejectedBillItem = RejectedBillItem::find($request->input('id'));
        $rejectedBillItem->forceDelete();
        return ['success'=>'true','id'=>$request->input('id')];
    }
    /**
     * Display the specified resource.
     *
     * @param  \App\RejectedBillItem  $rejectedBillItem
     * @return \Illuminate\Http\Response
     */
    public function show(RejectedBillItem $rejectedBillItem)
    {
        //
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\RejectedBillItem  $rejectedBillItem
     * @return \Illuminate\Http\Response
     */
    public function edit(RejectedBillItem $rejectedBillItem)
    {
        //
    }
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\RejectedBillItem  $rejectedBillItem
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, RejectedBillItem $rejectedBillItem)
    {
        //
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\RejectedBillItem  $rejectedBillItem
     * @return \Illuminate\Http\Response
     */
    public function destroy(RejectedBillItem $rejectedBillItem)
    {
        //
    }
}