<?php
class Grupos extends MY_Controller
{

function __construct(){
	parent::__construct();
	$this->load->model('companies_model');
}

function index(){
	$this->lista();
	}

function acceso_restringido() {
	$data['content']='acceso_restringido';
	$this->load->view('v_content',$data);
}

function check_access () {
	$this->load->library('sec_validation');
	$result = $this->sec_validation->login_check_access($this->session->userdata('usuario_id'),$this->router->fetch_class(),$this->router->fetch_method());
	if (!$result) {
	$this->session->set_flashdata('message_error', 'Acceso Restringido=>'.$this->router->fetch_class()."/".$this->router->fetch_method());
	redirect('usuarios/acceso_restringido');
	}
}

function lista(){
	// Valida Acceso
	$this->check_access();

	$data['grupos'] = $this->companies_model->get_companies_groups();
	$data['content']='admin/grupos/lista';
	$this->load->view('v_content',$data);
	}

function ver($id= null){

	// Valida Acceso
	$this->check_access();

	// Sin parametro
	if (is_null($id)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_grupos_msg_noexiste'));
		redirect('grupos/lista');
	  }

	$grupo = $this->companies_model->get_company_group($id);
	// No existe
	if (empty($grupo)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_grupos_msg_noexiste'));
		redirect('grupos/lista');
	  }
	$data['grupo'] = $grupo;
	$data['empresas'] = $this->companies_model->get_companies($id);
	//echo $this->db->last_query();
	$data['logs'] = $this->companies_model->get_company_group_log($id);
	$data['content']='admin/grupos/ver';
	$this->load->view('v_content',$data);

	}

function editar($id= null,$origen="lista"){
	// Valida Acceso
	$this->check_access();

	// Sin parametro
	if (is_null($id)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_grupos_msg_noexiste'));
		redirect('grupos/lista');
	  }

	$grupo = $this->companies_model->get_company_group($id);
	// No existe
	if (empty($grupo)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_grupos_msg_noexiste'));
		redirect('grupos/lista');
	  }

	$this->load->library('form_validation');

   if(isset($_POST["cancelar"])) {
		$this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_cancelado'));
		if ($origen=="ver") { redirect('grupos/ver/'.$id);} else {redirect('grupos/lista');}
   }

	if (!empty($_POST))
	{
		$this->form_validation->set_rules('nombre', 'lang:eap_grupos_nombre', 'required|trim|max_length[100]|xss_clean|callback_validar_unico['.$id.']');

		$this->form_validation->run();
	}

   if($this->form_validation->run()){

		$historial='';

		$data['fecha_modificacion'] = date("Y-m-d H:i:s");
		$data['id_usuario_modificacion'] = $this->session->userdata('usuario_id');
		if($this->input->post('nombre') != $grupo['nombre']) {$data['nombre'] = $this->input->post('nombre');$historial.="Nombre@@$grupo[nombre]@@$data[nombre]||";}

		if ($this->companies_model->set_company_group($id, $data)){
			// GUARDA LOG
			$data_log = array(
				'id_grupos' => $id,
				'fecha' => date("Y-m-d H:i:s"),
				'modificador' => $this->session->userdata('usuario_nombre_apellido'),
				'modificaciones' => $historial);
			$this->companies_model->set_company_group_log($data_log);
			$this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_guardado'));
			if ($origen=="ver") { redirect('grupos/ver/'.$id);} else {redirect('grupos/lista');}
			//echo $this->db->last_query();
		} else {
			$this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_guardado_error'));
		}
   }


	$data['origen']= $origen;
	$data['grupo'] = $grupo;
	$data['logs'] = $this->companies_model->get_company_group_log($id);
	$data['content']='admin/grupos/editar';
	$this->load->view('v_content',$data);

	}

function nuevo(){
	// Valida Acceso
	$this->check_access();

	$this->load->library('form_validation');

   if(isset($_POST["cancelar"])) {
		$this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_cancelado_nuevo'));
		redirect('grupos/lista');
   }

	if (!empty($_POST))
	{
		$this->form_validation->set_rules('nombre', 'lang:eap_grupos_nombre', 'required|trim|max_length[100]|xss_clean|callback_validar_unico');
		$this->form_validation->run();
	}

   if($this->form_validation->run()){
		$historial='';
		$data['fecha_creacion'] = date("Y-m-d H:i:s");
		$data['id_usuario_creacion'] = $this->session->userdata('usuario_id');
		$data['fecha_modificacion'] = date("Y-m-d H:i:s");
		$data['id_usuario_modificacion'] = $this->session->userdata('usuario_id');
		if($this->input->post('nombre') != "") {$data['nombre'] = $this->input->post('nombre');$historial.="Nombre@@@@$data[nombre]||";}

		$id=$this->companies_model->set_company_group('', $data,'insert');

		if (is_numeric($id)){
			// Guardar LOG de Modificacion
			$data_log = array(
				'id_grupos' => $id,
				'fecha' => date("Y-m-d H:i:s"),
				'modificador' => $this->session->userdata('usuario_nombre_apellido'),
				'modificaciones' => $historial);
			$this->companies_model->set_company_group_log($data_log);

			$this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_guardado'));
			redirect('grupos/ver/'.$id);
			//echo $this->db->last_query();
		} else {
			$this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_guardado_error'));
		}
   }


	$grupo = array(
		'nombre'=>'');

	$data['grupo'] = $grupo;
	$data['content']='admin/grupos/nuevo';
	$this->load->view('v_content',$data);

	}


function cambiar_estado($id=null,$estado=null) {
	// Valida Acceso
	$this->check_access();

	if (is_null($id) or is_null($estado)) {
		$this->session->set_flashdata('message_error', $this->lang->line('eap_grupos_msg_guardado_estado_error'));
		redirect('grupos/lista');
	}

	switch ($estado) {
		case "activar":
			$this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_activado'));
			if (!$this->companies_model->set_status_company_group($id,true)) { $this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_guardado_estado_error')); }
			redirect('grupos/lista');
			break;
		case "desactivar":
			$this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_desactivado'));
			if (!$this->companies_model->set_status_company_group($id,false)) { $this->session->set_flashdata('message', $this->lang->line('eap_grupos_msg_guardado_estado_error')); }
			redirect('grupos/lista');
			break;
		default:
			$this->session->set_flashdata('message_error', $this->lang->line('eap_grupos_msg_guardado_estado_error'));
			redirect('grupos/lista');
	}
}

function validar_unico ($nombre=null,$id=null){
   if ($this->companies_model->is_unique_group($nombre,$id)) {
	   return TRUE;
   } else {
	   $this->form_validation->set_message('validar_unico', $this->lang->line('eap_grupos_msg_validar_unico').'==>'.$nombre.'ID=>'.$id);
	   return FALSE;
   }
}

function exportar_excel($id=0,$estado=-1,$full=0){

		// Valida Acceso
		$this->check_access();

		if ($id != 0) {
			$grupo = $this->companies_model->get_company_group($id);
			// No existe
			if (empty($grupo)) {
				$this->session->set_flashdata('message_error', $this->lang->line('eap_grupos_msg_noexiste'));
				redirect('grupos/lista');
			  }
			$nombre = $grupo['nombre'];
		}

		if ($full==1) {
			$grupos = $this->companies_model->get_sites(0,$estado,1,$id);
		}else{
			$grupos = $this->companies_model->get_companies($id,$estado,1);
		}

		//echo $this->db->last_query();
    if(count($grupos) > 0){

        //Cargamos la librería de excel.
        $this->load->library('excel'); $this->excel->setActiveSheetIndex(0);
        $this->excel->getActiveSheet()->setTitle('Grupos');
        //Contador de filas
        $contador = 1;
        //Le aplicamos ancho las columnas.
        $this->excel->getActiveSheet()->getColumnDimension('A')->setWidth(40);
        $this->excel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
        $this->excel->getActiveSheet()->getColumnDimension('C')->setWidth(40);
				$this->excel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
				if($full==1) {
					$this->excel->getActiveSheet()->getColumnDimension('E')->setWidth(40);
					$this->excel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
				}

        //Le aplicamos negrita a los títulos de la cabecera.
        $this->excel->getActiveSheet()->getStyle("A{$contador}")->getFont()->setBold(true);
        $this->excel->getActiveSheet()->getStyle("B{$contador}")->getFont()->setBold(true);
        $this->excel->getActiveSheet()->getStyle("C{$contador}")->getFont()->setBold(true);
				$this->excel->getActiveSheet()->getStyle("D{$contador}")->getFont()->setBold(true);
				if($full==1) {
					$this->excel->getActiveSheet()->getStyle("E{$contador}")->getFont()->setBold(true);
					$this->excel->getActiveSheet()->getStyle("F{$contador}")->getFont()->setBold(true);
				}
        //Definimos los títulos de la cabecera.
        $this->excel->getActiveSheet()->setCellValue("A{$contador}", 'Nombre Grupo');
        $this->excel->getActiveSheet()->setCellValue("B{$contador}", 'Estado Grupo');
        $this->excel->getActiveSheet()->setCellValue("C{$contador}", 'Nombre Empresa');
				$this->excel->getActiveSheet()->setCellValue("D{$contador}", 'Estado Empresa');
				if($full==1) {
					$this->excel->getActiveSheet()->setCellValue("E{$contador}", 'Nombre Sede');
					$this->excel->getActiveSheet()->setCellValue("F{$contador}", 'Estado Sede');
				}
        //Definimos la data del cuerpo.
        foreach($grupos as $g){
           //Incrementamos una fila más, para ir a la siguiente.
           $contador++;
           //Informacion de las filas de la consulta.
           $this->excel->getActiveSheet()->setCellValue("A{$contador}", $g->grupo_nombre);
           $this->excel->getActiveSheet()->setCellValue("B{$contador}", $g->grupo_estado);
           $this->excel->getActiveSheet()->setCellValue("C{$contador}", $g->empresa_nombre);
					 $this->excel->getActiveSheet()->setCellValue("D{$contador}", $g->empresa_estado);
					 if($full==1) {
					 	$this->excel->getActiveSheet()->setCellValue("E{$contador}", $g->sede_nombre);
					 	$this->excel->getActiveSheet()->setCellValue("F{$contador}", $g->sede_estado);
					}
        }

				if($full != 1) {
					//$this->excel->getActiveSheet()->removeColumn('F');
					$this->excel->getActiveSheet()->removeColumn('D');
					$this->excel->getActiveSheet()->removeColumn('B');
				}


        //Le ponemos un nombre al archivo que se va a generar.
				$arch = "";
				if ($full==1) {$arch = "_full";}
        if ($id != 0) {
					$archivo = "grupo$arch{$id}_{$nombre}.xls";
				} else {
					$archivo = "grupos$arch.xls";
				}
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$archivo.'"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');
        //Hacemos una salida al navegador con el archivo Excel.
        $objWriter->save('php://output');
     }else{
			 $this->session->set_flashdata('message', "No se han encontrado datos para exportar");
	 		 redirect('grupos/lista');
     }
  }

}
