PageRenderTime 26ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Controller/Admin/FinanceiroController.php

https://bitbucket.org/joaoignan/lojaslogfitness
PHP | 293 lines | 209 code | 81 blank | 3 comment | 16 complexity | f37fe199587c5fa1acc2715113d485da MD5 | raw file
Possible License(s): LGPL-2.1, BSD-3-Clause, JSON, MIT, Apache-2.0
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Controller\AppController;
  4. use Cake\ORM\TableRegistry;
  5. use Cake\I18n\Time;
  6. /**
  7. * Financeiro Controller
  8. */
  9. class FinanceiroController extends AppController
  10. {
  11. public function index()
  12. {
  13. $session = $this->request->session();
  14. $session->delete('TransactionsAdmin');
  15. $TransactionsSession = $session->read('TransactionsAdmin');
  16. $Pedidos = TableRegistry::get('Pedidos');
  17. $PlanosClientes = TableRegistry::get('PlanosClientes');
  18. $ch = curl_init();
  19. $header = [
  20. "Content-Type: application/json"
  21. ];
  22. $options = array(CURLOPT_URL => "https://api.iugu.com/v1/financial_transaction_requests?api_token=".IUGU_API_TOKEN."&limit=200",
  23. CURLOPT_RETURNTRANSFER => TRUE,
  24. CURLOPT_HEADER => FALSE,
  25. CURLOPT_POST => FALSE,
  26. CURLOPT_HTTPHEADER => $header
  27. );
  28. curl_setopt_array($ch, $options);
  29. $response = curl_exec($ch);
  30. curl_close($ch);
  31. $resp_iugu_transactions = json_decode($response);
  32. foreach ($resp_iugu_transactions->items as $transaction) {
  33. $ids_transactions[$transaction->id] = $transaction->invoice_id;
  34. $data_transactions[$transaction->id] = $transaction;
  35. }
  36. $pedidos = $Pedidos
  37. ->find('all')
  38. ->where(['pedido_status_id >=' => 3])
  39. ->andWhere(['pedido_status_id NOT IN' => [7, 8]])
  40. ->andWhere(['comissao_status IN' => [1, 2]])
  41. ->all();
  42. foreach ($ids_transactions as $key => $id_transaction) {
  43. foreach ($pedidos as $pedido) {
  44. if($id_transaction == $pedido->tid) {
  45. $transactions[] = $data_transactions[$key];
  46. $time = new Time($data_transactions[$key]->scheduled_date);
  47. $today = time::now();
  48. $dias_antecipados = $time->diff($today);
  49. $dias_antecipados = $dias_antecipados->days + 1;
  50. $taxa_antecipacao = pow((1 + (2.5 / 100)),($dias_antecipados/30));
  51. $valor = explode(' ', $data_transactions[$key]->client_share);
  52. if($valor[1] == 'BRL') {
  53. $valor = str_replace(',', '.', $valor[0]);
  54. } else {
  55. $valor = str_replace(',', '.', $valor[1]);
  56. }
  57. $valor = (double)$valor;
  58. $qtd_parcelas = (int)$data_transactions[$key]->number_of_installments;
  59. $parcela_atual = (int)$data_transactions[$key]->installment;
  60. $custo = $valor - ($valor/$taxa_antecipacao);
  61. $custo = number_format($custo, 2);
  62. $custo_final[$data_transactions[$key]->id] = $custo;
  63. $valor_final[$data_transactions[$key]->id] = $valor - $custo;
  64. $transactions_id[$data_transactions[$key]->id] = $data_transactions[$key]->id;
  65. }
  66. }
  67. }
  68. if ($this->request->is(['patch', 'post', 'put'])) {
  69. foreach ($this->request->data as $key => $value) {
  70. $transaction = explode('_', $key);
  71. $transactionsAdmin[] = $transaction[1];
  72. }
  73. $session->write('TransactionsAdmin.'.$transactionsAdmin, $transactionsAdmin);
  74. return $this->redirect('/admin/financeiro/confirmar');
  75. }
  76. $this->set(compact('transactions', 'custo_final', 'valor_final'));
  77. }
  78. public function confirmar()
  79. {
  80. $session = $this->request->session();
  81. $TransactionsAdmin = $session->read('TransactionsAdmin');
  82. $ch = curl_init();
  83. $header = [
  84. "Content-Type: application/json"
  85. ];
  86. $options = array(CURLOPT_URL => "https://api.iugu.com/v1/financial_transaction_requests?api_token=".IUGU_API_TOKEN."&limit=100",
  87. CURLOPT_RETURNTRANSFER => TRUE,
  88. CURLOPT_HEADER => FALSE,
  89. CURLOPT_POST => FALSE,
  90. CURLOPT_HTTPHEADER => $header
  91. );
  92. curl_setopt_array($ch, $options);
  93. $response = curl_exec($ch);
  94. curl_close($ch);
  95. $resp_iugu_transactions = json_decode($response);
  96. foreach ($resp_iugu_transactions->items as $transaction) {
  97. $ids_transactions[$transaction->id] = $transaction->invoice_id;
  98. $data_transactions[$transaction->id] = $transaction;
  99. }
  100. foreach ($ids_transactions as $key => $id_transaction) {
  101. foreach($TransactionsAdmin as $transaction_admin) {
  102. if(in_array($key, $transaction_admin)) {
  103. $transactions[] = $data_transactions[$key];
  104. $time = new Time($data_transactions[$key]->scheduled_date);
  105. $today = time::now();
  106. $dias_antecipados = $time->diff($today);
  107. $dias_antecipados = $dias_antecipados->days + 1;
  108. $taxa_antecipacao = pow((1 + (2.5 / 100)),($dias_antecipados/30));
  109. $valor = explode(' ', $data_transactions[$key]->client_share);
  110. if($valor[1] == 'BRL') {
  111. $valor = str_replace(',', '.', $valor[0]);
  112. } else {
  113. $valor = str_replace(',', '.', $valor[1]);
  114. }
  115. $valor = (double)$valor;
  116. $qtd_parcelas = (int)$data_transactions[$key]->number_of_installments;
  117. $parcela_atual = (int)$data_transactions[$key]->installment;
  118. $custo = $valor - ($valor/$taxa_antecipacao);
  119. $custo = number_format($custo, 2);
  120. $custo_final[$data_transactions[$key]->id] = $custo;
  121. $valor_final[$data_transactions[$key]->id] = $valor - $custo;
  122. $transactions_id[$data_transactions[$key]->id] = $data_transactions[$key]->id;
  123. }
  124. }
  125. }
  126. if ($this->request->is(['patch', 'post', 'put'])) {
  127. foreach ($TransactionsAdmin as $tid) {
  128. foreach ($tid as $trans_id) {
  129. $transaction_list[] = $trans_id;
  130. }
  131. }
  132. $ch = curl_init();
  133. $header = [
  134. "Content-Type: application/json"
  135. ];
  136. $data = [
  137. "api_token" => IUGU_API_TOKEN,
  138. "transactions" => $transaction_list
  139. ];
  140. $data = json_encode($data);
  141. $options = array(CURLOPT_URL => "https://api.iugu.com/v1/financial_transaction_requests/advance",
  142. CURLOPT_RETURNTRANSFER => TRUE,
  143. CURLOPT_HEADER => FALSE,
  144. CURLOPT_POST => TRUE,
  145. CURLOPT_POSTFIELDS => $data,
  146. CURLOPT_HTTPHEADER => $header
  147. );
  148. curl_setopt_array($ch, $options);
  149. $response = curl_exec($ch);
  150. curl_close($ch);
  151. $this->Flash->success('Fatura(s) antecipada(s) com sucesso!');
  152. return $this->redirect('/admin/financeiro');
  153. }
  154. $this->set(compact('transactions', 'custo_final', 'valor_final'));
  155. }
  156. public function saque()
  157. {
  158. $ch = curl_init();
  159. $header = [
  160. "Content-Type: application/json"
  161. ];
  162. $options = array(CURLOPT_URL => "https://api.iugu.com/v1/accounts/".IUGU_ID."/?api_token=".IUGU_API_TOKEN,
  163. CURLOPT_RETURNTRANSFER => TRUE,
  164. CURLOPT_HEADER => FALSE,
  165. CURLOPT_POST => FALSE,
  166. CURLOPT_HTTPHEADER => $header
  167. );
  168. curl_setopt_array($ch, $options);
  169. $response = curl_exec($ch);
  170. curl_close($ch);
  171. $resp_iugu_conta_info = json_decode($response);
  172. if($this->request->is(['patch', 'post', 'put'])) {
  173. $valor_saque = $this->request->data['valor_transferencia'];
  174. $valor_saque = str_replace(".","",$valor_saque);
  175. $valor_saque = str_replace(",",".",$valor_saque);
  176. if($valor_saque >= 5.0) {
  177. $ch = curl_init();
  178. $header = [
  179. "Content-Type: application/json"
  180. ];
  181. $valor_saque = number_format($valor_saque, 2, '.', ',');
  182. $data = [
  183. "api_token" => IUGU_API_TOKEN,
  184. "amount" => $valor_saque
  185. ];
  186. $data = json_encode($data);
  187. $options = array(CURLOPT_URL => "https://api.iugu.com/v1/accounts/".IUGU_ID."/request_withdraw",
  188. CURLOPT_RETURNTRANSFER => TRUE,
  189. CURLOPT_HEADER => FALSE,
  190. CURLOPT_POST => TRUE,
  191. CURLOPT_POSTFIELDS => $data,
  192. CURLOPT_HTTPHEADER => $header
  193. );
  194. curl_setopt_array($ch, $options);
  195. $response = curl_exec($ch);
  196. curl_close($ch);
  197. $resp_iugu_saque = json_decode($response);
  198. if(!$resp_iugu_saque->errors) {
  199. $this->Flash->success('Saque no valor de '.$valor_saque.' realizado com sucesso!');
  200. return $this->redirect('/admin/financeiro/saque');
  201. } else {
  202. $this->Flash->error('Falha ao tentar realizar saque... Tente novamente...');
  203. return $this->redirect('/admin/financeiro/saque');
  204. }
  205. } else {
  206. $this->Flash->error('Falha ao tentar realizar saque... Valor deve ser mais que R$5');
  207. return $this->redirect('/admin/financeiro/saque');
  208. }
  209. }
  210. $this->set(compact('resp_iugu_conta_info'));
  211. }
  212. }