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)
def create_project(request, format=None): # Need a nonprofit user try: request.user.nonprofit except Exception as e: 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 project.nonprofit = request.user.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: project.facebook_event = obj.get('facebook_event', None) obja = obj['address'] project.address = Address() project.address.addressline = obja['addressline'] project.address.addressline2 = obja['addressline2'] project.address.addressnumber = obja['addressnumber'] project.address.neighborhood = obja['neighborhood'] project.address.zipcode = obja['zipcode'] project.address.city = City.objects.get(id=obja['city']['id']) project.address.save() project.image = request.FILES.get('image') roles = obj['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: pass project.save() except Exception as e: error = "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e) return Response({'detail': error}, status.HTTP_400_BAD_REQUEST) return Response({'detail': 'Project succesfully created.'}, status.HTTP_201_CREATED)