ContractController.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\StoreContractRequest;
  4. use App\Models\Contract;
  5. use Illuminate\Http\Request;
  6. class ContractController extends Controller
  7. {
  8. protected array $data = [
  9. 'active' => 'contracts',
  10. 'title' => 'Договоры',
  11. 'id' => 'contracts',
  12. 'header' => [
  13. 'id' => 'ID',
  14. 'contract_number' => 'Номер договора',
  15. 'contract_date' => 'Дата договора',
  16. 'year' => 'Год',
  17. ],
  18. 'searchFields' => [
  19. 'contract_number',
  20. ],
  21. ];
  22. public function index(Request $request)
  23. {
  24. session(['gp_contracts' => $request->query()]);
  25. $nav = $this->startNavigationContext($request);
  26. $model = new Contract();
  27. // fill filters
  28. $this->createFilters($model, 'year');
  29. $this->data['ranges'] = [];
  30. $this->createDateFilters($model, 'contract_date');
  31. $q = $model::query();
  32. $this->acceptSearch($q, $request);
  33. $this->acceptFilters($q, $request);
  34. $this->setSortAndOrderBy($model, $request);
  35. $this->applyStableSorting($q);
  36. $this->data['contracts'] = $q->paginate($this->data['per_page'])->withQueryString();
  37. $this->data['nav'] = $nav;
  38. return view('contracts.index', $this->data);
  39. }
  40. public function show(Request $request, Contract $contract)
  41. {
  42. $nav = $this->resolveNavToken($request);
  43. $this->rememberNavigation($request, $nav);
  44. $this->data['nav'] = $nav;
  45. $this->data['back_url'] = $this->navigationBackUrl(
  46. $request,
  47. $nav,
  48. route('contract.index', session('gp_contracts', []))
  49. );
  50. $this->data['contract'] = $contract;
  51. return view('contracts.edit', $this->data);
  52. }
  53. public function create(Request $request)
  54. {
  55. $nav = $this->resolveNavToken($request);
  56. $this->rememberNavigation($request, $nav);
  57. $this->data['nav'] = $nav;
  58. $this->data['back_url'] = $this->navigationBackUrl(
  59. $request,
  60. $nav,
  61. route('contract.index', session('gp_contracts', []))
  62. );
  63. $this->data['contract'] = null;
  64. return view('contracts.edit', $this->data);
  65. }
  66. public function store(StoreContractRequest $request)
  67. {
  68. Contract::query()->create($request->validated());
  69. return redirect()->route('contract.index');
  70. }
  71. public function update(StoreContractRequest $request, Contract $contract)
  72. {
  73. $contract->update($request->validated());
  74. return redirect()->route('contract.index');
  75. }
  76. public function delete(Contract $contract)
  77. {
  78. $contract->delete();
  79. return redirect()->route('contract.index');
  80. }
  81. }