diff --git a/expenses/forms.py b/expenses/forms.py index b617a3eb..088943b5 100644 --- a/expenses/forms.py +++ b/expenses/forms.py @@ -1,6 +1,6 @@ from django import forms from django.core.exceptions import ValidationError - +from expenses.admin import PaymentAdmin from expenses.models import Category class SelectCategoryForm(forms.Form): @@ -10,6 +10,20 @@ class SelectCategoryForm(forms.Form): from django.core.exceptions import ValidationError +from expenses.models import Category + +from expenses.models import Payment + +class CategoryForm(forms.ModelForm): + class Meta: + model = Category + fields = ['description'] + +class PaymentForm(forms.ModelForm): + class Meta: + model = Payment + fields = ['description'] + class ExpenseForm(forms.ModelForm): class Meta: diff --git a/expenses/static/expenses/css/core.css b/expenses/static/expenses/css/core.css index 693a2cc9..767f3383 100644 --- a/expenses/static/expenses/css/core.css +++ b/expenses/static/expenses/css/core.css @@ -4,13 +4,37 @@ image-rendering: smooth; } -:root{ +:root { --color-yellow: #FCE600; --color-red: #F33C40; --color-gray: #5A5F63; --color-gray-light: #F2F2F2; } +html[data-theme='light'] { + --color-yellow: #FCE600; + --color-red: #F33C40; + --color-gray: #5A5F63; + --color-gray-light: #F2F2F2; +} + +html[data-theme='dark'] { + --color-yellow: #00ADB5; + --color-red: #FD7014; + --color-gray: #393E46; + --color-gray-light: #DDDDDD; +} + +.btn-link{ + display: flex; + width: 5%; + +} + +.btn-link-color{ + filter: invert(38%) sepia(9%) saturate(260%) hue-rotate(165deg) brightness(93%) contrast(95%); +} + body { font-family: 'Poppins', sans-serif; font-size: 1rem; diff --git a/expenses/static/expenses/img/icon/moon.svg b/expenses/static/expenses/img/icon/moon.svg new file mode 100644 index 00000000..de441761 --- /dev/null +++ b/expenses/static/expenses/img/icon/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/expenses/static/expenses/img/icon/sun.svg b/expenses/static/expenses/img/icon/sun.svg new file mode 100644 index 00000000..34f0707a --- /dev/null +++ b/expenses/static/expenses/img/icon/sun.svg @@ -0,0 +1 @@ +sun-warm \ No newline at end of file diff --git a/expenses/static/expenses/img/irmao-do-jorel-dark-mode.png b/expenses/static/expenses/img/irmao-do-jorel-dark-mode.png new file mode 100644 index 00000000..5c649d2f Binary files /dev/null and b/expenses/static/expenses/img/irmao-do-jorel-dark-mode.png differ diff --git a/expenses/templates/base.html b/expenses/templates/base.html index e910ee0c..8361927f 100644 --- a/expenses/templates/base.html +++ b/expenses/templates/base.html @@ -11,9 +11,35 @@
- + + + +
+
{% block display-values %} @@ -50,5 +76,5 @@ }); }); - + diff --git a/expenses/templates/expenses/form/new-category.html b/expenses/templates/expenses/form/new-category.html new file mode 100644 index 00000000..0e3c761b --- /dev/null +++ b/expenses/templates/expenses/form/new-category.html @@ -0,0 +1,97 @@ +
+ {% csrf_token %} + {{ form.as_p }} +
+ + +
+ +
+
+ \ No newline at end of file diff --git a/expenses/templates/expenses/form/new-limit.html b/expenses/templates/expenses/form/new-limit.html new file mode 100644 index 00000000..72c542a1 --- /dev/null +++ b/expenses/templates/expenses/form/new-limit.html @@ -0,0 +1,94 @@ +
+ {% csrf_token %} + {{ form.as_p }} +
+ + +
+ +
+
+ \ No newline at end of file diff --git a/expenses/templates/expenses/form/new-payment.html b/expenses/templates/expenses/form/new-payment.html new file mode 100644 index 00000000..8e5f4f24 --- /dev/null +++ b/expenses/templates/expenses/form/new-payment.html @@ -0,0 +1,97 @@ +
+ {% csrf_token %} + {{ form.as_p }} +
+ + +
+ +
+
+ \ No newline at end of file diff --git a/expenses/templates/expenses/main.html b/expenses/templates/expenses/main.html index f1104169..3032cbd7 100644 --- a/expenses/templates/expenses/main.html +++ b/expenses/templates/expenses/main.html @@ -66,7 +66,7 @@
-
+
@@ -139,6 +139,12 @@ $(".action-modal").on('click', function(){ //console.log($(this).data().action) + new_data = {} + if($(this).data().id){ + new_data = { + id: $(this).data().id, + } + } $.ajax({ type: 'GET', diff --git a/expenses/views.py b/expenses/views.py index 4426f7ac..e83b4979 100644 --- a/expenses/views.py +++ b/expenses/views.py @@ -1,3 +1,4 @@ +from multiprocessing import context from django.shortcuts import render,redirect from django.urls import reverse @@ -86,11 +87,6 @@ def home(request,page=None): # list_item_expenses = Expense.objects.all()[:NUMBER_ITENS] # else: # list_item_expenses = Expense.objects.all() - - - - - context = { 'page_selected': "home", @@ -160,7 +156,9 @@ def get_total_expenses_ajax(request): from expenses.forms import ExpenseForm from django.template.loader import render_to_string +from django.views.decorators.csrf import csrf_exempt +@csrf_exempt def create_expense(request): title = 'Inserir Gasto' context_extra = {} @@ -194,31 +192,126 @@ def create_expense(request): } return JsonResponse(response, status = 200) +from expenses.forms import CategoryForm +@csrf_exempt def handle_category(request): - title = 'Inserir Categoria' + title = "Inserir Categoria" + context_extra = {} + if request.POST.get('action') == 'post': + form = CategoryForm(request.POST) + + if form.is_valid(): + model = form.save(commit=False) + model.save() + context_extra = { + 'response' : 'Criado com sucesso!', + 'error': False, + } + else: + context_extra = { + 'response' : 'Erros ocorreram!', + 'error': True + } + + else: + form = CategoryForm() + context = { + 'form': form, + 'categories': Category.objects.all() + } + html_page = render_to_string('expenses/form/new-category.html', context) response = { 'title' : title, - 'html' : 'a fazer...', - + 'html' : html_page, + 'response' : context_extra['response'] if 'response' in context_extra else None, + 'error': context_extra['error'] if 'error' in context_extra else None, } return JsonResponse(response, status = 200) +@csrf_exempt + def handle_limit(request): title = 'Inserir Limite' + context_extra = {} + if request.POST.get('action') == 'post': + form = ExpenseForm(request.POST) + + if form.is_valid(): + model = form.save(commit=False) + model.save() + context_extra = { + 'response' : 'Criado com sucesso!', + 'error': False, + } + else: + context_extra = { + 'response' : 'Erros ocorreram!', + 'error': True + } + + else: + form = ExpenseForm() + context = { + 'form': form, + } + html_page = render_to_string('expenses/form/new-expense.html', context) response = { 'title' : title, - 'html' : 'a fazer...', - + 'html' : html_page, + 'response' : context_extra['response'] if 'response' in context_extra else None, + 'error': context_extra['error'] if 'error' in context_extra else None, } return JsonResponse(response, status = 200) +from expenses.forms import PaymentForm +@csrf_exempt + def handle_payment(request): - title = 'Inserir Forma de Pagamento' + title = 'Inserir Pagamento' + context_extra = {} + if request.POST.get('action') == 'post': + form = PaymentForm(request.POST) + + if form.is_valid(): + model = form.save(commit=False) + model.save() + context_extra = { + 'response' : 'Criado com sucesso!', + 'error': False, + } + else: + context_extra = { + 'response' : 'Erros ocorreram!', + 'error': True + } + + else: + form = PaymentForm() + context = { + 'form': form, + 'limits': Limit.objects.all(), + } + html_page = render_to_string('expenses/form/new-payment.html', context) response = { 'title' : title, - 'html' : 'a fazer...', + 'html' : html_page, + 'response' : context_extra['response'] if 'response' in context_extra else None, + 'error': context_extra['error'] if 'error' in context_extra else None, + } + return JsonResponse(response, status = 200) + +def edit_expense(request): + title = 'Alterar Gasto' + expense = Expense.objects.get(id=request.GET['id']) + context = { + 'expense': expense, + } + html_page = render_to_string('expenses/form/edit-expense.html', context) + response = { + 'title' : title, + 'html' : html_page, } return JsonResponse(response, status = 200) \ No newline at end of file