def importar_fase(request, id_fase,id_proyecto):

    '''
        Vista para importar los datos de una fase existente para su utilizacion en la creacion de una nueva.
        Realiza las comprobaciones necesarias con respecto a la fecha de inicio y orden de fase.
    '''
    proyecto = get_object_or_404(Proyecto,id=id_proyecto)
    if proyecto.estado!='PEN':
        return render_to_response('fases/error_activo.html')
    fase= Fase.objects.get(id=id_fase)
    if request.method=='POST':

        formulario = CrearFaseForm(request.POST)
        if formulario.is_valid():
            if not verificarNombre(proyecto.id,request.POST["nombre"] ):
                messages.add_message(request, settings.DELETE_MESSAGE, "Error: Ya existe ese nombre de fase en el proyecto")
            else:
                if len(str(request.POST["fInicio"])) != 10 :
                    messages.add_message(request, settings.DELETE_MESSAGE, "Error: El formato de Fecha es: DD/MM/AAAA")
                else:
                    fecha=datetime.strptime(str(request.POST["fInicio"]),'%d/%m/%Y')
                    fecha=fecha.strftime('%Y-%m-%d')
                    fecha1=datetime.strptime(fecha,'%Y-%m-%d')
                    newFase = Fase(nombre = request.POST["nombre"],descripcion = request.POST["descripcion"],maxItems = request.POST["maxItems"],fInicio = fecha, estado = "PEN", proyecto_id = id_proyecto)
                    aux=0
                    orden=Fase.objects.filter(proyecto_id=id_proyecto)
                    roles = request.POST.getlist("roles")
                    for rol in roles:
                        fase=Fase.objects.filter(roles__id=rol)
                        if(fase.count()>0):
                            aux=1
                    if aux>0:
                        messages.add_message(request, settings.DELETE_MESSAGE, "Error: El Rol ya ha sido asignado a otra fase")
                    else:
                        proyecto=Proyecto.objects.get(id=id_proyecto)
                        cantidad = orden.count()
                        if cantidad>0:
                            anterior = Fase.objects.get(orden=cantidad, proyecto_id=id_proyecto)
                            if fecha1<datetime.strptime(str(anterior.fInicio),'%Y-%m-%d'):
                                messages.add_message(request, settings.DELETE_MESSAGE, "Error: Fecha de inicio no concuerda con fase anterior")
                            else:
                                if datetime.strptime(str(proyecto.fecha_ini),'%Y-%m-%d')>=fecha1 or datetime.strptime(str(proyecto.fecha_fin),'%Y-%m-%d')<=fecha1:
                                    messages.add_message(request, settings.DELETE_MESSAGE, "Error: Fecha de inicio no concuerda con proyecto")
                                else:
                                    roles = request.POST.getlist("roles")
                                    newFase.orden=orden.count()+1
                                    newFase.save()
                                    for rol in roles:
                                        newFase.roles.add(rol)
                                        newFase.save()
                                    return render_to_response('fases/creacion_correcta.html',{'id_proyecto':id_proyecto}, context_instance=RequestContext(request))
                        else:
                                roles = request.POST.getlist("roles")
                                newFase.orden=1
                                newFase.save()
                                for rol in roles:
                                    newFase.roles.add(rol)
                                    newFase.save()
                                return render_to_response('fases/creacion_correcta.html',{'id_proyecto':id_proyecto}, context_instance=RequestContext(request))
    else:
        formulario = CrearFaseForm(initial={'descripcion':fase.descripcion, 'maxItems':fase.maxItems, 'fInicio':fase.fInicio, 'orden':fase.orden, 'nombre':fase.nombre}) #'fInicio':datetime.strptime(str(fase.fInicio),'%Y-%m-%d').strftime('%d/%m/%y')
    return render_to_response('fases/registrarFase.html',{'formulario':formulario}, context_instance=RequestContext(request))
def registrar_fase(request,id_proyecto):
    '''
        Vista para registrar una nueva fase dentro de un proyecto. Asigna automaticamente el orden,
        realiza las comprobaciones necesarias con respecto a la fecha de inicio y comprueba tambien que los roles
        asociados no pertenezcan a otra fase.
    '''
    proyecto = get_object_or_404(Proyecto, id=id_proyecto)
    if proyecto.estado!='PEN':
        return HttpResponseRedirect ('/denegado')
    if request.method=='POST':
        nombre=0
        formulario = CrearFaseForm(request.POST)
        if formulario.is_valid():
            if not verificarNombre(proyecto.id,request.POST["nombre"] ):
                messages.add_message(request, settings.DELETE_MESSAGE, "Error: Ya existe ese nombre de fase en el proyecto")
                nombre=1
            else:
                if len(str(request.POST["fInicio"])) != 10 : #Comprobacion de formato de fecha
                    messages.add_message(request, settings.DELETE_MESSAGE, "Error: El formato de Fecha es: DD/MM/AAAA")
                else:
                    fecha=datetime.strptime(str(request.POST["fInicio"]),'%d/%m/%Y')
                    fecha=fecha.strftime('%Y-%m-%d')
                    fecha1=datetime.strptime(fecha,'%Y-%m-%d')
                    newFase = Fase(nombre = request.POST["nombre"],descripcion = request.POST["descripcion"],maxItems = request.POST["maxItems"],fInicio = fecha,estado = "PEN", proyecto_id = id_proyecto)
                    aux=0
                    orden=Fase.objects.filter(proyecto_id=id_proyecto)
                    roles = request.POST.getlist("roles")
                    for rol in roles:
                        fase=Fase.objects.filter(roles__id=rol)
                        if(fase.count()>0):
                            aux=1
                    if aux>0:#comprobacion de pertenencia de roles
                        messages.add_message(request, settings.DELETE_MESSAGE, "Error: El Rol ya ha sido asignado a otra fase")
                    else:
                        proyecto=Proyecto.objects.get(id=id_proyecto)
                        cantidad = orden.count()
                        if cantidad>0:#comprobaciones de fecha
                            anterior = Fase.objects.get(orden=cantidad, proyecto_id=id_proyecto)
                            if fecha1<datetime.strptime(str(anterior.fInicio),'%Y-%m-%d'):
                                messages.add_message(request, settings.DELETE_MESSAGE, "Error: Fecha de inicio no concuerda con fase anterior")
                            else:
                                if datetime.strptime(str(proyecto.fecha_ini),'%Y-%m-%d')>=fecha1 or datetime.strptime(str(proyecto.fecha_fin),'%Y-%m-%d')<=fecha1:
                                    messages.add_message(request, settings.DELETE_MESSAGE, "Error: Fecha de inicio no concuerda con proyecto")
                                else:
                                    roles = request.POST.getlist("roles")
                                    newFase.orden=orden.count()+1 #Calculo del orden de la fase a crear
                                    newFase.save()
                                    for rol in roles:
                                        newFase.roles.add(rol)
                                        newFase.save()
                                    return render_to_response('fases/creacion_correcta.html',{'id_proyecto':id_proyecto}, context_instance=RequestContext(request))
                        else:
                            roles = request.POST.getlist("roles")
                            newFase.orden=1
                            newFase.save()
                            for rol in roles:
                                newFase.roles.add(rol)
                                newFase.save()
                            return render_to_response('fases/creacion_correcta.html',{'id_proyecto':id_proyecto}, context_instance=RequestContext(request))
    else:
        formulario = CrearFaseForm()
    return render_to_response('fases/registrarFase.html',{'formulario':formulario}, context_instance=RequestContext(request))