Beispiel #1
0
    def save(self, commit=True):
        instance = super(LocationForm, self).save(commit=False)
        location_data = reverse_geocode(instance.lat, instance.lng)

        for attr in ["country", "region", "city", "address"]:
            setattr(instance, attr, location_data.get(attr, ""))

        if commit:
            instance.save()

        return instance
    def save(self, commit=True):
        instance = super(LocationForm, self).save(commit=False)
        location_data = reverse_geocode(instance.lat, instance.lng)

        for attr in ['country', 'region', 'city', 'address']:
            setattr(instance, attr, location_data.get(attr, ''))

        if commit:
            instance.save()

        return instance
Beispiel #3
0
def edit_contribution(request, contribution_pk=None, clone=False):
    """Edit a single contribution."""

    user = request.user

    if request.is_ajax():
        lat = request.GET.get('latitude')
        lng = request.GET.get('longitude')

        data = {'country': None,
                'currency': None}

        location_data = reverse_geocode(lat, lng)
        country_code = location_data.get('country')
        if country_code:
            data['country'] = country_code
            country_name = dict(countries)[country_code]

            for currency, currency_data in moneyed.CURRENCIES.items():
                if country_name.upper() in currency_data.countries:
                    data['currency'] = currency
                    break

        return JsonResponse(data)

    is_fxos = True
    other_device = None
    if not contribution_pk:
        activity = Activity.objects.get(name=FFXOS_ACTIVITY_NAME)
        contribution = Contribution(activity=activity, user=user)
        location = None
        extra = 1
    else:
        if clone:
            contribution = get_object_or_404(Contribution, pk=contribution_pk)
        else:
            contribution = get_object_or_404(Contribution, pk=contribution_pk, user=user)
        location = contribution.location
        extra = 0
        is_fxos = contribution.device.is_fxos
        other_device = model_to_dict(contribution.device) if not is_fxos else None

    location_form = forms.LocationForm(request.POST or None, instance=location)
    PlanFormset = inlineformset_factory(Contribution, Plan, formset=forms.BasePlanFormset,
                                        extra=extra, can_delete=False)
    device_form = DeviceForm(request.POST or None, initial=other_device)
    contribution_form = forms.ContributionForm(request.POST or None, is_fxos=is_fxos,
                                               instance=contribution, clone=clone)
    plan_formset = PlanFormset(request.POST or None, instance=contribution,
                               clone=clone)

    if location_form.is_valid() and plan_formset.is_valid() and device_form.is_valid():
        is_fxos = device_form.cleaned_data['is_fxos']
        contribution_form = forms.ContributionForm(request.POST, instance=contribution,
                                                   is_fxos=is_fxos, clone=clone)
        if contribution_form.is_valid():
            location = location_form.save()
            obj = contribution_form.save(commit=False)
            obj.location = location
            if clone:
                obj.user = user
            if not is_fxos:
                device = device_form.save()
                obj.device = device
            obj.save()
            plan_formset.save()

            messages.success(request, 'Contribution successfully saved')
            contribution_form = forms.ContributionForm()
            location_form = forms.LocationForm()
            plan_formset = PlanFormset()

            return redirect(reverse('main:list_my_contributions'))

    return render(request, 'fxosprice_new.html',
                  {'contribution_form': contribution_form,
                   'device_form': device_form,
                   'location_form': location_form,
                   'plan_formset': plan_formset,
                   'mapbox_id': settings.MAPBOX_MAP_ID,
                   'mapbox_token': settings.MAPBOX_TOKEN})
Beispiel #4
0
def edit_contribution(request, contribution_pk=None, clone=False):
    """Edit a single contribution."""

    user = request.user

    if request.is_ajax():
        lat = request.GET.get('latitude')
        lng = request.GET.get('longitude')

        data = {'country': None, 'currency': None}

        location_data = reverse_geocode(lat, lng)
        country_code = location_data.get('country')
        if country_code:
            data['country'] = country_code
            country_name = dict(countries)[country_code]

            for currency, currency_data in moneyed.CURRENCIES.items():
                if country_name.upper() in currency_data.countries:
                    data['currency'] = currency
                    break

        return JsonResponse(data)

    is_fxos = True
    other_device = None
    if not contribution_pk:
        activity = Activity.objects.get(name=FFXOS_ACTIVITY_NAME)
        contribution = Contribution(activity=activity, user=user)
        location = None
        extra = 1
    else:
        if clone:
            contribution = get_object_or_404(Contribution, pk=contribution_pk)
        else:
            contribution = get_object_or_404(Contribution,
                                             pk=contribution_pk,
                                             user=user)
        location = contribution.location
        extra = 0
        is_fxos = contribution.device.is_fxos
        other_device = model_to_dict(
            contribution.device) if not is_fxos else None

    location_form = forms.LocationForm(request.POST or None, instance=location)
    PlanFormset = inlineformset_factory(Contribution,
                                        Plan,
                                        formset=forms.BasePlanFormset,
                                        extra=extra,
                                        can_delete=False)
    device_form = DeviceForm(request.POST or None, initial=other_device)
    contribution_form = forms.ContributionForm(request.POST or None,
                                               is_fxos=is_fxos,
                                               instance=contribution,
                                               clone=clone)
    plan_formset = PlanFormset(request.POST or None,
                               instance=contribution,
                               clone=clone)

    if location_form.is_valid() and plan_formset.is_valid(
    ) and device_form.is_valid():
        is_fxos = device_form.cleaned_data['is_fxos']
        contribution_form = forms.ContributionForm(request.POST,
                                                   instance=contribution,
                                                   is_fxos=is_fxos,
                                                   clone=clone)
        if contribution_form.is_valid():
            location = location_form.save()
            obj = contribution_form.save(commit=False)
            obj.location = location
            if clone:
                obj.user = user
            if not is_fxos:
                device = device_form.save()
                obj.device = device
            obj.save()
            plan_formset.save()

            messages.success(request, 'Contribution successfully saved')
            contribution_form = forms.ContributionForm()
            location_form = forms.LocationForm()
            plan_formset = PlanFormset()

            return redirect(reverse('main:list_my_contributions'))

    return render(
        request, 'fxosprice_new.html', {
            'contribution_form': contribution_form,
            'device_form': device_form,
            'location_form': location_form,
            'plan_formset': plan_formset,
            'mapbox_id': settings.MAPBOX_MAP_ID,
            'mapbox_token': settings.MAPBOX_TOKEN
        })