Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions GastoSystem
Submodule GastoSystem added at 815cd9
43 changes: 42 additions & 1 deletion expenses/forms.py
Original file line number Diff line number Diff line change
@@ -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):
Expand All @@ -10,6 +10,47 @@ class SelectCategoryForm(forms.Form):

from django.core.exceptions import ValidationError

from expenses.models import Category

from expenses.models import Payment

from expenses.models import Limit

class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = '__all__'

class LimitForm(forms.ModelForm):
class Meta:
model = Limit
fields = ['year','month','value']
labels = {
'year': 'Ano',
'month': 'Mês',
'value': 'Valor',
}
year = forms.IntegerField(disabled=True)
month = forms.IntegerField(disabled=True)



class PaymentForm(forms.ModelForm):
class Meta:
model = Payment
fields = ['description']

class EditExpenseForm(forms.ModelForm):
class Meta:
model = Expense
fields = ['category','payment','description','value','date']
labels = {
'category': 'Categoria',
'payment': 'Pagamento',
'description' : 'Descrição',
'value' : 'Valor',
'date' : 'data'
}

class ExpenseForm(forms.ModelForm):
class Meta:
Expand Down
4 changes: 3 additions & 1 deletion expenses/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ class Meta:
def __str__(self):
return f'{self.category.description.upper()} -{self.description.upper()} ({self.value})'



@staticmethod
def list_expenses_by_category(category):
from django.db.models import Sum
Expand All @@ -58,7 +60,7 @@ def list_expenses_by_category(category):
).annotate(total=Sum('value')).order_by(
'-date__year','-date__month'
)

def clean(self):
if self.value<0:
raise ValidationError(f'''O valor '{self.value}' é inválido
Expand Down
13 changes: 13 additions & 0 deletions expenses/static/expenses/css/report-expense.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.breadcamp{
margin-left: 2em;
}

.report-list{
margin-top: 1em;
margin-left: 2em;
}

.content-report{
margin-left: 2em;
margin-top: 1em;
}
7 changes: 6 additions & 1 deletion expenses/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@
<nav>
<ul>
<li id="nav-home" {% if page_selected == "home" %}class = "current-page"{% endif %}>Início</li>
<li id="nav-bank-loan" {% if page_selected == "bank-loan" %}class = "current-page"{% endif %}>Empréstimo</li>
<li id="nav-report" {% if page_selected == "report" %}class = "current-page"{% endif %}>Relatório</li>
<li id="nav-about" {% if page_selected == "about" %}class = "current-page"{% endif %}>Sobre</li>

</ul>
</nav>

Expand All @@ -33,7 +35,7 @@
{% endblock %}
</main>
<footer>
<div class="footer-desc">Desenvolvido por Danilo Borges da Silva. 2022.</div>
<div class="footer-desc">Desenvolvido por Macrosoft. 2022.</div>
<div class="footer-img"><img src="{% static 'expenses/img/uespi-logo.png' %}"></div>
</footer>
<script src="{% static 'expenses/js/jquery-3.6.0.min.js' %}"/></script>
Expand All @@ -45,6 +47,9 @@
$("#nav-report").click(function() {
window.open("{% url 'expenses:report' %}","_self")
});
$("#nav-bank-loan").click(function() {
window.open("{% url 'expenses:bank_loan' %}","_self")
});
$("#nav-about").click(function() {
window.open("{% url 'expenses:about' %}","_self")
});
Expand Down
8 changes: 8 additions & 0 deletions expenses/templates/expenses/bank-loan.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{% extends "base.html" %}
{% load static %}
{% block title %}Empréstimo Bancário{% endblock %}
{% block content %}
<link href="{% static 'expenses/css/report-expense.css' %}" rel="stylesheet"/>

<div class="breadcamp"><h4>Empréstimo Bancário</h4></div>
{% endblock %}
92 changes: 92 additions & 0 deletions expenses/templates/expenses/form/delete-expense.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<form method="GET" id="formDeleteExpense">
{% csrf_token %}
{{ form.as_p }}
<div class="btn-position-modal">
<input type="button" class="btn btn-red sub white small " id="cancelModal" value="Cancelar">
<input class="btn btn-gray sub white small " type="submit" value="Sim">
</div>

</form>
<div class="output"></div>
<script>
$(".output").hide();
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
function sameOrigin(url) {

var host = document.location.host;
var protocol = document.location.protocol;
var sr_origin = '//' + host;
var origin = protocol + sr_origin;

return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||

!(/^(\/\/|http:|https:).*/.test(url));
}

function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$('#formDeleteExpense').on('submit', function(e){
e.preventDefault();

$.ajax({
type : "GET",
url: "{% url 'expenses:delete_expense' %}",
data: {
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
action: 'delete',
id: {{id}}
},

success: function(data){
$('.modal-content').html(data.html);
$('.output').text(data.response);
$(".output").show();

setTimeout(() => {
$('#cancelModal').click()
}, 2000)
},

failure: function() {

}
})
})

var modal = document.querySelector("#modal");
var modalOverlay = document.querySelector("#modal-overlay");
var closeButton = document.querySelector("#close-button");
var openButton = document.querySelector("#open-button");

$('#cancelModal').on('click', function(){
modal.classList.remove("open");
modal.classList.toggle("closed");
modalOverlay.classList.remove("open");
modalOverlay.classList.toggle("closed");
});
</script>
97 changes: 97 additions & 0 deletions expenses/templates/expenses/form/edit-expense.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
<form method="POST" id="formEditExpense">
{% csrf_token %}
{{ form.as_p }}
<div class="btn-position-modal">
<input type="button" class="btn btn-red sub white small " id="cancelModal" value="Cancelar">
<input class="btn btn-gray sub white small " type="submit" value="Enviar">
</div>

</form>
<div class="output"></div>
<script>
$(".output").hide();
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
function sameOrigin(url) {

var host = document.location.host;
var protocol = document.location.protocol;
var sr_origin = '//' + host;
var origin = protocol + sr_origin;

return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||

!(/^(\/\/|http:|https:).*/.test(url));
}

function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$('#formEditExpense').on('submit', function(e){
e.preventDefault();


$.ajax({
type : "POST",
url: "{% url 'expenses:edit_expense' %}",
data: {
category : $('#id_category').val(),
payment : $('#id_payment').val(),
description : $('#id_description').val(),
value : $('#id_value').val(),
date : $('#id_date').val(),
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
action: 'post'
},

success: function(data){
$('.modal-content').html(data.html);
$('.output').text(data.response);
$(".output").show();
},

failure: function() {

}


});


});

var modal = document.querySelector("#modal");
var modalOverlay = document.querySelector("#modal-overlay");
var closeButton = document.querySelector("#close-button");
var openButton = document.querySelector("#open-button");

$('#cancelModal').on('click', function(){
modal.classList.remove("open");
modal.classList.toggle("closed");
modalOverlay.classList.remove("open");
modalOverlay.classList.toggle("closed");
});
</script>
Loading