ContractController.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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->resolveNavToken($request);
  26. $this->rememberNavigation($request, $nav);
  27. $model = new Contract();
  28. // fill filters
  29. $this->createFilters($model, 'year');
  30. $this->data['ranges'] = [];
  31. $this->createDateFilters($model, 'contract_date');
  32. $q = $model::query();
  33. $this->acceptSearch($q, $request);
  34. $this->acceptFilters($q, $request);
  35. $this->setSortAndOrderBy($model, $request);
  36. $this->applyStableSorting($q);
  37. $this->data['contracts'] = $q->paginate($this->data['per_page'])->withQueryString();
  38. $this->data['nav'] = $nav;
  39. return view('contracts.index', $this->data);
  40. }
  41. public function show(Request $request, Contract $contract)
  42. {
  43. $nav = $this->resolveNavToken($request);
  44. $this->rememberNavigation($request, $nav);
  45. $this->data['nav'] = $nav;
  46. $this->data['back_url'] = $this->navigationBackUrl(
  47. $request,
  48. $nav,
  49. route('contract.index', session('gp_contracts', []))
  50. );
  51. $this->data['contract'] = $contract;
  52. return view('contracts.edit', $this->data);
  53. }
  54. public function create(Request $request)
  55. {
  56. $nav = $this->resolveNavToken($request);
  57. $this->rememberNavigation($request, $nav);
  58. $this->data['nav'] = $nav;
  59. $this->data['back_url'] = $this->navigationBackUrl(
  60. $request,
  61. $nav,
  62. route('contract.index', session('gp_contracts', []))
  63. );
  64. $this->data['contract'] = null;
  65. return view('contracts.edit', $this->data);
  66. }
  67. public function store(StoreContractRequest $request)
  68. {
  69. Contract::query()->create($request->validated());
  70. return redirect()->route('contract.index');
  71. }
  72. public function update(StoreContractRequest $request, Contract $contract)
  73. {
  74. $contract->update($request->validated());
  75. return redirect()->route('contract.index');
  76. }
  77. public function delete(Contract $contract)
  78. {
  79. $contract->delete();
  80. return redirect()->route('contract.index');
  81. }
  82. }