diff --git a/sigi/apps/convenios/migrations/0037_ajusta_acts_pendentes_gertiq_184827.py b/sigi/apps/convenios/migrations/0037_ajusta_acts_pendentes_gertiq_184827.py new file mode 100644 index 0000000..4bf0581 --- /dev/null +++ b/sigi/apps/convenios/migrations/0037_ajusta_acts_pendentes_gertiq_184827.py @@ -0,0 +1,28 @@ +# Generated by Django 5.0.6 on 2024-06-19 12:49 + +from django.db import migrations +from django.db.models import Q + + +def ajusta_acts(apps, schema_editor): + Convenio = apps.get_model("convenios", "Convenio") + res = ( + Convenio.objects.filter(projeto__sigla="ACT", num_convenio="") + .filter( + Q(data_retorno_assinatura__isnull=False) + | Q(data_termino_vigencia__isnull=False) + ) + .update(data_retorno_assinatura=None, data_termino_vigencia=None) + ) + print(f"{res} convênios ajustados... ", end="") + + +class Migration(migrations.Migration): + + dependencies = [ + ("convenios", "0036_convenio_erro_gescon"), + ] + + operations = [ + migrations.RunPython(ajusta_acts, migrations.RunPython.noop), + ] diff --git a/sigi/apps/convenios/models.py b/sigi/apps/convenios/models.py index 2126b87..9313394 100644 --- a/sigi/apps/convenios/models.py +++ b/sigi/apps/convenios/models.py @@ -6,6 +6,7 @@ from pathlib import Path from django.db import models from django.db.models import Q, F from django.contrib.sites.shortcuts import get_current_site +from django.core.exceptions import ValidationError, NON_FIELD_ERRORS from django.core.mail import send_mail from django.core.validators import FileExtensionValidator from django.template import Template, Context @@ -406,10 +407,59 @@ class Convenio(models.Model): return self.anexo_set.first().arquivo.url return "" + def clean(self): + # Gertiq #184827 + if self.num_convenio: + if ( + self.data_retorno_assinatura is None + or self.data_termino_vigencia is None + ): + errors = { + NON_FIELD_ERRORS: ValidationError( + _( + "Um convênio vigente precisa ter as datas de " + "início e término de vigência" + ) + ) + } + if self.data_retorno_assinatura is None: + errors["data_retorno_assinatura"] = ValidationError( + _("Obrigatório para convênios vigentes") + ) + if self.data_termino_vigencia is None: + errors["data_termino_vigencia"] = ValidationError( + _("Obrigatório para convênios vigentes") + ) + raise ValidationError(errors) + else: + if ( + self.data_retorno_assinatura is not None + or self.data_termino_vigencia is not None + ): + errors = { + NON_FIELD_ERRORS: ValidationError( + _( + "Um convênio pendente não pode ter datas de " + "início e término de vigência" + ) + ) + } + if self.data_retorno_assinatura is not None: + errors["data_retorno_assinatura"] = ValidationError( + _("Não pode ser preenchido para convênios pendentes") + ) + if self.data_termino_vigencia is not None: + errors["data_termino_vigencia"] = ValidationError( + _("Não pode ser preenchido para convênios pendentes") + ) + raise ValidationError(errors) + + return super().clean() + def save(self, *args, **kwargs): self.conveniada = self.data_retorno_assinatura is not None self.equipada = self.data_termo_aceite is not None - super(Convenio, self).save(*args, **kwargs) + super().save(*args, **kwargs) class Meta: get_latest_by = "id"