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)