<?php
class Tareas extends CI_Controller
{
    protected $_fechaActual;
    protected $_iduser;
    protected $_csstyle;
    protected $_tables;
    protected $_Variables;
    protected $_role;

    function __construct()
	{
		 parent::__construct();
	
		if( ! $this->redux_auth->logged_in() )
		{
			redirect(base_url().'login');
		}
		
		$this->config->load('datatables', TRUE);
		
		$datestring  		= "%Y-%m-%d";
		$this->_fechaActual = mdate($datestring,now());
		$this->_iduser 		= $this->session->userdata('id');
		$this->_role 		= $this->session->userdata('role');
		$this->_tables 		= $this->config->item('datatables');

        $this->load->model("modelousuario","modelousuario");
        $this->load->model("modeloclientes","clientes");
        $this->load->model('proveedores_model','proveedores');
        $this->load->model("modelo_configuracion","configuracion");
		$this->load->model("soporte_modelo","soporte");
		$this->load->model("notatemporal_modelo","notatemporal");
		$this->load->model("facturacion_modelo","facturacion");
		
        $this->_Variables	= $this->configuracion->getAllVariables();
	}
	
	public function enviarNotificaciones($criterio)
	{
		$this->notificarSeguimiento($criterio);
		$this->notificarPronostico($criterio);
	}
	
	public function notificarSeguimiento($criterio)
	{
		$fecha			=$this->clientes->obtenerFechaAnterior($this->_fechaActual,1,'day');
		
		if($criterio=='diario')
		{
			$fecha		=$this->_fechaActual;
		}
		
		$responsables	=$this->clientes->obtenerListaResponsables($fecha);
		$configuracion	=$this->configuracion->obtenerConfiguraciones(1);
		
		foreach($responsables as $res)
		{
			$seguimiento	=$this->clientes->obtenerSeguimientoResponsables($fecha,$res->idResponsable);
			$mensaje		='';
			
			foreach($seguimiento as $row)
			{
				$mensaje		.='<strong>Fecha: </strong>'.obtenerFechaMesCortoHora($row->fecha).'<br />';
				$mensaje		.='<strong>Cliente: </strong>'.$row->empresa.'<br />';
				$mensaje		.='<strong>Status: </strong> '.$row->status.'<br />';
				$mensaje		.='<strong>Servicio: </strong> '.$row->servicio.'<br />';
				$mensaje		.='<strong>Lugar: </strong> '.$row->lugar.'<br />';
				$mensaje		.='<strong>Comentarios: </strong> '.$row->comentarios.'
				<br /><br />
				<hr>
				<br /><br />';
			}
			
			if(strlen($mensaje)>0)
			{
				$this->enviarCorreoSeguimiento($res->correo,$mensaje,$configuracion,$fecha);
			}
		}
	}

	public function enviarCorreoSeguimiento($destinatario,$mensaje,$configuracion,$fecha)
	{
		$asunto			='Lista de seguimientos fecha '.obtenerFechaMesCorto($fecha);

		$this->load->library('email');
		$this->email->from($configuracion->correo,$configuracion->nombre);
		$this->email->to($destinatario);
		$this->email->subject($asunto);
		$this->email->message($mensaje);
		#$this->email->type('html');
		
		if (!$this->email->send())
		{
			#print("0");
		}
		else
		{
			#print("1");
		}
	}
	
	public function notificarPronostico($criterio)
	{
		$fecha			=$this->clientes->obtenerFechaAnterior($this->_fechaActual,1,'day');
		
		if($criterio=='diario')
		{
			$fecha		=$this->_fechaActual;
		}
		
		$ingresos		=$this->clientes->obtenerPronosticoIngresos($fecha);
		$pagos			=$this->clientes->obtenerPronosticoGastos($fecha);
		$configuracion	=$this->configuracion->obtenerConfiguraciones(1);
		$mensaje		='';
		
		if($ingresos!=null)
		{
			$mensaje		.='<strong style="font-size:18px">Pronóstico de cobros:</strong><br /><br />';
			
			foreach($ingresos as $row)
			{
				$cliente		=$this->clientes->obtenerCliente($row->idCliente);
				$cliente		=$cliente!=null?$cliente->empresa:'';

				$mensaje		.='<strong>Fecha: </strong>'.obtenerFechaMesCortoHora($row->fecha).'<br />';
				$mensaje		.='<strong>Cliente: </strong>'.$cliente.'<br />';
				$mensaje		.='<strong>Importe: </strong> $'.number_format($row->pago,2).'<br />';
				$mensaje		.='<strong>Concepto: </strong> '.$row->producto.'<br />';
				$mensaje		.='<strong>Forma de pago: </strong> '.$row->formaPago.'<br />';
				
				$mensaje		.='<br /><br /><hr><br /><br />';
			}
		}
		
		if($pagos!=null)
		{
			$mensaje			.='<strong style="font-size:18px">Pronóstico de pagos:</strong><br /><br />';
			
			foreach($pagos as $row)
			{
				$proveedor		=$this->proveedores->obtenerProveedor($row->idProveedor);
				$proveedor		=$proveedor!=null?$proveedor->empresa:'';

				$mensaje		.='<strong>Fecha: </strong>'.obtenerFechaMesCortoHora($row->fecha).'<br />';
				$mensaje		.='<strong>Cliente: </strong>'.$proveedor.'<br />';
				$mensaje		.='<strong>Importe: </strong> $'.number_format($row->pago,2).'<br />';
				$mensaje		.='<strong>Concepto: </strong> '.$row->producto.'<br />';
				$mensaje		.='<strong>Forma de pago: </strong> '.$row->formaPago.'<br />';
				
				$mensaje		.='<br /><br /><hr><br /><br />';
			}
		}
		
		if(strlen($mensaje)>0)
		{
			$this->enviarCorreoPronostico($configuracion->correo,$mensaje,$configuracion,$fecha);
		}
	}
	
