# -*- encoding: UTF-8 -*-

from cvn.models import Proyecto, Convenio
from django.core.exceptions import ObjectDoesNotExist
from django.db.models.signals import pre_save
import datetime


def save_date(sender, instance, **kwargs):
    try:
        db_instance = instance.__class__.objects.get(pk=instance.pk)
    except ObjectDoesNotExist:
        return
    if (not hasattr(db_instance, 'fecha_de_fin') or
            not hasattr(db_instance, 'duracion')):
        return
    if db_instance.fecha_de_fin != instance.fecha_de_fin:
        duracion = instance.fecha_de_fin - instance.fecha_de_inicio
        instance.duracion = duracion.days
    elif db_instance.duracion != instance.duracion:
        instance.fecha_de_fin = (instance.fecha_de_inicio +
                                 datetime.timedelta(days=instance.duracion))

pre_save.connect(save_date, sender=Proyecto, dispatch_uid='save-date')
pre_save.connect(save_date, sender=Convenio, dispatch_uid='save-date')

@@ -472,16 +472,17 @@
 %0A    if 
+(
 db_insta
@@ -522,16 +522,62 @@
 a_de_fin
+ and%0A       instance.fecha_de_fin is not None)
 :%0A      
@@ -689,16 +689,17 @@
    elif 
+(
 db_insta
@@ -731,16 +731,63 @@
 duracion
+ and%0A            instance.duracion is not None)
 :%0A      

Duration or fecha_de_incio can be None