def actualizar_cuadernos(self):
        from tracker.models import Cuaderno

        url = self.get_external_url()

        soup = open_url(url)
        causas = soup.find('table', {'id': 'contentCellsAddTabla'}).findAll(
            'tr')[1:]

        if len(causas) == 1:
            url = 'http://civil.poderjudicial.cl' + causas[0].find('a')['href']
        else:
            raise Exception

        soup = open_url(url)
        opciones = soup.find('select', {'name': 'CRR_Cuaderno'}).findAll(
            'option')

        for opcion in opciones:
            id = opcion['value']
            nombre = opcion.string

            try:
                Cuaderno.objects.get(causa=self, external_id=id)
            except Cuaderno.DoesNotExist:
                Cuaderno.objects.create(
                    external_id=id,
                    nombre=nombre,
                    causa=self
                )
    def actualizar_entradas(self):
        from tracker.models import Entrada

        url = self.get_external_url()

        soup = open_url(url)

        entradas = soup.find('div', {'id': 'Historia'}).findAll(
            'table')[1].findAll('tr')

        for entrada in entradas:
            celdas = [td.string.strip()
                      for td in entrada.findAll('td') if td.string]
            folio = int(celdas[0])
            etapa = celdas[1]
            tramite = celdas[2]
            descripcion_tramite = celdas[3]
            fecha_tramite = datetime.strptime(celdas[4], '%d/%m/%Y').date()
            foja = celdas[5]

            try:
                Entrada.objects.get(folio=folio, cuaderno=self)
            except Entrada.DoesNotExist:
                Entrada.objects.create(
                    cuaderno=self,
                    folio=folio,
                    etapa=etapa,
                    tramite=tramite,
                    descripcion_tramite=descripcion_tramite,
                    fecha_tramite=fecha_tramite,
                    foja=foja
                )