| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- namespace App\Http\Controllers;
- use App\Components\AsyncResponse;
- use App\Filters\SupplierFilters;
- use App\Material;
- use App\MaterialSupplier;
- use App\Supplier;
- use Illuminate\Http\Request;
- class SupplierController extends Controller
- {
- use AsyncResponse;
- public function index(Request $request,SupplierFilters $filters)
- {
- $this->gate('供应商');
- $suppliers = Supplier::query()->with('material')->orderByDesc('id')->filter($filters)->paginate($request['paginate']??50);
- $materials=Material::query()->select('id','name')->get();
- return view('/maintenance/supplier/index',compact('suppliers','materials'));
- }
- public function storeApi(Request $request)
- {
- $this->gate('供应商-编辑');
- $supplier = Supplier::query()->create($request->addSupplier);
- $material_supplier=[];
- foreach ($request->material_id as $item){
- $material_supplier[]=[
- 'material_id'=>$item,
- 'supplier_id'=>$supplier->id,
- ];
- }
- MaterialSupplier::query()->insert($material_supplier);
- $this->success($supplier);
- }
- public function updateApi(Request $request)
- {
- $this->gate('供应商-编辑');
- $editSupplier=$request->input('editSupplier');
- $material_ids=$request->input('material_id');
- $material_suppliers=MaterialSupplier::query()->where('supplier_id',$editSupplier['id'])->get();
- $this->updateMaterial($material_suppliers,$material_ids,$editSupplier['id']);
- $supplier = Supplier::query()->find($editSupplier['id']);
- $bool= $supplier->update([
- 'name'=>$editSupplier['name'],
- 'contact_man'=>$editSupplier['contact_man'],
- 'phone'=>$editSupplier['phone'],
- 'invoice_title'=>$editSupplier['invoice_title'],
- 'bank'=>$editSupplier['bank'],
- 'bank_account'=>$editSupplier['bank_account'],
- 'opening_bank'=>$editSupplier['opening_bank']
- ]);
- if($bool)$this->success($supplier->loadMissing('material'));
- $this->error('更新异常');
- }
- public function destroyApi($id)
- {
- $this->gate('供应商-删除');
- $supplier = Supplier::query()->find($id);
- $supplier->delete();
- $this->success();
- }
- private function updateMaterial($material_suppliers,$material_ids,$supplier_id){
- $exist=[]; $adds=[];$addMaterial=[];
- foreach ($material_suppliers as $material_supplier){
- $exist[]=$material_supplier['material_id'];
- }
- $deletes=array_diff($exist,$material_ids);
- foreach ($material_ids as $id){
- if (empty($material_suppliers->where('material_id',$id)->first()))$adds[]=$id;
- }
- foreach ($adds as $add){
- $addMaterial[]=[
- 'material_id'=>$add,
- 'supplier_id'=>$supplier_id,
- ];
- }
- if (count($addMaterial)>0) MaterialSupplier::query()->insert($addMaterial);
- foreach ($deletes as $delete){
- MaterialSupplier::query()->where('material_id',$delete)
- ->where('supplier_id',$supplier_id)->delete();
- }
- }
- }
|