Getting step two of the inquiry process to display

This commit is contained in:
Kumi 2021-04-08 13:38:10 +02:00
parent a07d49c49e
commit dc74a4fc3e
5 changed files with 72 additions and 29 deletions

View file

@ -3,7 +3,10 @@ from django.contrib.gis.db import models
from clients.models import ClientProfile
from partners.models import Establishment
import uuid
class Inquiry(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, unique=True)
client = models.ForeignKey(ClientProfile, models.PROTECT, null=True, blank=True)
destination_name = models.CharField(max_length=128)
destination_coords = models.PointField()

View file

@ -2,11 +2,12 @@ from django.urls import path
from public.views import HomeView
from .views import InquiryCreateView
from .views import InquiryCreateView, InquiryUpdateView
app_name = "auction"
urlpatterns = [
path('create_inquiry/', InquiryCreateView.as_view(), name="create_inquiry"),
path('process_inquiry/<slug:uuid>/', HomeView.as_view(), name="process_inquiry"),
path('process_inquiry/<slug:uuid>/', InquiryUpdateView.as_view(), name="process_inquiry"),
path('create_payment/<slug:uuid>/', HomeView.as_view(), name="inquiry_payment"),
]

View file

@ -1,4 +1,4 @@
from django.views.generic import CreateView
from django.views.generic import CreateView, UpdateView, View
from django.shortcuts import redirect
from django.contrib import messages
from django.urls import reverse
@ -11,11 +11,16 @@ from .helpers import name_to_coords
class InquiryCreateView(InConstructionMixin, CreateView):
model = Inquiry
fields = ["destination_name", "destination_coords", "budget", "arrival", "min_nights", "adults", "children"]
fields = ["destination_name", "budget", "arrival", "min_nights", "adults", "children"]
def get(self, request, *args, **kwargs):
return redirect("/")
def form_valid(self, form):
form.instance.destination_coords = self.clean_destination_coords()
form.instance.destination_radius = 0
return super().form_valid(form)
def form_invalid(self, form, *args, **kwargs):
for field in form:
for error in field.errors:
@ -24,13 +29,24 @@ class InquiryCreateView(InConstructionMixin, CreateView):
return redirect("/")
def get_success_url(self):
return reverse("auction:process_inquiry", args=(self.object.id))
return reverse("auction:process_inquiry", args=(self.object.uuid,))
def clean_destination_coords(self):
lat = self.data.get("destination_lat", "")
lon = self.data.get("destination_lon", "")
lat = self.request.POST.get("destination_lat", "")
lon = self.request.POST.get("destination_lon", "")
if (not lat) or (not lon):
lat, lon = name_to_coords(self.cleaned_data.get("destination_name"))
lat, lon = name_to_coords(self.request.POST.get("destination_name"))
return Point(lon, lat)
return Point(lon, lat)
class InquiryUpdateView(InConstructionMixin, UpdateView):
model = Inquiry
fields = ["destination_radius", "arrival", "min_nights", "budget", "adults", "children", "comment"]
template_name = "auction/process.html"
def get_object(self):
return Inquiry.objects.get(uuid=self.kwargs["uuid"])
class InquiryPaymentView(InConstructionMixin, View):
pass

View file

@ -0,0 +1,24 @@
from django import template
import requests
import base64
from dbsettings.models import Setting
register = template.Library()
@register.simple_tag
def mapimage(location, zoom=8, width=348, height=250):
payload = {
'center': f"{location.y},{location.x}",
'zoom': str(zoom),
"size": "%ix%i" % (width, height),
'sensor': "false",
'key': Setting.objects.get(key="google.api.key").value # pylint: disable=no-member
}
r = requests.get('https://maps.googleapis.com/maps/api/staticmap', params=payload)
image = r.content
data_uri = 'data:image/jpg;base64,'
data_uri += base64.b64encode(image).decode().replace('\n', '')
return data_uri

View file

