/**
  * Método que corrige los datos de los contribuyentes existentes, cargando:
  *  - razon social
  *  - giro
  *  - actividad económica
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-12-31
  */
 private function corregir()
 {
     $db =& \sowerphp\core\Model_Datasource_Database::get();
     $contribuyentes = $db->getCol('
         SELECT rut
         FROM contribuyente
         WHERE
             usuario IS NULL
             AND (
                 giro IS NULL
                 OR actividad_economica IS NULL
                 OR REPLACE(razon_social, \'.\', \'\') = ' . $db->concat('rut', '-', 'dv') . '
             )
     ');
     $registros = num(count($contribuyentes));
     $procesados = 0;
     $actualizados = 0;
     foreach ($contribuyentes as $rut) {
         $Contribuyente = new \website\Dte\Model_Contribuyente($rut);
         $response = \sowerphp\core\Network_Http_Socket::get('https://sasco.cl/api/servicios/enlinea/sii/actividad_economica/' . $Contribuyente->rut . '/' . $Contribuyente->dv);
         if ($response['status']['code'] == 200) {
             $info = json_decode($response['body'], true);
             $procesados++;
             if ($this->verbose) {
                 $this->out('Procesando ' . num($procesados) . '/' . $registros . ': contribuyente ' . $Contribuyente->rut . '-' . $Contribuyente->dv);
             }
             $cambios = false;
             if ($Contribuyente->razon_social == \sowerphp\app\Utility_Rut::addDV($Contribuyente->rut) and !empty($info['razon_social'])) {
                 $Contribuyente->razon_social = substr($info['razon_social'], 0, 100);
                 $cambios = true;
             }
             if (!$Contribuyente->actividad_economica and !empty($info['actividades'][0]['codigo'])) {
                 $Contribuyente->actividad_economica = $info['actividades'][0]['codigo'];
                 $cambios = true;
             }
             if (!$Contribuyente->giro and !empty($info['actividades'][0]['glosa'])) {
                 $Contribuyente->giro = substr($info['actividades'][0]['glosa'], 0, 80);
                 $cambios = true;
             }
             if ($cambios) {
                 try {
                     if ($Contribuyente->save()) {
                         $actualizados++;
                     }
                 } catch (\sowerphp\core\Exception_Model_Datasource_Database $e) {
                 }
             }
         }
     }
     $this->out('Se actualizaron ' . num($actualizados) . ' contribuyentes de un total de ' . $registros);
 }
 /**
  * Constructor del contribuyente
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-12-31
  */
 public function __construct($rut = null)
 {
     if (!is_numeric($rut)) {
         $rut = explode('-', str_replace('.', '', $rut))[0];
     }
     if (is_numeric($rut)) {
         parent::__construct($rut);
         if (!$this->exists()) {
             $this->dv = \sowerphp\app\Utility_Rut::dv($this->rut);
             $response = \sowerphp\core\Network_Http_Socket::get('https://sasco.cl/api/servicios/enlinea/sii/actividad_economica/' . $this->rut . '/' . $this->dv);
             if ($response['status']['code'] == 200) {
                 $info = json_decode($response['body'], true);
                 $this->razon_social = substr($info['razon_social'], 0, 100);
                 if (!empty($info['actividades'][0]['codigo'])) {
                     $this->actividad_economica = $info['actividades'][0]['codigo'];
                 }
                 if (!empty($info['actividades'][0]['glosa'])) {
                     $this->giro = substr($info['actividades'][0]['glosa'], 0, 80);
                 }
                 try {
                     $this->save();
                 } catch (\sowerphp\core\Exception_Model_Datasource_Database $e) {
                 }
             }
         }
         $this->contribuyente =& $this->razon_social;
     }
 }