Пример #1
0
def create_project(request, format=None):

    nonprofit = None
    # Need a nonprofit user
    try:
        nonprofit = request.user.nonprofit
    except Exception as e:
        if not request.user.is_staff:
            error = "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e)
            return Response({"User not authenticated. " + error}, status.HTTP_403_FORBIDDEN)

    try:
        obj = json.loads(request.DATA["project"])
    except:
        obj = request.DATA["project"]

    project = Project()
    try:
        # Getting required field
        if nonprofit:
            project.nonprofit = nonprofit
        else:
            project.nonprofit = Nonprofit.objects.get(id=obj["nonprofit"])

        project.name = obj["name"]
        project.slug = create_project_slug(project.name)
        project.details = obj["details"]
        project.description = obj["description"]
        project.responsible = obj["responsible"]
        project.phone = obj["phone"]
        project.email = obj["email"]
        project.save()

        skills = obj["skills"]
        for s in skills:
            project.skills.add(Skill.objects.get(id=s))

        causes = obj["causes"]
        for c in causes:
            project.causes.add(Cause.objects.get(id=c))

        if obj.get("work", None):
            work = Work()
            work.project = project
            work.weekly_hours = obj["work"].get("weekly_hours", 0)
            work.can_be_done_remotely = obj["work"].get("can_be_done_remotely", False)
            work.save()

            availabilities = obj["work"].get("availabilities", None)
            if availabilities:
                for a in availabilities:
                    availability = Availability()
                    availability.weekday = a["weekday"]
                    availability.period = a["period"]
                    availability.save()
                    work.availabilities.add(availability)
            work.save()
        elif obj.get("job", None):
            job = Job()
            job.project = project
            job.start_date = datetime.utcfromtimestamp(obj["job"]["start_date"] / 1000).replace(
                tzinfo=pytz.timezone("America/Sao_Paulo")
            )
            job.end_date = datetime.utcfromtimestamp(obj["job"]["end_date"] / 1000).replace(
                tzinfo=pytz.timezone("America/Sao_Paulo")
            )
            job.save()

        has_work = False
        has_job = False
        try:
            project.work
            has_work = True
        except:
            pass
        try:
            project.job
            has_job = True
        except:
            pass

        if not has_job and not has_work:
            return Response({"detail": "Needs to have project or work."}, status.HTTP_400_BAD_REQUEST)

        # Doing not required fields
        try:
            obja = obj.get("address", None)
            if obja:
                address = Address()
                address.addressline = obja.get("addressline", None)
                address.addressline2 = obja.get("addressline2", None)
                address.addressnumber = obja.get("addressnumber", None)
                address.neighborhood = obja.get("neighborhood", None)
                address.zipcode = obja.get("zipcode", None)
                if obja.get("city", None) and obja["city"].get("id", None):
                    address.city = City.objects.get(id=obja["city"]["id"])
                address.save()
                project.address = address
                project.save()

            project.facebook_event = obj.get("facebook_event", None)

            project.image = request.FILES.get("image")
            project.image_small = request.FILES.get("image")
            project.image_medium = request.FILES.get("image")
            project.image_large = request.FILES.get("image")

            roles = obj.get("roles", None)
            if roles:
                for r in roles:
                    role = Role()
                    role.name = r["name"]
                    role.prerequisites = r["prerequisites"]
                    role.details = r["details"]
                    role.vacancies = r["vacancies"]
                    role.save()
                    project.roles.add(role)
        except Exception as e:
            error = "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e)
            print error

    except Exception as e:
        error = "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e)
        return Response({"detail": error}, status.HTTP_400_BAD_REQUEST)

    project.save()
    return Response({"detail": "Project succesfully created.", "slug": project.slug}, status.HTTP_201_CREATED)