@ -39,25 +39,21 @@
<div class="col-12 col-md-6 col-lg-12">
<div class="side-bar-block detail-block style2 text-center">
<div class="detail-img text-center">
<img src="{% mapimage_coords object.destination_geo.y object.destination_geo.x %}" class="img-fluid" alt="detail-img"/>
<img src="{% mapimage object.destination_coords %}" class="img-fluid" alt="detail-img"/>
<div class="detail-title">
<h4><a href="#">{{ object.destination_name }}</a></h4>
<p></p>
</div><!-- end detail-title -->
<span class="detail-price"><h4>€ {{ object.amount }} <span></h4></span>
<span class="detail-price"><h4>€ {{ object.budget }} <span></h4></span>
</div><!-- end detail-img -->
<div class="table-responsive">
<table class="table">
<tbody>
<tr>
<td>{% trans "Ankunft ab" %}</td>
<td>{{ object.first_date|date:"SHORT_DATE_FORMAT" }}</td>
</tr>
<tr>
<td>{% trans "Abreise bis" %}</td>
<td>{{ object.last_date|date:"SHORT_DATE_FORMAT" }}</td>
<td>{% trans "Anreisedatum" %}</td>
<td>{{ object.arrival|date:"SHORT_DATE_FORMAT" }}</td>
</tr>
<tr>
<td>{% trans "Erwachsene" %}</td>
@ -69,7 +65,7 @@
</tr>
<tr>
<td>{% trans "Gebotener Betrag" %}</td>
<td>€ {{ object.amount }}</td>
<td>€ {{ object.budget }}</td>
</tr>
</tbody>
</table>
@ -94,7 +90,7 @@
<div class="col-12 col-md-12 col-lg-7 col-xl-8 content-side">
<form class="lg-booking-form" id="frm_booking" name="frm_booking" method="post" action="{% url "auction:post_payment" object.uuid %}">
<form class="lg-booking-form" id="frm_booking" name="frm_booking" method="post" action="{% url "auction:inquiry_payment" object.uuid %}">
{% csrf_token %}
{% if not request.user.is_authenticated %}
<div class="lg-booking-form-heading">
@ -122,7 +118,7 @@
<input type="password" name="password" class=" form-control" id="id_password">
</div>
</div>
<button id="btn_login" class="btn btn-orange btn-block" formaction="{% url "profiles:login" %}?next={{ request.path }}">{% trans "Login" %}</button>
<button id="btn_login" class="btn btn-orange btn-block" formaction="{% url "localauth:login" %}?next={{ request.path }}">{% trans "Login" %}</button>
<div class="clearfix" style="height: 50px;"></div>
</div><!-- end tab-login -->
@ -146,7 +142,7 @@
<input type="password" name="password2" class=" form-control" id="id_password2">
</div>
</div>
<button id="btn_login" class="btn btn-orange btn-block" formaction="{% url "profiles:register" %}?next={{ request.path }}">{% trans "Registrieren" %}</button>
<button id="btn_login" class="btn btn-orange btn-block" formaction="{% url "localauth:register" %}?next={{ request.path }}">{% trans "Registrieren" %}</button>
<div class="clearfix"></div>
@ -179,19 +175,12 @@
</div><!-- end row -->
<div class="row">
<div class="col-md-6">
<div class="col-md-12">
<div class="form-group">
<label>{% trans "Straße" %}</label>
<input type="text" class="form-control" id="id_address" name="address" {% if request.user.is_authenticated %}required{% else %}disabled{% endif %} value="{{ request.user.clientprofile.address }}"/>
</div>
</div><!-- end columns -->
<div class="col-md-6">
<div class="form-group">
<label>{% trans "Straße (Zusatz)" %}</label>
<input type="text" class="form-control" id="id_address2" name="address2" {% if request.user.is_authenticated %}{% else %}disabled{% endif %} {% if request.user.clientprofile.address2 %}value="{{ request.user.clientprofile.address2 }}"{% endif %}/>
</div>
</div><!-- end columns -->
</div><!-- end row -->
<div class="row">
@ -246,6 +235,7 @@
<ul class="nav nav-tabs">
<li class="nav-item active"><a class="nav-link" href="#tab-credit-card" data-toggle="tab">{% trans "Kreditkarte" %}</a></li>
<li class="nav-item"><a class="nav-link" href="#tab-paypal" data-toggle="tab">{% trans "PayPal" %}</a></li>
<li class="nav-item"><a class="nav-link" href="#tab-sepa" data-toggle="tab">{% trans "Überweisung" %}</a></li>
</ul>
<div class="tab-content">
@ -266,6 +256,15 @@
<div class="clearfix"></div>
</div><!-- end tab-paypal -->
<div id="tab-sepa" class="tab-pane">
<img src="{% static "frontend/images/paypal.png" %}" class="img-fluid" alt="sepa" />
<div class="paypal-text">
<p>{% trans "Die Daten für die Überweisung werden im nächsten Schritt angezeigt." %}</p>
</div><!-- end paypal-text -->
<div class="clearfix"></div>
</div><!-- end tab-paypal -->
</div><!-- end tab-content -->
</div><!-- end payment-tabs -->