/**
  * Método que permite modificar contribuyente previamente registrado
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-09-29
  */
 public function modificar($rut)
 {
     // crear objeto del contribuyente
     try {
         $Contribuyente = new Model_Contribuyente($rut);
     } catch (\sowerphp\core\Exception_Model_Datasource_Database $e) {
         \sowerphp\core\Model_Datasource_Session::message('No se encontró la empresa solicitada', 'error');
         $this->redirect('/dte/contribuyentes/seleccionar');
     }
     // verificar que el usuario sea el administrador
     if ($Contribuyente->usuario != $this->Auth->User->id) {
         \sowerphp\core\Model_Datasource_Session::message('Usted no es el administrador de la empresa solicitada', 'error');
         $this->redirect('/dte/contribuyentes/seleccionar');
     }
     // asignar variables para editar
     $this->set(['Contribuyente' => $Contribuyente, 'actividades_economicas' => (new \website\Sistema\General\Model_ActividadEconomicas())->getList(), 'comunas' => (new \sowerphp\app\Sistema\General\DivisionGeopolitica\Model_Comunas())->getList()]);
     // editar
     if (isset($_POST['submit'])) {
         // verificar campos mínimos
         foreach (['razon_social', 'giro', 'actividad_economica', 'direccion', 'comuna', 'certificacion_resolucion'] as $attr) {
             if (empty($_POST[$attr])) {
                 \sowerphp\core\Model_Datasource_Session::message('Debe especificar: ' . $attr, 'error');
                 return;
             }
         }
         // rellenar campos de la empresa
         foreach (array_keys(Model_Contribuyente::$columnsInfo) as $attr) {
             if (!empty($_POST[$attr])) {
                 $Contribuyente->{$attr} = $_POST[$attr];
             }
         }
         $Contribuyente->certificacion = (int) isset($_POST['certificacion']);
         if (!empty($_POST['sii_pass'])) {
             $Contribuyente->sii_pass = Utility_Data::encrypt($_POST['sii_pass']);
         }
         if (!empty($_POST['intercambio_pass'])) {
             $Contribuyente->intercambio_pass = Utility_Data::encrypt($_POST['intercambio_pass']);
         }
         $Contribuyente->usuario = $this->Auth->User->id;
         $Contribuyente->modificado = date('Y-m-d H:i:s');
         $Contribuyente->api_token = !empty($_POST['api_token']) ? Utility_Data::encrypt($_POST['api_token']) : null;
         // si está en producción validar fecha y número de resolución
         if (!$Contribuyente->certificacion and (empty($Contribuyente->resolucion_fecha) or empty($Contribuyente->resolucion_numero))) {
             \sowerphp\core\Model_Datasource_Session::message('Para pasar la empresa a producción debe indicar la fecha y número de resolución que la autoriza', 'error');
             return;
         }
         // si se pasó un logo se guarda
         if (isset($_FILES['logo']) and !$_FILES['logo']['error']) {
             // si el formano no es PNG error
             if (\sowerphp\general\Utility_File::mimetype($_FILES['logo']['tmp_name']) != 'image/png') {
                 \sowerphp\core\Model_Datasource_Session::message('Formato del logo debe ser PNG', 'error');
                 return;
             }
             $config = \sowerphp\core\Configure::read('dte.logos');
             // redimensionar imagen
             \sowerphp\general\Utility_Image::resizeOnFile($_FILES['logo']['tmp_name'], $config['width'], $config['height']);
             // copiar imagen a directorio final
             move_uploaded_file($_FILES['logo']['tmp_name'], $config['dir'] . '/' . $Contribuyente->rut . '.png');
         }
         // guardar contribuyente
         try {
             $Contribuyente->save();
             \sowerphp\core\Model_Datasource_Session::message('Empresa ' . $Contribuyente->razon_social . ' ha sido modificada', 'ok');
             $this->redirect('/dte/contribuyentes/seleccionar');
         } catch (\sowerphp\core\Exception_Model_Datasource_Database $e) {
             \sowerphp\core\Model_Datasource_Session::message('No fue posible modificar la empresa:<br/>' . $e->getMessage(), 'error');
         }
     }
 }
 /**
  * Método que crea el objeto Imap para recibir correo por IMAP
  * @param email Email que se quiere obteber: intercambio o sii
  * @return \sowerphp\core\Network_Email_Imap
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-09-25
  */
 public function getEmailImap($email = 'intercambio')
 {
     $Imap = new \sowerphp\core\Network_Email_Imap(['mailbox' => $this->{$email . '_imap'}, 'user' => $this->{$email . '_user'}, 'pass' => Utility_Data::decrypt($this->{$email . '_pass'})]);
     return $Imap->isConnected() ? $Imap : false;
 }