Git Product home page Git Product logo

associados's Introduction

Associados PythonBrasil

Projeto open source para o controle de associados da associação PythonBrasil

O projeto é desenvolvido por voluntários, utilizando principamente Python e Django e Twitter Bootstrap

Preparando o ambiente

Recomenda-se utilizar o virtualenv para manter o ambiente isolado de suas aplicações. Testado com Python 3.6.9, Postgresql 9.5.4 e Django 1.11.29.

Você precisa instalar o postgresql em sua máquina antes de continuar.

No Ubuntu:

$ sudo apt-get install postgresql

No Mac OS X com Homebrew:

$ brew install postgresql

Consulte sua distribuição para saber como preparar o postgres.

Exemplo, para instalar o banco de dados em /tmp/pgdata (temporário):

$ sudo apt-get install python-psycopg2
$ pg_ctl initdb -D /tmp/pgdata
$ pg_ctl start -D /tmp/pgdata
$ su postgres psql -U postgres # para roots: psql -d postgres 
postgres=# create user associados createdb createuser password 'assocdev';
postgres=# create database associados owner associados;
postgres=# \q

Você pode mudar os parâmetros locais, como banco de dados, copiando o arquivo: associados/example_settings.ini para associados/settings.ini e editando o arquivo com suas preferências. Os settings primeiro verificam variáveis de ambiente e depois as definições do settings.ini.

Ou seja, se você definir $ export DEBUG=True, o valor do DEBUG em settings.ini não será avaliado.

Instalar

$ make setup

Rodando a aplicação localmente

$ make run

Rodando os testes

$ make test

Ambiente com Docker

Caso queira subir o ambiente com Docker, temos um docker-compose.yml com o PostgreSQL e o Django. No arquivo, também é possível alterar as informações de acesso do PostgreSQL.

Instalar o Docker e o Docker-Compose.

Primeiramente vamos buildar nossos serviços web e db com o comando docker-compose build. Quando finalizar, estaremos prontos para rodar os primeiros comandos usando o bin/run como atalho.

  • Para rodar o migrate: ./bin/run python manage.py migrate
  • Para carregar nossas fixtures com o loaddata: ./bin/run python manage.py loaddata app/core/fixtures/site_init.json
  • E por fim para rodar o servidor de desenvolvimento Django, você só precisa deste comando: make run-with-docker. Esse comando vai levantar nosso servidor juntamente com as dependências de qualquer outro serviço (no nosso caso, db)

Caso queria realizar os testes, usar o comando ./bin/run python manage.py test.

Como contribuir?

Reporte os bugs e compartilhe o patches baseada nas nossas Issues ou simplesmente faça um fork do projeto, contribua com o que achar necessário e mande pra gente! :)

Build Status

Coverage Status

Code Climate

Issue Count

associados's People

Contributors

barmvicente avatar cadu-leite avatar cuducos avatar dependabot[bot] avatar ellisonleao avatar elyezer avatar emyller avatar feliperuhland avatar fgmacedo avatar filipecifali avatar gabrielponto avatar humrochagf avatar jamesperes avatar jtemporal avatar lskbr avatar mazulo avatar mondaini avatar muriloviana avatar osantana avatar perone avatar petry avatar ramiroluz avatar romulocollopy avatar rougeth avatar taniaa avatar tyronedamasceno avatar valdergallo avatar viniciusban avatar vmesel avatar vractal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

associados's Issues

Corrigir data de associação ao redefinir senha

@osantana iria mudar o link no site da APyB para colocar o do novo sistema que implantou terça-feira, dia 23/4.

Mas notei um erro que achei problemático...

Testei o reset da minha senha (passo obrigatório) e estava ok.
Mas notei que o sistema colocou a minha data de associação (de anos pra trás) para hoje.

Pode verificar?

Signup por email

aplicar a mudança do Cadu em #28 e #30 e alterar o form de signup para para logar-se por email

status do associado inválido

o metodo de pegar o ultimo pagamento da associação não está certo, ele deveria validar se a há alguma transação como done. caso não houver deveria ver se há algum outro pagamento que se encaixa nesta siauação

Erro no tratamento do retorno do PagSeguro (outro problema)

Depois que abri a issue anterior vi que temos outro problema também no tratamento do retorno do PagSeguro. Segue traceback:

