PageRenderTime 53ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/module/Estoque/src/Estoque/Controller/ContratoController.php

https://gitlab.com/SFMSP/Hagape
PHP | 315 lines | 235 code | 40 blank | 40 comment | 28 complexity | 3f10ffbba59b0408c567f0fa7c513650 MD5 | raw file
  1. <?php
  2. namespace Estoque\Controller;
  3. use Base\Helper\DatetimeFormat;
  4. use Zend\Mvc\Controller\AbstractActionController;
  5. use Zend\View\Model\ViewModel;
  6. use Application\Controller\CrudApplicationController;
  7. /**
  8. * Class ContratoController
  9. * @package Estoque\Controller
  10. */
  11. class ContratoController extends CrudApplicationController
  12. {
  13. protected $nameForm = 'Estoque\Form\Contrato';
  14. protected $nameRepository = 'Estoque\Repository\ContratoRepository';
  15. protected $nameService = 'Estoque\Service\Contrato';
  16. protected $controller = 'contrato';
  17. protected $route = 'estoque/default';
  18. protected $jsIndex = array('contrato/index.js');
  19. protected $jsFormulario = array('contrato/formulario.js');
  20. /**
  21. * Método padrão de formulário
  22. * @return |Application\Controller\ViewModel
  23. */
  24. public function formularioAction()
  25. {
  26. //Instancia o formulário e a requisição
  27. $form = $this->getServiceLocator()->get($this->nameForm);
  28. $request = $this->getRequest();
  29. $empenhos = array();
  30. //Verifica se a requisição foi feita via post
  31. if ($request->isPost()) {
  32. //Busca os dados
  33. $dados = $request->getPost()->toArray();
  34. if ($this->params()->fromRoute('id')) {
  35. $dados['id'] = $this->params()->fromRoute('id');
  36. //Busca Empenhos relacionados com o contrato para carregar a lista de empenhos que existe
  37. $empenhos = $this->getServiceLocator()->get('Estoque\Repository\EmpenhoRepository')->getEmpenhosPorContrato($this->params()->fromRoute('id'));
  38. }
  39. if ($dados['fornecedor']) {
  40. $retorno = $this->getServiceLocator()->get('Estoque\Repository\FornecedorRepository')->findAll();
  41. foreach ($retorno as $value) {
  42. if($value->getAtivo()) {
  43. $fornecedores[$value->getId()] = $value->getNome()." (".$value->getCnpj().")";
  44. }
  45. }
  46. natsort($fornecedores);
  47. $fornecedores = ['' => 'Selecione o Fornecedor'] + $fornecedores;
  48. $form->get('fornecedor')->setValueOptions($fornecedores);
  49. $form->get('fornecedor')->setValue($dados['fornecedor'][0]);
  50. }
  51. $arEmpenhos = isset($dados['empenho']) ? $dados['empenho'] : [];
  52. $dados['provisorio'] = '';
  53. $form->setData($dados);
  54. //Valida o formulário
  55. if ($form->isValid($arEmpenhos)) {
  56. $service = $this->getServiceLocator()->get($this->nameService);
  57. $success = $service->save($dados);
  58. $this->setConfirmMessages($success);
  59. return $this->redirect()->toRoute($this->route, array('controller' => $this->controller));
  60. } else {
  61. $empenhos = [];
  62. foreach ($dados['empenho'] as $key => $value) {
  63. $empenhos[$key]['empenho'] = $value;
  64. $empenhos[$key]['numEmpenho'] = $dados['numEmpenhos'][$key];
  65. $empenhos[$key]['dataEmpenho'] = $dados['dataEmpenhos'][$key];
  66. $empenhos[$key]['hiddenValorEmpenho'] = $dados['valorEmpenhos'][$key];
  67. $empenhos[$key]['valorEmpenho'] = number_format($dados['valorEmpenhos'][$key], 2, ',', '.');
  68. $empenhos[$key]['observacao'] = $dados['observacoes'][$key];
  69. $empenhos[$key]['provisorios'] = ($dados['provisorios'][$key]) ? 'true' : 'false';
  70. //Valida vinculo com pedido
  71. $empenho = $this->getServiceLocator()->get('Estoque\Repository\EmpenhoRepository')->getEmpenhosPorContrato($value);
  72. if ($empenho) {
  73. $arPedido = $this->getServiceLocator()->get('Estoque\Repository\PedidoRepository')->findBy(['empenho' => $value]);
  74. //Caso haja vinculo com pedido o empenho não pode ser deletado
  75. if ($arPedido) {
  76. $empenhos[$key]['boolDeletavel'] = false;
  77. }
  78. }else{
  79. $empenhos[$key]['boolDeletavel'] = true;
  80. }
  81. }
  82. $form->get('hiddenValorTotalEmpenhado')
  83. ->setAttributes([
  84. 'id' => 'hiddenValorTotalEmpenhado',
  85. 'value' => $dados['hiddenValorTotalEmpenhado']
  86. ]);
  87. //Carregar dados do fornecedor para o formulario
  88. $retorno = $this->getServiceLocator()->get('Estoque\Repository\FornecedorRepository')->findAll();
  89. foreach ($retorno as $value) {
  90. if($value->getAtivo()) {
  91. $fornecedores[$value->getId()] = $value->getNome()." (".$value->getCnpj().")";
  92. }
  93. }
  94. natsort($fornecedores);
  95. $fornecedores = ['' => 'Selecione o Fornecedor'] + $fornecedores;
  96. $form->get('fornecedor')->setValueOptions($fornecedores);
  97. if (isset($dados['fornecedor'][0])) {
  98. $form->get('fornecedor')->setValue($dados['fornecedor'][0]);
  99. }
  100. $this->flashMessenger()->addErrorMessage('Por favor, verifique os campos do formulário');
  101. }
  102. //Vem da URL ou Edição
  103. } elseif ($this->params()->fromRoute('id')) {
  104. //Busca dados Contrato
  105. $dados = $this->getServiceLocator()->get($this->nameRepository)->find($this->params()->fromRoute('id'));
  106. //Busca Empenhos relacionados com o contrato para carregar a lista de empenhos que existe
  107. $empenhos = $this->getServiceLocator()->get('Estoque\Repository\EmpenhoRepository')->getEmpenhosPorContrato($this->params()->fromRoute('id'));
  108. //Atribuindo o valor total deos empenhos na label
  109. $valorTotalEmpenhos = 0.00;
  110. foreach ($empenhos as $key => $value) {
  111. $valorTotalEmpenhos += $value['valorEmpenho'];
  112. $arPedido = $this->getServiceLocator()->get('Estoque\Repository\PedidoRepository')->findBy(['empenho' => $value['empenho']]);
  113. //Caso haja vinculo com pedido o empenho não pode ser deletado
  114. $empenhos[$key]['boolDeletavel'] = true;
  115. if ($arPedido) {
  116. $empenhos[$key]['boolDeletavel'] = false;
  117. }
  118. }
  119. $form->get('hiddenValorTotalEmpenhado')
  120. ->setAttributes([
  121. 'id' => 'hiddenValorTotalEmpenhado',
  122. 'value' => number_format($valorTotalEmpenhos, 2, '.', ',')
  123. ]);
  124. if ($dados) {
  125. $dados = $dados->toArray();
  126. $dados['valor'] = number_format($dados['valor'], 2, ',', '.');
  127. $dados['hiddenValorDisponivel'] = $dados['valor'] - $valorTotalEmpenhos;
  128. $dados['hiddenDataVencimento'] = $dados['dataVencimento'];
  129. $dados['hiddenNumContrato'] = $dados['numContrato'];
  130. $form->setData($dados);
  131. $retorno = $this->getServiceLocator()->get('Estoque\Repository\FornecedorRepository')->findAll();
  132. foreach ($retorno as $value) {
  133. if($value->getAtivo()) {
  134. $fornecedores[$value->getId()] = $value->getNome()." (".$value->getCnpj().")";
  135. }
  136. }
  137. natsort($fornecedores);
  138. $fornecedores = ['' => 'Selecione o Fornecedor'] + $fornecedores;
  139. $form->get('fornecedor')->setValueOptions($fornecedores);
  140. $form->get('fornecedor')->setValue($dados['fornecedor']->getId());
  141. }
  142. } else {
  143. $dados = $this->getServiceLocator()->get('Estoque\Repository\FornecedorRepository')->findAll();
  144. foreach ($dados as $value) {
  145. if($value->getAtivo()){
  146. $fornecedores[$value->getId()] = $value->getNome()." (".$value->getCnpj().")";
  147. }
  148. }
  149. natsort($fornecedores);
  150. $fornecedores = ['' => 'Selecione o Fornecedor'] + $fornecedores;
  151. $form->get('fornecedor')->setValueOptions($fornecedores);
  152. }
  153. //Seta os scripts e retorna para view
  154. if ($this->verifyPermission('contrato', 'incluir')) {
  155. if (!empty($this->jsFormulario)) {
  156. $this->layout()->setVariable('scripts', $this->jsFormulario);
  157. }
  158. }else{
  159. //Seta os scripts e retorna para view
  160. $this->layout()->setVariable('scripts', array('contrato/formularioVisualiza.js'));
  161. }
  162. //Retorna os dados da view Model
  163. return new ViewModel(array('form' => $form, 'empenhos' => $empenhos));
  164. }
  165. /**
  166. * Retorna todos os fornecedores
  167. * @param boolean $fornecedor
  168. * @param boolean $json
  169. * @return mixed
  170. */
  171. public function getFornecedoresAction($fornecedor = false, $json = true)
  172. {
  173. if (!$fornecedor) {
  174. //Busca os dados da requisição
  175. $request = $this->getRequest()->getPost()->toArray();
  176. $fornecedor = $request['fornecedor'];
  177. }
  178. //Busca os fornecedores
  179. $fornecedores = $this->getServiceLocator()->get('Estoque\Repository\FornecedorRepository')->findBy(array('id' => $fornecedor));
  180. if ($json) {
  181. foreach ($fornecedores as $k => $value) {
  182. if($value->getAtivo()) {
  183. $array[$k]['id'] = $value->getId();
  184. $array[$k]['nome'] = $value->getNome();
  185. }
  186. }
  187. } else {
  188. foreach ($fornecedores as $value) {
  189. if($value->getAtivo()) {
  190. $fornecedores[$value->getId()] = $value->getNome()." (".$value->getCnpj().")";
  191. }
  192. }
  193. }
  194. if ($json) {
  195. echo Json::encode($array);
  196. die();
  197. } else {
  198. return $array;
  199. }
  200. }
  201. public function paginacaoAction()
  202. {
  203. //Armazena a resposta
  204. $response = $this->getResponse();
  205. //Armazena a requisição
  206. $request = $this->getRequest()->getPost();
  207. //Organiza os dados da busca
  208. $busca = array(
  209. "busca" => mb_strtolower($request['search']['value'], 'UTF-8')
  210. );
  211. //Cria a ordenação
  212. $order = array();
  213. if (isset($request['order'][0]['column'])) {
  214. switch ($request['order'][0]['column']) {
  215. case 1:
  216. $order = array('field' => 'c.numContrato', 'order' => $request['order'][0]['dir']);
  217. break;
  218. case 2:
  219. $order = array('field' => 'f.nome', 'order' => $request['order'][0]['dir']);
  220. break;
  221. case 3:
  222. $order = array('field' => 'c.numProcessoLicitatorio', 'order' => $request['order'][0]['dir']);
  223. break;
  224. case 4:
  225. $order = array('field' => 'valor', 'order' => $request['order'][0]['dir']);
  226. break;
  227. case 5:
  228. $order = array('field' => 'disponivel', 'order' => $request['order'][0]['dir']);
  229. break;
  230. }
  231. }
  232. //Busca os dados
  233. $registros = $this->getServiceLocator()->get($this->nameRepository)->buscaContratos($busca, $request['length'], $request['start'], $order, false);
  234. $registrosTotaisBusca = $this->getServiceLocator()->get($this->nameRepository)->buscaContratos($busca, 0, 0, array(), true);
  235. $registrosTotais = $this->getServiceLocator()->get($this->nameRepository)->countAll();
  236. $dados = array();
  237. //Armazena os dados retornados em um array
  238. foreach ($registros as $registro) {
  239. $valor = array();
  240. $valor[] = "<input type='checkbox' name='checkbox-list' class='checkboxes' value='" . $registro['id'] . "' />";
  241. $dadosUser = $this->getFiltrosSelecionadosUser();
  242. if ($this->verifyPermission('contrato', 'editar')) {
  243. $arr = array(
  244. 'route' => $this->route,
  245. 'controller' => $this->controller,
  246. 'action' => 'formulario',
  247. 'id' => $registro['id']
  248. );
  249. $title = 'Editar Contrato';
  250. $valor[] = "<div class='text-center'><a href='" . $this->urls($arr) . "' title='" . $title . "'>" . $registro['numContrato'] . "</a></div>";
  251. } else {
  252. $valor[] = "<div class='text-center'>" . $registro['numContrato'] . "</div>";
  253. }
  254. $ativo = $registro['ativo'] ? 'Ativo' : 'Inativo';
  255. $registro['cnpj'] = substr($registro['cnpj'], 0, 2) . '.' . substr($registro['cnpj'], 2, 3) .
  256. '.' . substr($registro['cnpj'], 5, 3) . '/' .
  257. substr($registro['cnpj'], 8, 4) . '-' . substr($registro['cnpj'], 12, 2);
  258. $nomeFornecedorCnpj = $registro['nome'] ." (".$registro['cnpj'].")";
  259. $valor[] = "<div class='text-left'>" . $nomeFornecedorCnpj ."</div>";
  260. $valor[] = "<div class='text-center'>" . $registro['numProcessoLicitatorio'] . "</div>";
  261. $valor[] = "<div class='text-right'>R$: " . number_format($registro['disponivel'], 2, ',', '.') . "</div>";
  262. $valor[] = "<div class='text-right'>R$: " . number_format($registro['valor'], 2, ',', '.') . "</div>";
  263. $valor[] = "<div class='text-center'>" . $ativo . "</div>";
  264. $dados[] = $valor;
  265. }
  266. //Organiza o retorno
  267. $retorno['draw'] = $request['draw'];
  268. $retorno['recordsTotal'] = $registrosTotais;
  269. $retorno['recordsFiltered'] = $registrosTotaisBusca;
  270. $retorno['data'] = $dados;
  271. //Retorna a resposta
  272. $response->setContent(\Zend\Json\Json::encode($retorno));
  273. return $response;
  274. }
  275. }