ProcurementController.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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. private function newProcurement($param){
  17. $procurement=new Procurement([
  18. 'owner_material_id'=>$param['owner_material_id'],
  19. 'quantity'=>$param['quantity'],
  20. 'amount'=>$param['amount'],
  21. 'unit_price'=>$param['unit_price'],
  22. 'initiator'=>Auth::user()['id'],
  23. 'type'=>0,
  24. ]);
  25. $procurement->save();
  26. $number_id=$procurement['id'];
  27. $procurement_code='BSHC';
  28. $procurement_code .= date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
  29. $procurement->update(['code'=>$procurement_code]);
  30. return $procurement;
  31. }
  32. public function index(Request $request,ProcurementFilters $filters)
  33. {
  34. $this->gate('采购管理-采购-查询');
  35. $paginateParams=$request->input();
  36. $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
  37. $procurements = Procurement::query()
  38. ->filter($filters)
  39. ->with(['initiator','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){
  40. $query->with('customer')->whereIn('id',$owner_ids);
  41. }])->paginate($param['paginate'] ?? 50);
  42. /** @var OwnerMaterialService $ownerMaterialService*/
  43. $ownerMaterialService=app(OwnerMaterialService::class);
  44. $owners=$ownerMaterialService->getOwnerPermittingWithMaterial();
  45. $materials=Material::query()->select('id','name')->get();
  46. return view('procurement/procurement/index',compact('procurements','owners','materials','paginateParams'));
  47. }
  48. public function create()
  49. {
  50. $this->gate('采购管理-采购-新建');
  51. /** @var OwnerMaterialService $ownerMaterialService*/
  52. $ownerMaterialService=app(OwnerMaterialService::class);
  53. $owners=$ownerMaterialService->getOwnerPermittingWithMaterial();
  54. return view('procurement/procurement/create',compact('owners'));
  55. }
  56. public function store(Request $request)
  57. {
  58. $this->gate('采购管理-采购-新建');
  59. $param=$request->all(['owner_material_id','quantity','amount','unit_price']);
  60. $procurement=$this->newProcurement($param);
  61. return redirect('procurement/procurement/index')->with('successTip','新采购单“'.$procurement->code.'”添加成功');
  62. }
  63. public function createProcurement(Request $request)
  64. {
  65. $this->gate('采购管理-采购-新建');
  66. $param=$request->all(['owner_material_id','quantity','amount','unit_price']);
  67. try {
  68. $procurement=$this->newProcurement($param);
  69. $procurement = $procurement->loadMissing(['initiator','ownerMaterial.material','ownerMaterial.owner.customer']);
  70. if ($procurement) return ['success' => true,'data' => $procurement];
  71. else return ['success' => false, 'message' => '添加失败'];
  72. } catch (\Exception $e) {
  73. return ['success' => false,'message' => $e->getMessage()];
  74. }
  75. }
  76. public function createEnquiry(Request $request)
  77. {
  78. $this->gate('采购管理-采购-新建');
  79. $param=$request->all(['owner_material_id']);
  80. try {
  81. $procurement=new Procurement([
  82. 'owner_material_id'=>$param['owner_material_id'],
  83. 'quantity'=>0,
  84. 'amount'=>0,
  85. 'unit_price'=>0,
  86. 'initiator'=>Auth::user()['id'],
  87. 'type'=>1,
  88. ]);
  89. $procurement->save();
  90. $number_id=$procurement['id'];
  91. $procurement_code='BSHC';
  92. $procurement_code .= date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
  93. $procurement->update(['code'=>$procurement_code]);
  94. $procurement = $procurement->loadMissing(['initiator','ownerMaterial.material','ownerMaterial.owner.customer']);
  95. if ($procurement) return ['success' => true,'data' => $procurement];
  96. else return ['success' => false, 'message' => '添加失败'];
  97. } catch (\Exception $e) {
  98. return ['success' => false,'message' => $e->getMessage()];
  99. }
  100. }
  101. public function createProof(Request $request)
  102. {
  103. $this->gate('采购管理-采购-新建');
  104. $param=$request->all(['owner_material_id']);
  105. try {
  106. $procurement=new Procurement([
  107. 'owner_material_id'=>$param['owner_material_id'],
  108. 'quantity'=>1,
  109. 'amount'=>0,
  110. 'unit_price'=>0,
  111. 'initiator'=>Auth::user()['id'],
  112. 'type'=>2,
  113. ]);
  114. $procurement->save();
  115. $number_id=$procurement['id'];
  116. $procurement_code='BSHC';
  117. $procurement_code .= date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
  118. $procurement->update(['code'=>$procurement_code]);
  119. $procurement = $procurement->loadMissing(['initiator','ownerMaterial.material','ownerMaterial.owner.customer']);
  120. if ($procurement) return ['success' => true,'data' => $procurement];
  121. else return ['success' => false, 'message' => '添加失败'];
  122. } catch (\Exception $e) {
  123. return ['success' => false,'message' => $e->getMessage()];
  124. }
  125. }
  126. public function show(Procurement $procurement)
  127. {
  128. //
  129. }
  130. public function edit(Procurement $procurement)
  131. {
  132. //
  133. }
  134. public function update(Request $request, Procurement $procurement)
  135. {
  136. //
  137. }
  138. public function destroy(Procurement $procurement)
  139. {
  140. //
  141. }
  142. public function checkBill(Request $request)
  143. {
  144. $this->gate('采购管理-财务-对账单');
  145. $paginateParams=$request->input();
  146. $procurementCheckSheets=ProcurementCheckSheet::query()
  147. ->with(['procurementDelivery.procurement.supplier','procurementDelivery.procurement.ownerMaterial.material','procurementDelivery.receiver',])
  148. ->paginate($param['paginate'] ?? 50);
  149. $suppliers=Supplier::query()->select('id','name')->get();
  150. $materials=Material::query()->select('id','name')->get();
  151. return view('procurement/finance/checkBill',compact('procurementCheckSheets','suppliers','paginateParams','materials'));
  152. }
  153. public function procurementBill(Request $request,ProcurementFilters $filters)
  154. {
  155. $this->gate('采购管理-财务-采购账单');
  156. $paginateParams=$request->input();
  157. $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
  158. $owners=app("OwnerService")->getIntersectPermitting();
  159. $materials=Material::query()->select('id','name')->get();
  160. $suppliers=Supplier::query()->select('id','name')->get();
  161. $procurements = Procurement::query()
  162. ->filter($filters)
  163. ->with(['initiator','supplier','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){
  164. $query->with('customer')->whereIn('id',$owner_ids);
  165. }])->paginate($param['paginate'] ?? 50);
  166. return view('procurement/finance/procurementBill',compact('suppliers','materials','owners','paginateParams','procurements'));
  167. }
  168. public function monthlyBillReport(Request $request)
  169. {
  170. $this->gate('采购管理-财务-月账单报表');
  171. $paginateParams=$request->input();
  172. $procurementTotalBills=ProcurementTotalBill::query()->with('supplier')->paginate($param['paginate'] ?? 50);
  173. $suppliers=Supplier::query()->select('id','name')->get();
  174. return view('procurement/finance/monthlyBillReport',compact('suppliers','procurementTotalBills','paginateParams'));
  175. }
  176. }