/app/Http/Controllers/Sales/Revenues.php

https://github.com/akaunting/akaunting · PHP · 232 lines · 115 code · 54 blank · 63 comment · 6 complexity · 00634ef3244853c091eab71cb8ab9b34 MD5 · raw file

  1. <?php
  2. namespace App\Http\Controllers\Sales;
  3. use App\Abstracts\Http\Controller;
  4. use App\Exports\Sales\Revenues as Export;
  5. use App\Http\Requests\Banking\Transaction as Request;
  6. use App\Http\Requests\Common\Import as ImportRequest;
  7. use App\Imports\Sales\Revenues as Import;
  8. use App\Jobs\Banking\CreateTransaction;
  9. use App\Jobs\Banking\DeleteTransaction;
  10. use App\Jobs\Banking\UpdateTransaction;
  11. use App\Models\Banking\Account;
  12. use App\Models\Banking\Transaction;
  13. use App\Models\Common\Contact;
  14. use App\Models\Setting\Category;
  15. use App\Models\Setting\Currency;
  16. use App\Traits\Currencies;
  17. use App\Traits\DateTime;
  18. use App\Utilities\Modules;
  19. class Revenues extends Controller
  20. {
  21. use Currencies, DateTime;
  22. /**
  23. * Display a listing of the resource.
  24. *
  25. * @return Response
  26. */
  27. public function index()
  28. {
  29. $revenues = Transaction::with('account', 'category', 'contact', 'invoice')->income()->isNotTransfer()->collect(['paid_at'=> 'desc']);
  30. $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id');
  31. $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id');
  32. $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
  33. return view('sales.revenues.index', compact('revenues', 'customers', 'categories', 'accounts'));
  34. }
  35. /**
  36. * Show the form for viewing the specified resource.
  37. *
  38. * @return Response
  39. */
  40. public function show()
  41. {
  42. return redirect()->route('revenues.index');
  43. }
  44. /**
  45. * Show the form for creating a new resource.
  46. *
  47. * @return Response
  48. */
  49. public function create()
  50. {
  51. $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
  52. $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
  53. $account_currency_code = Account::where('id', setting('default.account'))->pluck('currency_code')->first();
  54. $currency = Currency::where('code', $account_currency_code)->first();
  55. $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id');
  56. $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id');
  57. $payment_methods = Modules::getPaymentMethods();
  58. return view('sales.revenues.create', compact('accounts', 'currencies', 'account_currency_code', 'currency', 'customers', 'categories', 'payment_methods'));
  59. }
  60. /**
  61. * Store a newly created resource in storage.
  62. *
  63. * @param Request $request
  64. *
  65. * @return Response
  66. */
  67. public function store(Request $request)
  68. {
  69. $response = $this->ajaxDispatch(new CreateTransaction($request));
  70. if ($response['success']) {
  71. $response['redirect'] = route('revenues.index');
  72. $message = trans('messages.success.added', ['type' => trans_choice('general.revenues', 1)]);
  73. flash($message)->success();
  74. } else {
  75. $response['redirect'] = route('revenues.create');
  76. $message = $response['message'];
  77. flash($message)->error();
  78. }
  79. return response()->json($response);
  80. }
  81. /**
  82. * Duplicate the specified resource.
  83. *
  84. * @param Transaction $revenue
  85. *
  86. * @return Response
  87. */
  88. public function duplicate(Transaction $revenue)
  89. {
  90. $clone = $revenue->duplicate();
  91. $message = trans('messages.success.duplicated', ['type' => trans_choice('general.revenues', 1)]);
  92. flash($message)->success();
  93. return redirect()->route('revenues.edit', $clone->id);
  94. }
  95. /**
  96. * Import the specified resource.
  97. *
  98. * @param ImportRequest $request
  99. *
  100. * @return Response
  101. */
  102. public function import(ImportRequest $request)
  103. {
  104. \Excel::import(new Import(), $request->file('import'));
  105. $message = trans('messages.success.imported', ['type' => trans_choice('general.revenues', 2)]);
  106. flash($message)->success();
  107. return redirect()->route('revenues.index');
  108. }
  109. /**
  110. * Show the form for editing the specified resource.
  111. *
  112. * @param Transaction $revenue
  113. *
  114. * @return Response
  115. */
  116. public function edit(Transaction $revenue)
  117. {
  118. $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
  119. $currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
  120. $currency = Currency::where('code', $revenue->currency_code)->first();
  121. $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id');
  122. $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id');
  123. $payment_methods = Modules::getPaymentMethods();
  124. $date_format = $this->getCompanyDateFormat();
  125. return view('sales.revenues.edit', compact('revenue', 'accounts', 'currencies', 'currency', 'customers', 'categories', 'payment_methods', 'date_format'));
  126. }
  127. /**
  128. * Update the specified resource in storage.
  129. *
  130. * @param Transaction $revenue
  131. * @param Request $request
  132. *
  133. * @return Response
  134. */
  135. public function update(Transaction $revenue, Request $request)
  136. {
  137. $response = $this->ajaxDispatch(new UpdateTransaction($revenue, $request));
  138. if ($response['success']) {
  139. $response['redirect'] = route('revenues.index');
  140. $message = trans('messages.success.updated', ['type' => trans_choice('general.revenues', 1)]);
  141. flash($message)->success();
  142. } else {
  143. $response['redirect'] = route('revenues.edit', $revenue->id);
  144. $message = $response['message'];
  145. flash($message)->error();
  146. }
  147. return response()->json($response);
  148. }
  149. /**
  150. * Remove the specified resource from storage.
  151. *
  152. * @param Transaction $revenue
  153. *
  154. * @return Response
  155. */
  156. public function destroy(Transaction $revenue)
  157. {
  158. $response = $this->ajaxDispatch(new DeleteTransaction($revenue));
  159. $response['redirect'] = route('revenues.index');
  160. if ($response['success']) {
  161. $message = trans('messages.success.deleted', ['type' => trans_choice('general.revenues', 1)]);
  162. flash($message)->success();
  163. } else {
  164. $message = $response['message'];
  165. flash($message)->error();
  166. }
  167. return response()->json($response);
  168. }
  169. /**
  170. * Export the specified resource.
  171. *
  172. * @return Response
  173. */
  174. public function export()
  175. {
  176. return \Excel::download(new Export(), \Str::filename(trans_choice('general.revenues', 2)) . '.xlsx');
  177. }
  178. }