PageRenderTime 46ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/controllers/comunas_controller.php

https://github.com/pvalencia/CoordinaChile
PHP | 231 lines | 197 code | 27 blank | 7 comment | 29 complexity | 0ceac0b91ba377b8b7c0a41ad8d43367 MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. class ComunasController extends AppController {
  3. var $name = 'Comunas' ;
  4. var $helpers = array('Regiones');
  5. var $uses = array('Comuna', 'Operativo', 'Catastro');
  6. function beforeFilter() {
  7. parent::beforeFilter();
  8. $this->Auth->allow(array('ver', 'index', 'todos', 'mapa'));
  9. }
  10. function index(){
  11. $comunas = $this->Comuna->find('list', array('fields' => array('Comuna.id', 'Comuna.nombre')) );
  12. $localidades_con_operativos = $this->Operativo->find('list', array('fields' => 'Operativo.localidad_id' ) );
  13. if(count($localidades_con_operativos) != 0)
  14. $localidades_operativos = $this->Operativo->Localidad->find('all', array('conditions' => array('Localidad.id' => $localidades_con_operativos), 'order' => array('Comuna.nombre' => 'ASC', 'Localidad.nombre' => 'ASC') ) );
  15. else
  16. $localidades_operativos = array();
  17. $localidades_con_operativos = array();
  18. $operativos = array();
  19. foreach($localidades_operativos as $localidad) {
  20. if(!array_key_exists($localidad['Comuna']['id'], $operativos))
  21. $operativos[$localidad['Comuna']['id']] = 0;
  22. $operativos[$localidad['Comuna']['id']] += count($localidad['Operativo']);
  23. }
  24. $localidades_operativos = array();
  25. $localidades_con_catastros = $this->Catastro->find('list', array('fields' => 'Catastro.localidad_id'));
  26. if(count($localidades_con_catastros) != 0)
  27. $localidades_catastros = $this->Operativo->Localidad->find('all', array('conditions' => array('Localidad.id' => $localidades_con_catastros), 'order' => array('Localidad.nombre' => 'ASC') ) );
  28. else
  29. $localidades_catastros = array();
  30. $localidades_con_catastros = array();
  31. $catastros = array();
  32. foreach($localidades_catastros as $localidad) {
  33. if(!array_key_exists($localidad['Comuna']['id'], $catastros))
  34. $catastros[$localidad['Comuna']['id']] = 0;
  35. $catastros[$localidad['Comuna']['id']] += count($localidad['Catastro']);
  36. }
  37. $this->set(compact('comunas', 'operativos', 'catastros'));
  38. }
  39. function ver($comuna_id) {
  40. $comuna = $this->Comuna->find('first', array('conditions' => array('Comuna.id' => $comuna_id),
  41. 'recursive' => 0) );
  42. if($comuna == null)
  43. $this->cakeError('error404');
  44. $localidades = $this->Comuna->Localidad->find('list', array('conditions' => array('Localidad.comuna_id' => $comuna_id),
  45. 'fields' => array('Localidad.id')) );
  46. $operativos = $this->Operativo->find('all', array('conditions' => array('Operativo.localidad_id' => $localidades),
  47. 'order' => array('Operativo.fecha_llegada' => 'DESC'),
  48. 'recursive' => -1 ) );
  49. $catastros = $this->Catastro->find('all', array('conditions' => array('Catastro.localidad_id' => $localidades),
  50. 'order' => array('Catastro.fecha' => 'DESC'),
  51. 'recursive' => -1 ) );
  52. $organizaciones = $this->Catastro->Organizacion->find('list', array('fields' => array('Organizacion.id', 'Organizacion.nombre')));
  53. $localidades_db = $this->Comuna->Localidad->find('all', array('conditions' => array('Localidad.comuna_id' => $comuna_id)) );
  54. foreach($localidades_db as $localidad_db){
  55. $localidad = array();
  56. $localidad['id'] = $localidad_db['Localidad']['id'];
  57. $localidad['nombre'] = $localidad_db['Localidad']['nombre'];
  58. $localidad['lat'] = $localidad_db['Localidad']['lat'];
  59. $localidad['lon'] = $localidad_db['Localidad']['lon'];
  60. $ids_catastros = array();
  61. foreach($localidad_db['Catastro'] as $catastro){
  62. $ids_catastros[] = $catastro['id'];
  63. }
  64. $localidad['catastros'] = $ids_catastros;
  65. $ids_operativos = array();
  66. foreach($localidad_db['Operativo'] as $operativo){
  67. $ids_operativos[] = $operativo['id'];
  68. }
  69. $localidad['operativos'] = $ids_operativos;
  70. $localidades[$localidad['id']] = $localidad;
  71. }
  72. $this->set(compact('comuna', 'catastros', 'operativos', 'localidades', 'organizaciones'));
  73. }
  74. function todos(){
  75. $this->index();
  76. $this->render('index');
  77. }
  78. function mapa($full = false){
  79. /* $comunas = $this->Comuna->find('list', array('fields' => array('Comuna.lat', 'Comuna.lon', 'Comuna_nombre'),
  80. 'conditions' => array('Localidad')));*/
  81. /*$localidades = $this->Operativo->find('list',
  82. array('fields' => array('Operativo.localidad_id'),
  83. 'conditions' => array("julianday(Operativo.fecha_llegada) + Operativo.duracion > julianday(date('now'))" )
  84. )); */
  85. $operativos = $this->Operativo->find('list', array('fields' => array('Operativo.id', 'Operativo.duracion', 'Operativo.fecha_llegada')));
  86. $operativos_activos = array();
  87. $operativos_programados = array();
  88. $operativos_realizados = array();
  89. $now = time();
  90. foreach($operativos as $fecha_llegada => $list_operativo){
  91. $time_inicio = strtotime($fecha_llegada);
  92. foreach($list_operativo as $key => $duracion){
  93. if($duracion==""){
  94. $duracion = 1;
  95. }
  96. //$time_fin = mktime(0, 0, 0, date('m', $time_inicio), date('d', $time_inicio)+$duracion, date('Y', $time_inicio));
  97. $time_fin = strtotime($fecha_llegada)+(($duracion-1)*24*60*60);
  98. if($now >= $time_inicio && $now <= $time_fin){
  99. $operativos_activos[] = $key;
  100. }elseif($now < $time_inicio){
  101. $operativos_programados[] = $key;
  102. }elseif($now > $time_fin){
  103. $operativos_realizados[] = $key;
  104. }
  105. }
  106. }
  107. $localidades = false;
  108. $todos_operativos = array_merge($operativos_activos, $operativos_programados, $operativos_realizados);
  109. if(count($todos_operativos) > 0){
  110. $localidades = $this->Operativo->find('list', array('fields' => array('Operativo.localidad_id'),
  111. 'conditions' => array('Operativo.id' => array_values($todos_operativos))));
  112. }
  113. if($localidades){
  114. $comunas_id = $this->Comuna->Localidad->find('list', array('fields' => array('Localidad.id', 'Localidad.comuna_id'), 'conditions' => array('Localidad.id' => $localidades)));
  115. $comunas_db = $this->Comuna->find('all', array('recursive' => 1,
  116. 'conditions' => array('id' => array_values($comunas_id))
  117. ));
  118. $comunasactivos = $this->get_info_comunas($comunas_db, $operativos_activos, $comunas_id);
  119. $comunasprogramados = $this->get_info_comunas($comunas_db, $operativos_programados, $comunas_id);
  120. $comunasrealizados = $this->get_info_comunas($comunas_db, $operativos_realizados, $comunas_id);
  121. }else{
  122. $comunasactivos = array();
  123. $comunasprogramados = array();
  124. $comunasrealizados = array();
  125. }
  126. if($full)
  127. $this->layout = 'completa';
  128. $this->set(compact('comunasactivos', 'comunasprogramados', 'comunasrealizados', 'full'));
  129. }
  130. function get_info_comunas($comunas_db, $ids_operativos, $comunas_id){
  131. if(count($ids_operativos) == 0)
  132. return array();
  133. $comunas = array();
  134. $recursos = $this->Operativo->Recurso->find('all', array('conditions' => array('Operativo.id' => $ids_operativos)));
  135. $ids_salud = array(12, 13, 14);
  136. $ids_vivienda_voluntarios = array(11, 15, 16);
  137. $ids_vivienda_vivienda = array(20);
  138. $ids_humanitaria_voluntarios = array(21);
  139. $ids_humanitaria_recursos = array(1, 2, 3, 4, 5, 8, 9, 10, 19, 22);
  140. $ids_otros = array(6, 7, 17, 18, 23);
  141. foreach($recursos as $recurso){
  142. $comuna_id = $comunas_id[$recurso['Operativo']['localidad_id']];
  143. if(array_key_exists($comuna_id, $comunas) == false){
  144. foreach($comunas_db as $comuna_all){
  145. if($comuna_all['Comuna']['id'] == $comuna_id){
  146. $comuna = $comuna_all['Comuna'];
  147. $nom = $comuna['nombre'];
  148. $comuna_id = $comuna['id'];
  149. $comunas[$comuna_id] = array();
  150. $comunas[$comuna_id]['nombre'] = $nom;
  151. $comunas[$comuna_id]['lat'] = $comuna['lat'];
  152. $comunas[$comuna_id]['lon'] = $comuna['lon'];
  153. $comunas[$comuna_id]['Recursos']['salud_vol'] = 0;
  154. $comunas[$comuna_id]['Recursos']['vivienda_vol'] = 0;
  155. $comunas[$comuna_id]['Recursos']['vivienda_viv'] = 0;
  156. $comunas[$comuna_id]['Recursos']['humanitaria_vol'] = 0;
  157. $comunas[$comuna_id]['Recursos']['humanitaria_rec'] = 0;
  158. $comunas[$comuna_id]['Recursos']['otros_rec'] = 0;
  159. $comunas[$comuna_id]['id'] = $comuna_id;
  160. break;
  161. }
  162. }
  163. }
  164. $id = $recurso['Recurso']['tipo_recurso_id'];
  165. $cantidad = $recurso['Recurso']['cantidad'];
  166. if(in_array($id, $ids_salud))
  167. $comunas[$comuna_id]['Recursos']['salud_vol'] += $cantidad;
  168. elseif(in_array($id, $ids_vivienda_voluntarios))
  169. $comunas[$comuna_id]['Recursos']['vivienda_vol'] += $cantidad;
  170. elseif(in_array($id, $ids_vivienda_vivienda))
  171. $comunas[$comuna_id]['Recursos']['vivienda_viv'] += $cantidad;
  172. elseif(in_array($id, $ids_humanitaria_voluntarios))
  173. $comunas[$comuna_id]['Recursos']['humanitaria_vol'] += $cantidad;
  174. elseif(in_array($id, $ids_humanitaria_recursos))
  175. $comunas[$comuna_id]['Recursos']['humanitaria_rec'] += $cantidad;
  176. elseif(in_array($id, $ids_otros))
  177. $comunas[$comuna_id]['Recursos']['humanitaria_rec'] += $cantidad;
  178. }
  179. return $comunas;
  180. }
  181. function get_comunas($region_id = 0){
  182. if($region_id != 0)
  183. $comunas = $this->Comuna->find('list', array('fields' => array('id', 'nombre'), 'conditions' => array('Comuna.id BETWEEN ? AND ?' => array($region_id*1000, ($region_id*1000 + 999)) ), 'order' => array('Comuna.nombre' => 'ASC') ) );
  184. else
  185. $comunas = $this->Comuna->find('list', array('fields' => array('id', 'nombre'), 'order' => array('Comuna.nombre' => 'ASC')) );
  186. $this->set(compact('comunas'));
  187. }
  188. function editar($id = null) {
  189. $comuna = $this->Comuna->find('first', array('conditions' => array('Comuna.id' => $id)));
  190. if($comuna == null) {
  191. $this->Session->setFlash('No existe la comuna');
  192. $this->redirect('/');
  193. }
  194. if(isset($this->data['Comuna'])) {
  195. if($this->Comuna->save($this->data['Comuna'])) {
  196. $this->redirect(array('controller' => 'comunas', 'action' => 'ver', $this->data['Comuna']['id']));
  197. } else {
  198. $this->Session->setFlash('Problemas con el formulario.');
  199. }
  200. }
  201. $this->data = $comuna;
  202. }
  203. }
  204. ?>