Traceback (most recent call last):

  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/views/generic/base.py", line 48, in view
    return self.dispatch(request, *args, **kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 25, in _wrapper
    return bound_func(*args, **kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 77, in wrapped_view
    return view_func(*args, **kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 21, in bound_func
    return func(self, *args2, **kwargs2)

  File "/app/app/payment/views.py", line 132, in dispatch
    return super(NotificationView, self).dispatch(*args, **kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in dispatch
    return handler(request, *args, **kwargs)

  File "/app/app/payment/views.py", line 138, in post
    status, payment_id = self.transaction(notification_code)

  File "/app/app/payment/views.py", line 94, in transaction
    referencia = int(dom.xpath("//reference")[0].text)

ValueError: invalid literal for int() with base 10: 'Marcia Rodrigues - 2013'


<WSGIRequest
path:/payment/notification/,
GET:<QueryDict: {}>,
POST:<QueryDict: {u'notificationType': [u'transaction'], u'notificationCode': [u'AA9969-59502550254E-A0041C0F9097-4C0DDF']}>,
COOKIES:{},
META:{'CONTENT_LENGTH': '85',
 'CONTENT_TYPE': 'application/x-www-form-urlencoded',
 'CSRF_COOKIE': '43SDBcuEapiAJtpQXr5ozARDgCX60tbO',
 'HTTP_CONNECTION': 'close',
 'HTTP_HOST': 'associadosapyb.herokuapp.com',
 'HTTP_MAX_FORWARDS': '10',
 'HTTP_USER_AGENT': 'Jakarta Commons-HttpClient/3.1',
 'HTTP_VIA': '1.1 pagseguro.proxy.srv.intranet',
 'HTTP_X_FORWARDED_FOR': '186.234.16.8',
 'HTTP_X_FORWARDED_PORT': '80',
 'HTTP_X_FORWARDED_PROTO': 'http',
 'HTTP_X_HEROKU_DYNOS_IN_USE': '1',
 'HTTP_X_HEROKU_QUEUE_DEPTH': '0',
 'HTTP_X_HEROKU_QUEUE_WAIT_TIME': '0',
 'HTTP_X_REQUEST_START': '1360142844071',
 'PATH_INFO': u'/payment/notification/',
 'QUERY_STRING': '',
 'RAW_URI': '/payment/notification/',
 'REMOTE_ADDR': '186.234.16.8',
 'REMOTE_PORT': '80',
 'REQUEST_METHOD': 'POST',
 'SCRIPT_NAME': u'',
 'SERVER_NAME': 'associadosapyb.herokuapp.com',
 'SERVER_PORT': '80',
 'SERVER_PROTOCOL': 'HTTP/1.1',
 'SERVER_SOFTWARE': 'gunicorn/0.14.6',
 'gunicorn.socket': <socket._socketobject object at 0x11d4c90>,
 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x7fe0974a5270>,
 'wsgi.file_wrapper': <class gunicorn.http.wsgi.FileWrapper at 0xe0aa78>,
 'wsgi.input': <gunicorn.http.body.Body object at 0x1308210>,
 'wsgi.multiprocess': False,
 'wsgi.multithread': False,
 'wsgi.run_once': False,
 'wsgi.url_scheme': 'http',
 'wsgi.version': (1, 0)}>

Migrations scripts com problemas em PostgreSQL

Fica impossível fazer deploy no Heroku que usa PostgreSQL

$ ./manage.py migrate --settings=associados.settings_local
Running migrations for payment:

  • Migrating forwards to 0005_auto__add_field_transaction_date.

    payment:0001_initial
    FATAL ERROR - The following SQL query failed: ALTER TABLE "payment_paymenttype" ADD CONSTRAINT "category_id_refs_id_74ddaeeed229b12f" FOREIGN KEY ("category_id") REFERENCES "members_category" ("id") DEFERRABLE INITIALLY DEFERRED;
    The error was: relation "members_category" does not exist

Error in migration: payment:0001_initial
Traceback (most recent call last):
File "./manage.py", line 10, in
execute_from_command_line(sys.argv)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/django/core/management/init.py", line 443, in execute_from_command_line
utility.execute()
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/django/core/management/init.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(_args, *_options.dict)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
output = self.handle(_args, *_options)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/south/management/commands/migrate.py", line 108, in handle
ignore_ghosts = ignore_ghosts,
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/south/migration/init.py", line 213, in migrate_app
success = migrator.migrate_many(target, workplan, database)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/south/migration/migrators.py", line 235, in migrate_many
result = migrator.class.migrate_many(migrator, target, migrations, database)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/south/migration/migrators.py", line 310, in migrate_many
result = self.migrate(migration, database)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/south/migration/migrators.py", line 133, in migrate
result = self.run(migration)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/south/migration/migrators.py", line 107, in run
return self.run_migration(migration)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/south/migration/migrators.py", line 82, in run_migration
south.db.db.execute_deferred_sql()
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/south/db/generic.py", line 309, in execute_deferred_sql
self.execute(sql)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/south/db/generic.py", line 273, in execute
cursor.execute(sql, params)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/django/db/backends/util.py", line 40, in execute
return self.cursor.execute(sql, params)
File "/Users/osantana/Work/_Environments/associados/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 52, in execute
return self.cursor.execute(query, args)
django.db.utils.DatabaseError: relation "members_category" does not exist

Status da Associação

Efetuei o pagamento no pagseguro pq o meu status estava como inválido, mas mesmo assim ele continuou como inválido.

desvincular o pagamento do registro

Eu sugiro desvincular o pagamento do registro.

Deixar o pythonista se registrar sem efetuar o pagamento na hora.
Esse registro seria mantido por 3 meses, caso não haja nenhuma pagamento de nenhuma mensasalidade desde o cadastro do usuário, depois de 3 meses deletamos o registro do banco e o ususário tem que fazer um novo cadastro.

Simplifica o registro e caso haja algum problema para usuário pagar na hora ele não perde a visita ao site.

Por outro lado, nós podemos (com aviso prévio e sem permissão)
lembrá-lo que efetuou o registro no site mas que o pagamento ainda não foi feito.

Para os usuários que pagaram ao menos uma vez no passado, mantemos os registros até que alguém decida deletar numa outra ocasiao.

i18n

realizar umn "pente fino" no projeto, buscando mensagens sem suporte a tradução

senha do usuário cadastrado

Hoje, quando o usuário efetua o registro da associação os dados do usuário são cadastrados, mas ele não possui nenhuma senha de acesso, o modo que ele tem para alterar a sua senha, é ir no "Esqueceu sua senha" na tela de login, dado isso qual seria a melhor abordagem:

  1. Adicionar a senha na tela de registro
  2. Mandar a senha por email no final do cadastro

qual a melhor abordagem?

Erro no tratamento do retorno do PagSeguro

O PagSeguro usa latin1/ISO-8859-1 e o sistema, aparentemente, está tratando o POST como utf-8.

Segue o traceback que recebi por email:

Traceback (most recent call last):

  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/views/generic/base.py", line 48, in view
    return self.dispatch(request, *args, **kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 25, in _wrapper
    return bound_func(*args, **kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 77, in wrapped_view
    return view_func(*args, **kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 21, in bound_func
    return func(self, *args2, **kwargs2)

  File "/app/app/payment/views.py", line 132, in dispatch
    return super(NotificationView, self).dispatch(*args, **kwargs)

  File "/app/.heroku/python/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in dispatch
    return handler(request, *args, **kwargs)

  File "/app/app/payment/views.py", line 138, in post
    status, payment_id = self.transaction(notification_code)

  File "/app/app/payment/views.py", line 94, in transaction
    referencia = int(dom.xpath("//reference")[0].text)

  File "lxml.etree.pyx", line 897, in lxml.etree._Element.text.__get__ (src/lxml/lxml.etree.c:37030)

  File "apihelpers.pxi", line 691, in lxml.etree._collectText (src/lxml/lxml.etree.c:16634)

  File "apihelpers.pxi", line 1344, in lxml.etree.funicode (src/lxml/lxml.etree.c:21872)

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe7 in position 23: invalid continuation byte


<WSGIRequest
path:/payment/notification/,
GET:<QueryDict: {}>,
POST:<QueryDict: {u'notificationCode': [u'AEBC4F-16CBF6CBF6BF-0994CF8FA95B-835B79'], u'notificationType': [u'transaction']}>,
COOKIES:{},
META:{'CONTENT_LENGTH': '85',
 'CONTENT_TYPE': 'application/x-www-form-urlencoded',
 'CSRF_COOKIE': 'yr6DWCqOS20JxulLxya1oMNcGZ0yff6C',
 'HTTP_CONNECTION': 'close',
 'HTTP_HOST': 'associadosapyb.herokuapp.com',
 'HTTP_MAX_FORWARDS': '10',
 'HTTP_USER_AGENT': 'Jakarta Commons-HttpClient/3.1',
 'HTTP_VIA': '1.1 pagseguro.proxy.srv.intranet',
 'HTTP_X_FORWARDED_FOR': '186.234.16.8',
 'HTTP_X_FORWARDED_PORT': '80',
 'HTTP_X_FORWARDED_PROTO': 'http',
 'HTTP_X_HEROKU_DYNOS_IN_USE': '1',
 'HTTP_X_HEROKU_QUEUE_DEPTH': '0',
 'HTTP_X_HEROKU_QUEUE_WAIT_TIME': '0',
 'HTTP_X_REQUEST_START': '1360153324974',
 'PATH_INFO': u'/payment/notification/',
 'QUERY_STRING': '',
 'RAW_URI': '/payment/notification/',
 'REMOTE_ADDR': '186.234.16.8',
 'REMOTE_PORT': '80',
 'REQUEST_METHOD': 'POST',
 'SCRIPT_NAME': u'',
 'SERVER_NAME': 'associadosapyb.herokuapp.com',
 'SERVER_PORT': '80',
 'SERVER_PROTOCOL': 'HTTP/1.1',
 'SERVER_SOFTWARE': 'gunicorn/0.14.6',
 'gunicorn.socket': <socket._socketobject object at 0x1e3c670>,
 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x7f1ef47f5270>,
 'wsgi.file_wrapper': <class gunicorn.http.wsgi.FileWrapper at 0xf76a78>,
 'wsgi.input': <gunicorn.http.body.Body object at 0x1f71c90>,
 'wsgi.multiprocess': False,
 'wsgi.multithread': False,
 'wsgi.run_once': False,
 'wsgi.url_scheme': 'http',
 'wsgi.version': (1, 0)}>

Form de atualizaçào de dados está renderizando FKs

o form de atualização de usuário está atualizando a FK de cidades e organizações e cidades,

acho que a melhor abordagem é criar um widget q pega a FK e renderiza o nome, ou enTão fazemos isso por client

Erro ao processar retorno do PagSeguro

Traceback (most recent call last):

File "/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, _callback_args, *_callback_kwargs)
File "/python/lib/python2.7/site-packages/django/views/generic/base.py", line 48, in view
return self.dispatch(request, _args, *_kwargs)
File "/python/lib/python2.7/site-packages/django/utils/decorators.py", line 25, in _wrapper
return bound_func(_args, *_kwargs)
File "/python/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 77, in wrapped_view
return view_func(_args, *_kwargs)
File "/python/lib/python2.7/site-packages/django/utils/decorators.py", line 21, in bound_func
return func(self, _args2, *_kwargs2)
File "/app/payment/views.py", line 128, in dispatch
return super(NotificationView, self).dispatch(_args, *_kwargs)
File "/python/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in dispatch
return handler(request, _args, *_kwargs)
File "/app/app/payment/views.py", line 133, in post
status, payment_id, price = self.transaction(self.transaction_code)
ValueError: need more than 2 values to unpack

<WSGIRequest path:/payment/notification/, GET:<QueryDict: {}>, POST:<QueryDict: {u'notificationCode': [u'XXXXX-XXXXX-XXXXX-XXXX'], u'notificationType': [u'transaction']}>, COOKIES:{}, META:{'CONTENT_LENGTH': ‘85’,

gateway de notificação de pagamento

alterar o sistema de pagamento da apyb para que a notifiação seja um gateway para repassar para o site do evento da Pythonbrasil

URL_DE_API_CONFIGURADA_NO_PAGSEGURO = http://python.org.br/gateway/

Este gateway recebe o retorno do PagSeguro que vem acompanhado de um "ID" e outros dados.
O /gateway/ checa os dados do POST e decide se é da associação ou do evento e então dá baixa em um banco de dados, ou faz a chamada para as APIs respectivas

if request.POST.get("id_loja") == "evento":
    requests.get("http://API/DO/EVENTO") 
elif request.POST.get("id_loja") == "associacao":
    requests.get("http://API/DA/ASSOCIACAO")

Ou obviamente coloca essas uris em um dict()

Mas a idéia por enquanto seria essa, apenas um gateway recebendo os retornos e redirecionando para a "loja" correta.

settings_local.py não é "executado" - path not found

In [3]: settings.BASEDIR
Out[3]: '/home/cadu/prj/associados'

In [4]: execfile(BASEDIR + 'associados/settings_local.py')

após concatenação falta uma barra.

In [4]: execfile(BASEDIR + '/associados/settings_local.py') #sugestão

isso rola em outros ambientes ?
então nada do settings_local está disponível no meu ambiente.

Criar página inicial

Criar uma página inicial do projeto, já usando o twitter-bootstrap,

no primeiro momento, a página terá um link ara o cadastro e outro para a lista de associados da apyb

Erro de conversão para inteiro no retorno do PagSeguro

Traceback (most recent call last):

File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, _callback_args, *_callback_kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/views/generic/base.py", line 48, in view
return self.dispatch(request, _args, *_kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 25, in _wrapper
return bound_func(_args, *_kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 77, in wrapped_view
return view_func(_args, *_kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 21, in bound_func
return func(self, _args2, *_kwargs2)
File "/app/app/payment/views.py", line 128, in dispatch
return super(NotificationView, self).dispatch(_args, *_kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in dispatch
return handler(request, _args, *_kwargs)
File "/app/app/payment/views.py", line 133, in post
status, payment_id, price = self.transaction(self.transaction_code)
File "/app/app/payment/views.py", line 85, in transaction
referencia = int(dom.xpath("//reference")[0].text)
ValueError: invalid literal for int() with base 10: ‘Francisco Moreira de Miranda – 2013’

<WSGIRequest path:/payment/notification/, GET:<QueryDict: {}>, POST:<QueryDict: {u'notificationCode': [u'C96E73-1AD4E1D4E1F0-FBB4A2CFA1C1-885C92'], u'notificationType': [u'transaction']}>, COOKIES:{}, META:{'CONTENT_LENGTH': ‘85’,

Dashboard do usuário

Criar tela onde o usuário terá:

  • visualizar suas informações pessoais
  • visualizar informações relativas a associação
  • link para troca de senha
  • link para pagamento de associação caso a mesma ainda não tenha sido paga
  • link para edição de dados fornecidos a associação

Procedimento para importar associados novos do sistema antigo.

Alguns associados fizeram registro após a lista de associados do sistema
antigo ser gerada, esse registro foi feito da maneira antiga, manual.

Precisa ser documentado ou elaborado um procedimento para regularizar a
situação desses associados.

member: Organization é FK para member ?

O form utilizado para edião é o mesmo definido para Registro
e o form de registro defini Organization como CharField

organization = forms.CharField()

No modelo Member , o campo organization é uma FK para Organization

organization = models.ForeignKey(Organization, null=True, blank=True)

Pra mim isso não faz sentido, mesmo que fosse para manter uma base de empresas.
Atualizar a medida que usuários fazem cadastros não garante qualidade do dado (Globo , Gobo ...)
Prefiro deixar um campo aberto para edição. e deixar no Modelo Member o campo como charfield

Cadastro de usuário não permite cadastrar duas pessoas com mesmo nome

isso não é possivel pois o membro tem uma ligaçào com o User do django que possui o atributo username unico, como é possivel ter pessoas com o mesmo nome na associação, é necessário alterar a lógica que constrói o usuário aotomaticamente, setando um numero ou un "_" no final do nome

ex.

paulosilva
paulosilva1
paulosilva2

ou

paulosilva
paulosilva_
paulosilva__

Warnings em testes

Ainda temos algumas warning causadas pela nova funcionalidade de timezones.

Experiencia logada

Implementar o contrib.auth no projeto para que o usuário posso entrar no site e poder edtar sru dados de associação ou verificar a sua situação de pagamento

gravar todas as notificações no pagseguro

atualmente o sistema só grava os status de transação feita ou cancelada, sera legal guardarmos todos os status para que a verificação seja feita somente pelo sistema

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.