Exemple #1
0
    def form_valid(self, form, formsets):
        try:
            with atomic():
                self.object = form.save(commit=False)
                if not self.request.user.is_supervisor:
                    self.object.fecha = datetime.now()
                self.object.save()
                for f in formsets:
                    reg = RegistroAsistencia()
                    reg.persona = f.cleaned_data["persona"]
                    reg.asistencia = self.object
                    if f.cleaned_data["estado"]:
                        reg.estado = f.cleaned_data["estado"]
                    reg.save()
        except IntegrityError:
            client.captureException()
            return self.form_invalid(form, formsets)

        send_notification(self.object, request=self.request)
        return HttpResponseRedirect(self.get_success_url())
Exemple #2
0
    def handle(self, *args, **options):

        if options['filename'] == None:
            raise CommandError("Debe especificar la ruta al archivo CSV.")

        # make sure file path resolves
        if not os.path.isfile(options['filename']):
            raise CommandError("El archivo especificado no existe.")

        dataReader = csv.reader(open(options["filename"]), delimiter=',', quotechar='"')
        for row in dataReader:
            if row[0] != 'LEGAJO': # ignoramos la primera línea del archivo CSV
                self.fecha = datetime.strptime(row[7], "%d/%m/%Y")
                if not isinstance(self.fecha, datetime):
                    self.stdout.write("Fecha en formato erroneo. Saltando fila")
                    self.fecha = None
                    continue
                self.fecha = timezone.make_aware(self.fecha)
                if not row[0].strip() == '':
                    pers_filt = Persona.all_persons.filter(legajo=row[0])
                else:
                    pers_filt = Persona.all_persons.filter(cuil=row[3])
                proyecto = None
                if pers_filt:
                    persona = pers_filt[0]
                else:
                    # Si no existe la persona, quizás no existan las entidades
                    # relacionadas
                    try:
                        cct = CCT.objects.get(nombre=row[4])
                    except CCT.DoesNotExist:
                        if row[4].strip() == '':
                            cct = CCT.objects.get(nombre__icontains="Fuera de convenio")
                        else:
                            cct = CCT(nombre=row[4])
                            cct._history_date = self.fecha
                            cct.save()
                            self.stdout.write("Se creó nuevo CCT {}.".format(cct.nombre))
                    proyecto = self.get_proyecto_or_default(row[5], row)
                    persona = self.guardar_persona(row, cct, proyecto)
                # teniendo las entidades ya creadas, realizamos el
                # registro

                if proyecto is None:
                    proyecto = self.get_proyecto_or_default(row[5], row)
                try:
                    asistencia = Asistencia.objects.get(fecha=self.fecha, proyecto=proyecto)
                except Asistencia.DoesNotExist:
                    asistencia = Asistencia(fecha=self.fecha, proyecto=proyecto, nombre_responsable=row[6])
                    asistencia._history_date = self.fecha
                    asistencia.save()
                    self.a_new += 1
                if not RegistroAsistencia.objects.filter(
                    asistencia=asistencia, persona=persona).exists():
                    registro = RegistroAsistencia(asistencia=asistencia, persona=persona)
                    estado = self.get_estado_or_default(codigo=row[8])
                    registro.estado = estado
                    if estado.codigo != row[8]:
                        registro.observaciones = "Código original en la planilla {}".format(row[8])
                    registro._history_date = self.fecha
                    registro.save()
                    self.r_new += 1
                    # self.stdout.write("Registro creado -> {}".format(registro))

        self.stdout.write("Se han creado o actualizado {} persona, {} "
                          "asistencias con un total de {} registros.".format(
                              self.p_new, self.a_new, self.r_new))