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
32 changes: 30 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,30 @@
# imobi
Sistema de sistema de Imobiliária
[![Python Version](https://img.shields.io/badge/python-3.8.7-brightgreen.svg)](https://python.org)
[![Django Version](https://img.shields.io/badge/django-4.0.1-brightgreen.svg)](https://djangoproject.com)

<div align="center">
<h3>Sistema de Agendamento de Visitas para Imobiliárias</h3>
</div>

![](https://github.com/rogeriodelphi/imobi/blob/master/blob/master/images/demo.png)

# SAVI
```bash
Sistema de Agendamento de Visitas para Imobiliárias
Projeto proprietário desenvolvido em Python 3 no Windows, testado no GNU/Linux e Windows.
```

## Implementações
```bash
* Cadastro de Imóveis, visitas, agendamentos.
* Login/Logout
* Interface simples e em português
```

<div align="center">

<p>
<!-- Image Shields -->
<img alt="Languages Count" src="https://img.shields.io/github/languages/count/rogeriodelphi/DjangoRestAPI">
<img alt="Last Commit" src="https://img.shields.io/github/last-commit/rogeriodelphi/DjangoRestAPI">
<img alt="Repo Size" src="https://img.shields.io/github/repo-size/rogeriodelphi/DjangoRestAPI">
</p>
Binary file modified autenticacao/__pycache__/urls.cpython-38.pyc
Binary file not shown.
Binary file modified autenticacao/__pycache__/views.cpython-38.pyc
Binary file not shown.
14 changes: 11 additions & 3 deletions autenticacao/templates/cadastro.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<div class="col-md-3 sidebar">
<div class="logo_sidebar">
<h2 class="logo">
<img class="img_logo_sidebar" src="">IMOBI
<img class="img_logo_sidebar" src="{% static 'autenticacao/img/logo.png' %}">IMOBI
</h2>
</div>
<div class="corpo_sidebar">
Expand All @@ -24,15 +24,23 @@ <h2 class="titulo cor_branca">Cadastre-se</h2>
<p style="margin-top:-20px" class="cor_branca descricao">Nos melhores preços</p>
<br>
<br>
<a class="btn_logar" href="">LOGAR</a>
<a class="btn_logar" href="{% url 'logar' %}">LOGAR</a>
</div>

</div>
</div>
<div class="col-md-9">
<div class="area_cadastrar">
<form action="" method="">
<form action="{% url 'cadastro' %}" method="POST">
{% csrf_token %}
<h2 class="titulo_area_cadastrar">Cadastre-se</h2>
{% if messages %}
{% for message in messages %}
<div class="alert {{message.tags}}">
{{message}}
</div>
{% endfor %}
{% endif %}
<br>
<input name="username" class="input_cadastrar input_cadastrar_nome" type="text" placeholder="Username...">
<br>
Expand Down
57 changes: 57 additions & 0 deletions autenticacao/templates/logar.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{% extends 'base.html' %}
{% load static %}


{% block 'head' %}
<link rel="stylesheet" href="{% static 'autenticacao/css/cadastro.css' %}">
{% endblock %}

{% block 'titulo' %}Logar{% endblock %}

{% block 'body' %}
<div class="container-fluid">
<div class="row">
<div class="col-md-3 sidebar">
<div class="logo_sidebar">
<h2 class="logo">
<img class="img_logo_sidebar" src="{% static 'autenticacao/img/logo.png' %}">IMOBI
</h2>
</div>
<div class="corpo_sidebar">
<div>
<h2 class="titulo cor_branca">Logar</h2>
</div>
<div>
<p class="cor_branca descricao">As melhores casas</p>
<p style="margin-top:-20px" class="cor_branca descricao">Nos melhores preços</p>
<br>
<br>
<a class="btn_logar" href="{% url 'cadastro' %}">Cadastre-se</a>
</div>
</div>
</div>
<div class="col-md-9">
<div class="area_cadastrar">
<h2 class="titulo_area_cadastrar">Logar</h2>
{% if messages %}
{% for message in messages %}
<div class="alert {{message.tags}}">
{{message}}
</div>
{% endfor %}
{% endif %}
<br>
<br>
<form method="POST" action="{% url 'logar' %}">{% csrf_token %}
<input name="username" class="input_cadastrar input_cadastrar_email" type="text" placeholder="Username...">
<br>
<br>
<input name="senha" class="input_cadastrar input_cadastrar_senha" type="password" placeholder="Senha...">
<br>
<input class="btn_cadastrar" type="submit" value="Logar">
</form>
</div>
</div>
</div>
</div>
{% endblock %}
1 change: 1 addition & 0 deletions autenticacao/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
urlpatterns = [
path('cadastro/', views.cadastro, name='cadastro' ),
path('logar/', views.logar, name='logar' ),
path('sair/', views.sair, name="sair")
]
55 changes: 52 additions & 3 deletions autenticacao/views.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,57 @@
from django.shortcuts import render
from django.contrib import messages
from django.contrib.messages import constants
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib import auth

def cadastro(request):
return render(request, 'cadastro.html')
if request.method == "GET":
if request.user.is_authenticated:
return redirect('/')
return render(request, 'cadastro.html')
elif request.method == "POST":
username = request.POST.get('username')
email = request.POST.get('email')
senha = request.POST.get('senha')

if len(username.strip()) == 0 or len(email.strip()) == 0 or len(senha.strip()) == 0:
messages.add_message(request, constants.ERROR, 'Preenha os todos os campos.')
return redirect('/auth/cadastro')

user = User.objects.filter(username=username)
if user.exists():
messages.add_message(request, constants.ERROR, 'Usuário já existe.')
return redirect('/auth/cadastro')
try:
user = User.objects.create_user(username=username,
email=email,
password=senha)
user.save()
messages.add_message(request, constants.SUCCESS, 'Usuário cadastrado com sucesso.')
return redirect('/auth/logar')
except:
messages.add_message(request, constants.ERROR, 'Erro interno do sistema.')
return redirect('/auth/cadastro')

def logar(request):
return HttpResponse('Logar')
if request.method == "GET":
if request.user.is_authenticated:
return redirect('/')
return render(request, 'logar.html')
elif request.method == "POST":
username = request.POST.get('username')
senha = request.POST.get('senha')

usuario = auth.authenticate(username=username, password=senha)

if not usuario:
messages.add_message(request, constants.ERROR, 'Username ou senha inválidos')
return redirect('/auth/logar')
else:
auth.login(request, usuario)
return redirect('/')

def sair(request):
auth.logout(request)
return redirect('/auth/logar')
Binary file added blob/master/images/demo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file added identifier.sqlite
Empty file.
Binary file modified imobi/__pycache__/settings.cpython-38.pyc
Binary file not shown.
Binary file modified imobi/__pycache__/urls.cpython-38.pyc
Binary file not shown.
11 changes: 11 additions & 0 deletions imobi/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"""
import os
from pathlib import Path
from django.contrib.messages import constants

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
Expand Down Expand Up @@ -38,6 +39,7 @@
'django.contrib.messages',
'django.contrib.staticfiles',
'autenticacao',
'plataforma',
]

MIDDLEWARE = [
Expand Down Expand Up @@ -127,3 +129,12 @@
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

MESSAGE_TAGS = {
constants.DEBUG: 'alert-primary',
constants.ERROR: 'alert-danger',
constants.SUCCESS: 'alert-success',
constants.INFO: 'alert-info',
constants.WARNING: 'alert-warning',
}

1 change: 1 addition & 0 deletions imobi/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
urlpatterns = [
path('admin/', admin.site.urls),
path('auth/', include('autenticacao.urls')),
path('', include('plataforma.urls')),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Binary file added media/img/istockphoto-1165384568-612x612.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/img/istockphoto-1165936957-612x612.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/img/istockphoto-155700839-612x612.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/img/istockphoto-453195517-612x612.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file added plataforma/__init__.py
Empty file.
15 changes: 15 additions & 0 deletions plataforma/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from django.contrib import admin
from .models import DiasVisita, Horario, Imovei, Cidade, Imagem, Visitas


@admin.register(Imovei)
class ImoveiAdmin(admin.ModelAdmin):
list_display = ('id', 'rua', 'valor', 'quartos', 'tamanho', 'cidade', 'tipo')
list_editable = ('valor', 'tipo')
list_filter = ('cidade', 'tipo')

admin.site.register(DiasVisita)
admin.site.register(Horario)
admin.site.register(Imagem)
admin.site.register(Cidade)
admin.site.register(Visitas)
6 changes: 6 additions & 0 deletions plataforma/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class PlataformaConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'plataforma'
74 changes: 74 additions & 0 deletions plataforma/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Generated by Django 4.0.1 on 2022-01-14 04:12

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name='Cidade',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=30)),
],
),
migrations.CreateModel(
name='DiasVisita',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('dia', models.CharField(max_length=20)),
],
),
migrations.CreateModel(
name='Horario',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('horario', models.TimeField()),
],
),
migrations.CreateModel(
name='Imagem',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('img', models.ImageField(upload_to='img')),
],
),
migrations.CreateModel(
name='Imovei',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('valor', models.FloatField()),
('quartos', models.IntegerField()),
('tamanho', models.FloatField()),
('rua', models.CharField(max_length=50)),
('tipo', models.CharField(choices=[('V', 'Venda'), ('A', 'Aluguel')], max_length=1)),
('tipo_imovel', models.CharField(choices=[('A', 'Apartamento'), ('C', 'Casa')], max_length=1)),
('numero', models.IntegerField()),
('descricao', models.TextField()),
('cidade', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='plataforma.cidade')),
('dias_visita', models.ManyToManyField(to='plataforma.DiasVisita')),
('horarios', models.ManyToManyField(to='plataforma.Horario')),
('imagens', models.ManyToManyField(to='plataforma.Imagem')),
],
),
migrations.CreateModel(
name='Visitas',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('dia', models.CharField(max_length=20)),
('horario', models.TimeField()),
('status', models.CharField(choices=[('A', 'Agendado'), ('F', 'Finalizado'), ('C', 'Cancelado')], default='A', max_length=1)),
('imovel', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='plataforma.imovei')),
('usuario', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),
],
),
]
Empty file.
Loading