SupplierController.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Components\AsyncResponse;
  4. use App\Filters\SupplierFilters;
  5. use App\Material;
  6. use App\MaterialSupplier;
  7. use App\Supplier;
  8. use Illuminate\Http\Request;
  9. class SupplierController extends Controller
  10. {
  11. use AsyncResponse;
  12. public function index(Request $request,SupplierFilters $filters)
  13. {
  14. $this->gate('供应商');
  15. $suppliers = Supplier::query()->with('material')->orderByDesc('id')->filter($filters)->paginate($request['paginate']??50);
  16. $materials=Material::query()->select('id','name')->get();
  17. return view('/maintenance/supplier/index',compact('suppliers','materials'));
  18. }
  19. public function storeApi(Request $request)
  20. {
  21. $this->gate('供应商-编辑');
  22. $supplier = Supplier::query()->create($request->addSupplier);
  23. $material_supplier=[];
  24. foreach ($request->material_id as $item){
  25. $material_supplier[]=[
  26. 'material_id'=>$item,
  27. 'supplier_id'=>$supplier->id,
  28. ];
  29. }
  30. MaterialSupplier::query()->insert($material_supplier);
  31. $this->success($supplier);
  32. }
  33. public function updateApi(Request $request)
  34. {
  35. $this->gate('供应商-编辑');
  36. $editSupplier=$request->input('editSupplier');
  37. $material_ids=$request->input('material_id');
  38. $material_suppliers=MaterialSupplier::query()->where('supplier_id',$editSupplier['id'])->get();
  39. $this->updateMaterial($material_suppliers,$material_ids,$editSupplier['id']);
  40. $supplier = Supplier::query()->find($editSupplier['id']);
  41. $bool= $supplier->update([
  42. 'name'=>$editSupplier['name'],
  43. 'contact_man'=>$editSupplier['contact_man'],
  44. 'phone'=>$editSupplier['phone'],
  45. 'invoice_title'=>$editSupplier['invoice_title'],
  46. 'bank'=>$editSupplier['bank'],
  47. 'bank_account'=>$editSupplier['bank_account'],
  48. 'opening_bank'=>$editSupplier['opening_bank']
  49. ]);
  50. if($bool)$this->success($supplier->loadMissing('material'));
  51. $this->error('更新异常');
  52. }
  53. public function destroyApi($id)
  54. {
  55. $this->gate('供应商-删除');
  56. $supplier = Supplier::query()->find($id);
  57. $supplier->delete();
  58. $this->success();
  59. }
  60. private function updateMaterial($material_suppliers,$material_ids,$supplier_id){
  61. $exist=[]; $adds=[];$addMaterial=[];
  62. foreach ($material_suppliers as $material_supplier){
  63. $exist[]=$material_supplier['material_id'];
  64. }
  65. $deletes=array_diff($exist,$material_ids);
  66. foreach ($material_ids as $id){
  67. if (empty($material_suppliers->where('material_id',$id)->first()))$adds[]=$id;
  68. }
  69. foreach ($adds as $add){
  70. $addMaterial[]=[
  71. 'material_id'=>$add,
  72. 'supplier_id'=>$supplier_id,
  73. ];
  74. }
  75. if (count($addMaterial)>0) MaterialSupplier::query()->insert($addMaterial);
  76. foreach ($deletes as $delete){
  77. MaterialSupplier::query()->where('material_id',$delete)
  78. ->where('supplier_id',$supplier_id)->delete();
  79. }
  80. }
  81. }