diff --git a/gestaoRaul/comandas/__pycache__/urls.cpython-310.pyc b/gestaoRaul/comandas/__pycache__/urls.cpython-310.pyc index 2ff3b70..4c1d3ee 100644 Binary files a/gestaoRaul/comandas/__pycache__/urls.cpython-310.pyc and b/gestaoRaul/comandas/__pycache__/urls.cpython-310.pyc differ diff --git a/gestaoRaul/comandas/__pycache__/views.cpython-310.pyc b/gestaoRaul/comandas/__pycache__/views.cpython-310.pyc index 39c8da5..207b324 100644 Binary files a/gestaoRaul/comandas/__pycache__/views.cpython-310.pyc and b/gestaoRaul/comandas/__pycache__/views.cpython-310.pyc differ diff --git a/gestaoRaul/db.sqlite3 b/gestaoRaul/db.sqlite3 index 4dacca3..6ffc8d0 100644 Binary files a/gestaoRaul/db.sqlite3 and b/gestaoRaul/db.sqlite3 differ diff --git a/gestaoRaul/home/__pycache__/urls.cpython-310.pyc b/gestaoRaul/home/__pycache__/urls.cpython-310.pyc index 198a23b..0b222c9 100644 Binary files a/gestaoRaul/home/__pycache__/urls.cpython-310.pyc and b/gestaoRaul/home/__pycache__/urls.cpython-310.pyc differ diff --git a/gestaoRaul/home/__pycache__/views.cpython-310.pyc b/gestaoRaul/home/__pycache__/views.cpython-310.pyc index d42a3bd..18e0a4f 100644 Binary files a/gestaoRaul/home/__pycache__/views.cpython-310.pyc and b/gestaoRaul/home/__pycache__/views.cpython-310.pyc differ diff --git a/gestaoRaul/home/templates/home.html b/gestaoRaul/home/templates/home.html index 047cbff..8d62d13 100644 --- a/gestaoRaul/home/templates/home.html +++ b/gestaoRaul/home/templates/home.html @@ -29,34 +29,32 @@ RRB&C - DashBoard

DashBoard

- - - - - - +
+ + + +
+

Valor de Pagamentos

-
R$ {{total_pagamentos |floatformat:2 }}
+
R$ {{total_pagamentos |floatformat:2 }}

Quantidade de Pagamentos

-
{{ qdt_pagamentos }}
+
{{ qdt_pagamentos }}

Ticket médio

-
R$ {{ ticekMedio |floatformat:2}}
+
R$ {{ ticekMedio |floatformat:2}}

Gráficos de vendas

-
-

Gráficos cozinha

@@ -64,22 +62,7 @@ RRB&C - DashBoard
-
-

Mais Vendidos

