##html
<form id="schedule-form" action="#" method="POST">
{% csrf_token %}
....
<input type="submit" id="submit-horario" value="Confirmar"
class="btn button-raised btn-green text-white text-uppercase fw-600 me-md-1 mt-3"
onclick="gtag_confirmar_horario('S_{{ prestadorservicos.prestadorservicoid }}', '{{ servicoregioes.as_string|escapejs }}', '{{ menor_desconto.get_tipo_de_desconto_display|escapejs }}', '{{ menor_desconto.preco_desconto }}', '{{ prestadorunidade.as_string|escapejs }}', '{{ prestador.parceiro }}', '{{ prestadorservicos.preco }}')"/>
</div>
</form>
##urls
from django.conf.urls import url
from django.urls import path
from . views import BuscaHorarios, AgendaHorario
app_name = "agendamento"
urlpatterns = [
url(r'^(?P<prestadorservicosid>[0-9]+)(?:/(?P<unidadeid>[0-9]+))/$',
BuscaHorarios.as_view(),
name='horarios',
),
url('/', AgendaHorario.as_view(), name="agenda_horario"),
]
When i submit this form i get 405 http error on console. There is no problem loading (get) this page [25/Mar/2022 11:55:38] "GET /agendamento/11749/1341/ HTTP/1.1" 200 19435 only to submit (post) [25/Mar/2022 11:56:51] "POST /agendamento/11749/1341/ HTTP/1.1" 405 0
function gtag_confirmar_horario(id, nome, tipo_desconto, preco_desconto, prestador, parceiro, preco) {
if (!tipo_desconto) { tipo_desconto = 'Sem desconto' }
preco = (preco == '' || preco == 'None') ? 0.00 : parseFloat(preco.replace(',', '.')).toFixed(2);
preco_desconto = (preco_desconto == '' || preco_desconto == 'None') ? 0.00 : parseFloat(preco_desconto.replace(',', '.')).toFixed(2);
gtag('event', 'Agendamento', {
'send_to': 'UA-177268162-1', 'event_category': 'Clique',
'event_label': 'Concluir agendamento online', 'servico': nome, 'prestador': prestador, 'parceiro': parceiro, 'preco': preco
});
gtag('event', 'select_item', { 'send_to': 'G-TSJXVDB6B7', 'items': [{ 'item_id': id, 'item_name': nome, 'promotion_name': tipo_desconto, 'item_list_name': 'Resultados da Busca', 'item_list_id': 'resultados_busca', 'affiliation': prestador }], 'item_list_name': 'Resultados da Busca', 'item_list_id': 'resultados_busca' });
fbq('track', 'Lead', { content_category: 'Concluir agendamento online', content_name: id });
}
##views
class AgendaHorario(View):
form_class_agenda = AgendaHorarioForm()
paciente = {}
prestadorunidade = None
prestadorservicos = None
servicoregioes = None
agenda_service = None
horario_marcado = None
def get_context_data(self, **kwargs):
print('a')
context = super().get_context_data(**kwargs)
context['prestadorunidade'] = self.prestadorunidade
context['prestadorservicos'] = self.prestadorservicos
context['horario_marcado'] = self.horario_marcado
context['paciente'] = self.paciente
print('a')
return context
def post(self, *args, **kwargs):
print('b')
if self.request.is_ajax and self.request.method == "POST":
form = self.form_class_agenda(self.request.POST)
if form.is_valid():
post_data = form.cleaned_data
self.paciente['nome'] = post_data['nome_paciente']
self.paciente['email'] = post_data['email_paciente']
self.paciente['telefone'] = post_data['telefone_paciente']
lista_unidades = list(cache.get('PrestadorUnidades', PrestadorUnidades.objects.values()))
unidadeid = int(self.request.POST.get('prestadorunidadeid'))
self.prestadorunidade = [item for item in lista_unidades if item['unidadeid'] == unidadeid][0]
lista_prestadorservicos = list(cache.get('PrestadorServicos', PrestadorServicos.objects.values()))
prestadorservicosid = int(self.request.POST.get('prestadorservicosid'))
self.prestadorservicos = [
item for item in lista_prestadorservicos if item['prestadorservicoid'] == prestadorservicosid][0]
lista_servicos = list(cache.get('ServicosRegioesCorpo', ServicosRegioesCorpo.objects.values()))
self.servicoregioes = [item for item in lista_servicos if item['idservicosregioes']
== self.prestadorservicos['idservicosregioes_fk_id']][0]
servico = ServicosRegioesCorpo.objects.get(
idservicosregioes=self.prestadorservicos['idservicosregioes_fk_id'])
horario = self.request.POST.get('horario-escolhido')
self.horario_marcado = refatora_data(horario)
self.horario_marcado = datetime.datetime.strptime(self.horario_marcado, '%Y-%m-%dT%H:%M')
prestadorunidade_calendar_list = list(cache.get('Calendar', Calendar.objects.values()))
prestadorunidade_calendar = [item for item in prestadorunidade_calendar_list if item['id']
== self.prestadorunidade['calendar_id_fk']][0]
prestadorunidade_calendar_obj = Calendar.objects.get(id=self.prestadorunidade['calendar_id_fk'])
self.agenda_service = GoogleCalendarService(
prestadorunidade_calendar, prestadorunidade_calendar_obj, self.prestadorservicos)
self.marcar_servico(self.horario_marcado)
msg_sucesso = f'%s agendado com sucesso para %s. Anote na sua agenda!' % (
servico, self.paciente['nome'])
return JsonResponse({"msg_sucesso": msg_sucesso, "horario_marcado": horario}, status=200)
else:
return JsonResponse({"error": form.errors}, status=400)
return JsonResponse({"error": ""}, status=400)
def marcar_servico(self, horario):
print('c')
servico = ServicosRegioesCorpo.objects.get(
idservicosregioes=self.prestadorservicos['idservicosregioes_fk_id'])
summary = f'%s com paciente %s. Contato: %s ou %s' % (str(servico),
self.paciente['nome'],
self.paciente['telefone'],
self.paciente['email'])
lista_bairros = list(cache.get('Bairros', Bairros.objects.values()))
bairro = [item for item in lista_bairros if item['bairroid'] == self.prestadorunidade['bairroid_fk_id']][0]
location = f'%s %i, %s\n%s, %s\n%s' % (self.prestadorunidade['logradourounid'],
self.prestadorunidade['numerounid'],
self.prestadorunidade['complementounid'],
bairro['bairro'],
bairro['cidade'],
self.prestadorunidade['cep'])
descricao = 'Agendado pelo Saúde Pra Já.'
self.agenda_service.marcar_evento(summary, location, horario, descricao)
Added the class from views.py. There is another class but i think the error is in the AgendaHorario