PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/Finance/Http/Controllers/IncomeController.php

https://gitlab.com/laher01/factu40
PHP | 181 lines | 137 code | 44 blank | 0 comment | 1 complexity | 67f2698142043a02f720d6b21deea37b MD5 | raw file
  1. <?php
  2. namespace Modules\Finance\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Http\Response;
  5. use Illuminate\Routing\Controller;
  6. use Modules\Finance\Models\Income;
  7. use Modules\Finance\Models\IncomeReason;
  8. use Modules\Finance\Models\IncomePayment;
  9. use Modules\Finance\Models\IncomeType;
  10. use Modules\Finance\Models\IncomeMethodType;
  11. use Modules\Finance\Models\IncomeItem;
  12. use Modules\Finance\Http\Resources\IncomeCollection;
  13. use Modules\Finance\Http\Resources\IncomeResource;
  14. use Modules\Finance\Http\Requests\IncomeRequest;
  15. use Illuminate\Support\Str;
  16. use App\Models\Tenant\Person;
  17. use App\Models\Tenant\PaymentMethodType;
  18. use App\Models\Tenant\Catalogs\CurrencyType;
  19. use App\CoreFacturalo\Requests\Inputs\Common\PersonInput;
  20. use App\Models\Tenant\Establishment;
  21. use Illuminate\Support\Facades\DB;
  22. use App\Models\Tenant\Company;
  23. use Modules\Finance\Traits\FinanceTrait;
  24. class IncomeController extends Controller
  25. {
  26. use FinanceTrait;
  27. public function index()
  28. {
  29. return view('finance::income.index');
  30. }
  31. public function create()
  32. {
  33. return view('finance::income.form');
  34. }
  35. public function columns()
  36. {
  37. return [
  38. 'number' => 'Número',
  39. 'date_of_issue' => 'Fecha de emisión',
  40. ];
  41. }
  42. public function records(Request $request)
  43. {
  44. $records = Income::where($request->column, 'like', "%{$request->value}%")
  45. ->whereTypeUser()
  46. ->latest();
  47. return new IncomeCollection($records->paginate(config('tenant.items_per_page')));
  48. }
  49. public function tables()
  50. {
  51. $establishment = Establishment::where('id', auth()->user()->establishment_id)->first();
  52. $currency_types = CurrencyType::whereActive()->get();
  53. $income_types = IncomeType::get();
  54. $payment_method_types = PaymentMethodType::all();
  55. $income_reasons = IncomeReason::all();
  56. $payment_destinations = $this->getPaymentDestinations();
  57. return compact('establishment','currency_types', 'income_types', 'payment_method_types', 'income_reasons', 'payment_destinations');
  58. }
  59. public function record($id)
  60. {
  61. $record = new IncomeResource(Income::findOrFail($id));
  62. return $record;
  63. }
  64. public function store(IncomeRequest $request)
  65. {
  66. $data = self::merge_inputs($request);
  67. $income = DB::connection('tenant')->transaction(function () use ($data) {
  68. $doc = Income::create($data);
  69. foreach ($data['items'] as $row)
  70. {
  71. $doc->items()->create($row);
  72. }
  73. foreach ($data['payments'] as $row)
  74. {
  75. $record_payment = $doc->payments()->create($row);
  76. $this->createGlobalPayment($record_payment, $row);
  77. }
  78. return $doc;
  79. });
  80. return [
  81. 'success' => true,
  82. 'data' => [
  83. 'id' => $income->id,
  84. ],
  85. ];
  86. }
  87. public static function merge_inputs($inputs)
  88. {
  89. $company = Company::active();
  90. $values = [
  91. 'user_id' => auth()->id(),
  92. 'number' => $inputs['id'] ? $inputs['number'] : self::newNumber($company->soap_type_id),
  93. 'state_type_id' => '05',
  94. 'soap_type_id' => $company->soap_type_id,
  95. 'external_id' => Str::uuid()->toString(),
  96. ];
  97. $inputs->merge($values);
  98. return $inputs->all();
  99. }
  100. private static function newNumber($soap_type_id){
  101. $number = Income::select('number')
  102. ->where('soap_type_id', $soap_type_id)
  103. ->max('number');
  104. return ($number) ? (int)$number+1 : 1;
  105. }
  106. public function table($table)
  107. {
  108. switch ($table) {
  109. case 'suppliers':
  110. $suppliers = Person::whereType('suppliers')->orderBy('name')->get()->transform(function($row) {
  111. return [
  112. 'id' => $row->id,
  113. 'description' => $row->number.' - '.$row->name,
  114. 'name' => $row->name,
  115. 'number' => $row->number,
  116. 'identity_document_type_id' => $row->identity_document_type_id,
  117. 'identity_document_type_code' => $row->identity_document_type->code
  118. ];
  119. });
  120. return $suppliers;
  121. break;
  122. default:
  123. return [];
  124. break;
  125. }
  126. }
  127. public function voided($id)
  128. {
  129. $income = Income::findOrFail($id);
  130. $income->state_type_id = 11;
  131. $income->save();
  132. return [
  133. 'success' => true,
  134. 'message' => 'Ingreso anulado exitosamente',
  135. ];
  136. }
  137. }