ProcurementController.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Components\AsyncResponse;
  4. use App\Filters\ProcurementFilters;
  5. use App\Material;
  6. use App\Procurement;
  7. use App\ProcurementCheckSheet;
  8. use App\ProcurementTotalBill;
  9. use App\Services\OwnerMaterialService;
  10. use App\Supplier;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Auth;
  13. class ProcurementController extends Controller
  14. {
  15. use AsyncResponse;
  16. public function index(Request $request,ProcurementFilters $filters)
  17. {
  18. $this->gate('采购管理-采购-查询');
  19. $paginateParams=$request->input();
  20. $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
  21. $procurements = Procurement::query()
  22. ->filter($filters)
  23. ->with(['initiator','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){
  24. $query->with('customer')->whereIn('id',$owner_ids);
  25. }])->paginate($param['paginate'] ?? 50);
  26. /** @var OwnerMaterialService $ownerMaterialService*/
  27. $ownerMaterialService=app(OwnerMaterialService::class);
  28. $owners=$ownerMaterialService->getOwnerPermittingWithMaterial();
  29. $materials=Material::query()->select('id','name')->get();
  30. return view('procurement/procurement/index',compact('procurements','owners','materials','paginateParams'));
  31. }
  32. public function create()
  33. {
  34. $this->gate('采购管理-采购-新建');
  35. /** @var OwnerMaterialService $ownerMaterialService*/
  36. $ownerMaterialService=app(OwnerMaterialService::class);
  37. $owners=$ownerMaterialService->getOwnerPermittingWithMaterial();
  38. return view('procurement/procurement/create',compact('owners'));
  39. }
  40. public function store(Request $request)
  41. {
  42. $this->gate('采购管理-采购-新建');
  43. $param=$request->all(['owner_material_id','quantity','amount','unit_price']);
  44. $procurement=new Procurement([
  45. 'owner_material_id'=>$param['owner_material_id'],
  46. 'quantity'=>$param['quantity'],
  47. 'amount'=>$param['amount'],
  48. 'unit_price'=>$param['unit_price'],
  49. 'initiator'=>Auth::user()['id'],
  50. ]);
  51. $procurement->save();
  52. $number_id=$procurement['id'];
  53. $procurement_code='BSHC';
  54. $procurement_code .= date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
  55. $procurement->update(['code'=>$procurement_code]);
  56. return redirect('procurement/procurement/index')->with('successTip','新采购单“'.$procurement_code.'”添加成功');
  57. }
  58. public function createProcurement(Request $request)
  59. {
  60. $this->gate('采购管理-采购-新建');
  61. $param=$request->all(['owner_material_id','quantity','amount','unit_price']);
  62. try {
  63. $procurement=new Procurement([
  64. 'owner_material_id'=>$param['owner_material_id'],
  65. 'quantity'=>$param['quantity'],
  66. 'amount'=>$param['amount'],
  67. 'unit_price'=>$param['unit_price'],
  68. 'initiator'=>Auth::user()['id'],
  69. ]);
  70. $procurement->save();
  71. $number_id=$procurement['id'];
  72. $procurement_code='BSHC';
  73. $procurement_code .= date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
  74. $procurement->update(['code'=>$procurement_code]);
  75. $procurement = $procurement->loadMissing(['initiator','ownerMaterial.material','ownerMaterial.owner.customer']);
  76. if ($procurement) return ['success' => true,'data' => $procurement];
  77. else return ['success' => false, 'message' => '添加失败'];
  78. } catch (\Exception $e) {
  79. return ['success' => false,'message' => $e->getMessage()];
  80. }
  81. }
  82. public function show(Procurement $procurement)
  83. {
  84. //
  85. }
  86. public function edit(Procurement $procurement)
  87. {
  88. //
  89. }
  90. public function update(Request $request, Procurement $procurement)
  91. {
  92. //
  93. }
  94. public function destroy(Procurement $procurement)
  95. {
  96. //
  97. }
  98. public function checkBill(Request $request)
  99. {
  100. $this->gate('采购管理-财务-对账单');
  101. $paginateParams=$request->input();
  102. $procurementCheckSheets=ProcurementCheckSheet::query()
  103. ->with(['procurementDelivery.procurement.supplier','procurementDelivery.procurement.ownerMaterial.material','procurementDelivery.receiver',])
  104. ->paginate($param['paginate'] ?? 50);
  105. $suppliers=Supplier::query()->select('id','name')->get();
  106. $materials=Material::query()->select('id','name')->get();
  107. return view('procurement/finance/checkBill',compact('procurementCheckSheets','suppliers','paginateParams','materials'));
  108. }
  109. public function procurementBill(Request $request,ProcurementFilters $filters)
  110. {
  111. $this->gate('采购管理-财务-采购账单');
  112. $paginateParams=$request->input();
  113. $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
  114. $owners=app("OwnerService")->getIntersectPermitting();
  115. $materials=Material::query()->select('id','name')->get();
  116. $suppliers=Supplier::query()->select('id','name')->get();
  117. $procurements = Procurement::query()
  118. ->filter($filters)
  119. ->with(['initiator','supplier','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){
  120. $query->with('customer')->whereIn('id',$owner_ids);
  121. }])->paginate($param['paginate'] ?? 50);
  122. return view('procurement/finance/procurementBill',compact('suppliers','materials','owners','paginateParams','procurements'));
  123. }
  124. public function monthlyBillReport(Request $request)
  125. {
  126. $this->gate('采购管理-财务-月账单报表');
  127. $paginateParams=$request->input();
  128. $procurementTotalBills=ProcurementTotalBill::query()->with('supplier')->paginate($param['paginate'] ?? 50);
  129. $suppliers=Supplier::query()->select('id','name')->get();
  130. return view('procurement/finance/monthlyBillReport',compact('suppliers','procurementTotalBills','paginateParams'));
  131. }
  132. }