- - - - - - {% for produto in produtos_mais_vendidos %} - - - - - - {% endfor %} -
ProdutoQuantidade
{{ produto.nome }} {{ produto.quantidade }}
-
+ diff --git a/gestaoRaul/home/views.py b/gestaoRaul/home/views.py index 9b28b8a..bb426b7 100644 --- a/gestaoRaul/home/views.py +++ b/gestaoRaul/home/views.py @@ -7,6 +7,7 @@ from django.contrib.auth.models import User from django.utils.dateparse import parse_datetime import datetime +import json @@ -17,17 +18,7 @@ from gestaoRaul.decorators import group_required @group_required(groupName='Gerente') def home(request): - try: - total_pagamentos = Payments.objects.aggregate(total=Sum('value'))['total'] - qdt_pagamentos = Payments.objects.aggregate(total=Count('value'))['total'] - pagamentos = Payments.objects.all() - ticekMedio = total_pagamentos / qdt_pagamentos - produtos_mais_vendidos = ProductComanda.objects.values('product').annotate( - quantidade=Count('product'), - nome=F('product__name') ).order_by('-quantidade')[:5] - return render(request, 'home.html', {'total_pagamentos': total_pagamentos, 'pagamentos': pagamentos, 'qdt_pagamentos': qdt_pagamentos, 'produtos_mais_vendidos': produtos_mais_vendidos, 'ticekMedio': ticekMedio, }) - except: return render(request, 'home.html') @@ -39,13 +30,41 @@ def chartCuisine(request,dateStart,dateEnd): except: dateStart = parse_datetime('2025-01-01 07:00:00') dateEnd = datetime.datetime.now() - # print(request.user.groups.all()) - # print(request.user.is_authenticated) - # fulano = User() + tFila = [] tPreparando = [] tFinalizado = [] + total_pagamentos = Payments.objects.filter(datetime__range=(dateStart, dateEnd)).aggregate(total=Sum('value'))['total'] + total_pagamentos = 0 if total_pagamentos is None else total_pagamentos + qdt_pagamentos = Payments.objects.filter(datetime__range=(dateStart, dateEnd)).aggregate(total=Count('value'))['total'] + qdt_pagamentos = 0 if qdt_pagamentos is None else qdt_pagamentos + try: + ticket_medio = total_pagamentos / qdt_pagamentos + except: + ticket_medio = 0 + + try: + produtos_mais_vendidos = ProductComanda.objects.filter( + data_time__range=(dateStart, dateEnd) + ).values('product').annotate( + quantidade=Count('product'), + nome=F('product__name') + ).order_by('-quantidade')[:5] + maisVendidos = {} + for produto in produtos_mais_vendidos: + maisVendidos[produto['nome']] = produto['quantidade'] + produtos_mais_vendidos = maisVendidos + + except: + produtos_mais_vendidos = { + 'petra': 25, + 'petra2': 26, + 'petra3': 27, + 'petra4': 28, + 'petra5': 29, + } + orders = Order.objects.filter(delivered__isnull=False, queue__gt=dateStart, queue__lt=dateEnd) try: for order in orders: @@ -61,10 +80,18 @@ def chartCuisine(request,dateStart,dateEnd): 'mediaFila': mediaFila, 'mediaPreparando': mediaPreparando, 'mediaFinalizado': mediaFinalizado, + 'total_pagamentos': round(total_pagamentos, 2), + 'qtd_pagamentos': qdt_pagamentos, + 'ticket_medio': round(ticket_medio, 2), + 'produtos_mais_vendidos': produtos_mais_vendidos, }) except: return JsonResponse({ 'mediaFila': 0, 'mediaPreparando': 0, 'mediaFinalizado': 0, + 'total_pagamentos': round(total_pagamentos, 2), + 'qtd_pagamentos': qdt_pagamentos, + 'ticket_medio': round(ticket_medio, 2), + 'produtos_mais_vendidos': produtos_mais_vendidos, }) diff --git a/gestaoRaul/templates/static/home/js/home.js b/gestaoRaul/templates/static/home/js/home.js index 00c626a..2255571 100644 --- a/gestaoRaul/templates/static/home/js/home.js +++ b/gestaoRaul/templates/static/home/js/home.js @@ -1,4 +1,55 @@ +var barColors = ["red", "green","blue","orange","brown"]; + +var chartVendas = new Chart("vendas", { + type: "bar", + data: { + labels: [], + datasets: [{ + data: [], + backgroundColor: barColors, + }] + }, + options: { + legend: {display: false}, + title: { + display: true, + text: "Produtos mais vendidos" + }, + + } +}); + +var chartCuisine = new Chart("cuisine", { + type: "doughnut", + data: { + labels: [], + datasets: [{ + backgroundColor: barColors, + data: [] + }] + }, + options: { + legend: {display: true}, + title: { + display: true, + text: "Tempo médio (em minutos) do pedido em cada etapa." + }, + } +}); + + +function getDataAtualFormatada() { + const data = new Date(); + + const ano = data.getFullYear(); + const mes = String(data.getMonth() + 1).padStart(2, '0'); // Mês começa em 0 + const dia = String(data.getDate()).padStart(2, '0'); + + const dataFormatada = `${ano}-${mes}-${dia}`; + + return dataFormatada; +} function productsPlus(){ @@ -16,33 +67,35 @@ var yValues = [document.getElementById('q-0').innerText, ]; var barColors = ["red", "green","blue","orange","brown"]; -new Chart("vendas", { - type: "bar", - data: { - labels: xValues, - datasets: [{ - backgroundColor: barColors, - data: yValues - }] - }, - options: { - legend: {display: false}, - title: { - display: true, - text: "Produtos mais vendidos" - }, +// new Chart("vendas", { +// type: "bar", +// data: { +// labels: xValues, +// datasets: [{ +// backgroundColor: barColors, +// data: yValues +// }] +// }, +// options: { +// legend: {display: false}, +// title: { +// display: true, +// text: "Produtos mais vendidos" +// }, - } - }); +// } +// }); } function mediaCuisine(){ var dateStart = document.getElementById('data-start').value == '' ? '2025-01-01' :document.getElementById('data-start').value; -var dateEnd = document.getElementById('data-end').value == '' ? '2025-01-15' :document.getElementById('data-end').value;; +var dateEnd = document.getElementById('data-end').value == '' ? getDataAtualFormatada() :document.getElementById('data-end').value;; var yValues = []; var xValues = ['Fila', 'Preparando', 'Entregar']; -var barColors = ["red", "green","blue","orange","brown"]; +var totalPagamenstos = document.getElementById('total-pagamentos') +var qtdPagamentos = document.getElementById('qtd-pagamentos') +var ticketMedio = document.getElementById('ticket-medio') var resposta = fetch(`/chartCuisine/${dateStart}/${dateEnd}`, {method: 'GET', headers: {'Content-Type': 'application/json', @@ -53,36 +106,39 @@ var resposta = fetch(`/chartCuisine/${dateStart}/${dateEnd}`, {method: 'GET', yValues.push(data['mediaFila']) yValues.push(data['mediaPreparando']) yValues.push(data['mediaFinalizado']) - console.log(yValues) - new Chart("cuisine", { - type: "doughnut", - data: { - labels: xValues, - datasets: [{ - backgroundColor: barColors, - data: yValues - }] - }, - options: { - legend: {display: true}, - title: { - display: true, - text: "Tempo médio (em minutos) do pedido em cada etapa." - }, - } - }); + var totalP = data['total_pagamentos'] ?? '0,00' + var qtdP = data['qtd_pagamentos'] ?? '0' + var tocketP = data['ticket_medio'] ?? '0' + qtdPagamentos.innerText = qtdP + totalPagamenstos.innerText = 'R$ ' + totalP + ticketMedio.innerText = 'R$ ' + tocketP + var produtos_mais_vendidos = data.produtos_mais_vendidos + + var chaves = Object.keys(produtos_mais_vendidos); + var valores = []; + + for (const chave of chaves) { + valores.push(produtos_mais_vendidos[chave]); + } + + chartVendas.data.datasets[0].data = valores + chartVendas.data.labels = chaves + chartVendas.update(); + + chartCuisine.data.datasets[0].data = yValues + chartCuisine.data.labels = xValues + chartCuisine.update(); + }) .catch(error => { alert('Erro ao trazer dados da cozinha:', error) console.error('Erro ao trazer dados da cozinha:', error); }); + } function deleyGraficos(){ setTimeout(function() { mediaCuisine();}, 20000); } -// productsPlus() mediaCuisine() - -// console.log(document.getElementById('data-start').value) \ No newline at end of file