	public function enviarCorreoPronostico($destinatario,$mensaje,$configuracion,$fecha)
	{
		$asunto			='Pronóstico de pagos y cobros fecha '.obtenerFechaMesCorto($fecha);

		$this->load->library('email');
		$this->email->from($configuracion->correo,$configuracion->nombre);
		$this->email->to($destinatario);
		$this->email->subject($asunto);
		$this->email->message($mensaje);
		#$this->email->type('html');
		
		if (!$this->email->send())
		{
			#print("0");
		}
		else
		{
			#print("1");
		}
	}
	
	public function procesarStockTienda()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->procesarStockTienda();
		
		redirect('inventarioProductos');
	}
	
	public function procesarStockSucursal()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->procesarStockSucursal();
		
		redirect('inventarioProductos');
	}

	public function procesarStockLicencia()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->procesarStockLicencia();
		
		redirect('inventarioProductos');
	}
	
	public function procesarProductosProveedor()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->procesarProductosProveedor();
		
		redirect('inventarioProductos');
	}
	
	public function creadorPermisos($idPermiso=0)
	{
		$this->soporte->creadorPermisos($idPermiso);
		
		redirect('clientes','refresh');
	}
	
	public function procesarProductosPuebla()
	{
		$this->soporte->procesarProductosPuebla();
		
		redirect('inventarioProductos','refresh');
	}
	
	public function asignarStockSucursales()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->asignarStockSucursales();
		
		redirect('inventarioProductos');
	}
	
	public function unificarBasesDatos()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->unificarBasesDatos();
		
		redirect('inventarioProductos');
	}
	
	public function procesarVentasSucursales()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->procesarVentasSucursales();
		
		redirect('inventarioProductos');
	}
	
	public function procesarTraspasosSucursales()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->procesarVentasSucursales();
		
		redirect('inventarioProductos');
	}
	
	public function procesarStockSucursalesNuevo()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->procesarStockSucursalesNuevo();
		
		redirect('inventarioProductos');
	}
	
	public function procesarNotasCredito()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->notatemporal->procesarNotasCredito();
		
		redirect('inventarioProductos');
	}
	
	public function asignarNumeroCliente()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->asignarNumeroCliente();
		
		redirect('clientes');
	}
	
	public function cancelarCfdiSistema()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->cancelarCfdiSistema();
		
		redirect('clientes');
	}
	
	public function cancelarCfdiSat()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->cancelarCfdiSat();
		
		redirect('clientes');
	}
	
	public function procesarCodigosDescuentos()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->procesarCodigosDescuentos();
		
		redirect('inventarioProductos');
	}
	
	public function actualizarAxalta()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->actualizarAxalta();
		
		redirect('inventarioProductos');
	}
	
	public function actualizarCostosProductos()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->actualizarCostosProductos();
		
		redirect('inventarioProductos');
	}
	
	protected $i=1;
	
	public function listar_directorios_ruta($Rupa='')
	{ 
		ini_set("memory_limit","1500M");
		set_time_limit(0); 
		
		$ruta=strlen($Rupa)==0?"media/fel/":$Rupa;
		
		
		// abrir un directorio y listarlo recursivo 
		if (is_dir($ruta)) 
		{ 
			if ($dh = opendir($ruta)) 
			{ 
				while (($file = readdir($dh)) !== false) 
				{ 
					//esta línea la utilizaríamos si queremos listar todo lo que hay en el directorio 
					//mostraría tanto archivos como directorios 
					#echo "<br>Nombre de archivo: $file : Es un: " . filetype($ruta . $file); 
					
					if (!is_dir($ruta . $file))
					{
						 #echo $ruta.$file.'<br />';
						 
						$trozos 	= explode(".", $file); 
						$extension 	= end($trozos); 

						 #if($file=='cadena.txt' or $file=='sello.txt' or $file=='certificadoImprimir.txt' or $file=='certificado.txt')
						 if($extension=='txt')
						 {
							 unlink($ruta . $file);
							 
							 echo  $this->i.'.- '.$ruta . $file.'<br />';
							 
							 $this->i++;
						 }
						 
						 if($extension=='xml')
						 {
							 if(strlen($file)<=12)
							 {
								  unlink($ruta . $file);
								  echo $this->i.'.- '.$ruta . $file.'<br />';
								  
								  $this->i++;
							 }
						 }
					}
					
					if (is_dir($ruta . $file) && $file!="." && $file!="..")
					{ 
						//solo si el archivo es un directorio, distinto que "." y ".." 
						#echo "<br>Directorio: $ruta$file"; 
						$this->listar_directorios_ruta($ruta . $file . "/"); 
					} 
				} 
				
				closedir($dh); 
			} 
		}
		
		else 
			echo "<br>No es ruta valida"; 
	}

	public function cambiarCharset()
    {
		ini_set("memory_limit","1500M");
		set_time_limit(0); 

		$consulta=$this->db->query("SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_spanish_ci;') as consulta FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'redisoftsite_ruta17' and TABLE_TYPE='BASE TABLE'; ")->result();

		foreach($consulta as $row)
        {
			$this->db->query("$row->consulta");
        }

		echo 'Exito';
    }

	public function registrarProductosSucursales()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->registrarProductosSucursales();
		
		#redirect('inventarioProductos');
	}

	public function registrarProveedoresProductos()
	{
		set_time_limit(0); 
		ini_set("memory_limit","1500M");
		
		$this->soporte->registrarProveedoresProductos();
		
		redirect('inventarioProductos');
	}
}
?>
