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())
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))