def _new_transportation(request): _e = log_extra(request) f = NewTransportationForm(request.POST) if not f.is_valid(): log.error('new transportation: incomplete data', extra=_e) return Fail(http_code=400, error_code=400, error_msg='Request requires province, city, and number; ' \ 'and accept the contributor terms') province = f.cleaned_data['province'] city = f.cleaned_data['city'] number = f.cleaned_data['number'] company = f.cleaned_data['company'] city = utils.capwords(city) if company is not None: company = utils.capwords(company) code = 200 submission_id = None with transaction.commit_on_success(): s = Submission() s.ip_address = request.META['REMOTE_ADDR'] s.user_agent = request.META['HTTP_USER_AGENT'] s.user = request.user s.raw_geojson = json.dumps(utils.create_geojson_feature( province=province, city=city, number=number, company=company, agreeToContributorTerms=True)) s.source = 'web' processSubmission(s) s.save() items = Transportation.objects.filter(active=True, province=province, city=city, number=number) assert len(items) in [0, 1] if len(items) > 0: t = items[0] else: t = Transportation(active=True, province=province, city=city, number=number, company=company) t.save() s.transportation = t s.save() code = 201 s.transportation = t s.save() log.info('new transportation: added: sid=%d tid=%d', s.id, t.id, extra=_e) data = dict(id=t.id, province=t.province, city=t.city, number=t.number, company=t.company, submission_id=s.submission_id) return OK(data, code)
def transportation_data_save(request, tid): _e = log_extra(request) tid = int(tid) try: t = Transportation.objects.get(pk=tid) except Transportation.DoesNotExist: log.error('save transportation: invalid id: tid=%s', tid, extra=_e) return Fail(http_code=404, error_code=404, error_msg='Unknown transportation id: {}'.format(tid)) raw = request.POST['geojson'] parent_id = request.POST.get('parent_id', None) log.info('save transportation: received data: parent=%s geojson=%s', parent_id, raw, extra=_e) try: parent = Submission.objects.get(submission_id=parent_id) except Submission.DoesNotExist: parent = None s = Submission() s.parent = parent s.ip_address = request.META['REMOTE_ADDR'] s.user_agent = request.META['HTTP_USER_AGENT'] s.user = request.user s.raw_geojson = raw s.source = 'web' s.save() processSubmission(s) if s.parsed_ok: s.transportation = t s.city = utils.capwords(s.city) if s.company is not None: s.company = utils.capwords(s.company) s.save() if s.parsed_ok: # Update transportation t.province = s.province t.city = s.city t.company = s.company t.number = s.number t.origin = s.origin t.destination = s.destination t.route = s.route t.submission = s t.save() log.info('save transportation: saved: sid=%d tid=%d', s.id, t.id, extra=_e) else: log.info('save transportation: invalid data: sid=%d', s.id, extra=_e) data = dict(submission_id=s.submission_id) if s.parsed_ok: res = OK(data, http_code=201) else: res = Fail(data, http_code=400, error_code=400, error_msg='Invalid data') return res