pyar / asoc_members Goto Github PK
View Code? Open in Web Editor NEWAplicación web para la gestión de membresías de la Asociación Civil
License: MIT License
Aplicación web para la gestión de membresías de la Asociación Civil
License: MIT License
Hay que definir si un hombre es "argentinA", porque "la nacionalidad", y una mujer es "casado", por "el estado civil", o qué....
I've cloned the repo once again and when I execute make up-dev
:
$ make up-dev
docker-compose up -d
asoc_members_web_1 is up-to-date
docker-compose exec web ./manage.py migrate
Traceback (most recent call last):
File "./manage.py", line 16, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 332, in execute
self.check()
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 364, in check
include_deployment_checks=include_deployment_checks,
File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 58, in _run_checks
issues.extend(super()._run_checks(**kwargs))
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 351, in _run_checks
return checks.run_checks(**kwargs)
File "/usr/local/lib/python3.6/site-packages/django/core/checks/registry.py", line 73, in run_checks
new_errors = check(app_configs=app_configs)
File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 13, in check_url_config
return check_resolver(resolver)
File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 23, in check_resolver
return check_method()
File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 397, in check
for pattern in self.url_patterns:
File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 36, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 536, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 36, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 529, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/code/website/website/urls.py", line 21, in <module>
path('', include('members.urls')),
File "/usr/local/lib/python3.6/site-packages/django/urls/conf.py", line 34, in include
urlconf_module = import_module(urlconf_module)
File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/code/website/members/urls.py", line 16, in <module>
path('reportes/faltantes', views.report_missing, name='report_missing'),
AttributeError: module 'members.views' has no attribute 'report_missing'
make: *** [Makefile:26: up-dev] Error 1
Esto se divide en dos partes:
DB itself: como tenemos un postgresql nuestro, tenemos que hacerle backup (¿deberíamos migrar a usar el postgresql de azure?)
Imágenes: como ya las estamos guardando en un volumen de Azure, ¿esto no está ya replicado?
En la lista de eventos hay que agregar un checkbox Ver cerrados
, default en False, que (además del filtro que actualmente está) filtre por si el evento está cerrado o no.
El comportamiento es que uno entraría a esa página y a priori NO vería los eventos cerrados, pero puede activar el verlos a través de ese checkbox...
Cuando se intenta levantar el entorno de desarrollo usando pipenv falla. Posiblemente por las dependencias del Pipfile
En el listado de patrocinios de un evento sería bueno ver el monto facturado (según figura en Invoice en lugar del de la categoria relacionada), el iva y el total.
Está empezada, pero se cambiaron un poco los modelos y hay que ajustarla/terminarla.
Es muy similar al reporte de "gente que le falta algo para ser socia" (pendientes), pero al revés, listando sólo aquellos que ya tienen todo listo (pero todavía no son socies).
En este mismo branch habría que hacer que aquellos que ya tienen todo listo no aparezcan en el listado de "pendientes".
Se necesita una página con un "buscar" que me encuentre N resultados, y al hacer click en uno de esos me despliegue info concentrada de esa persona:
Podrian tener links donde correspondan a la página del admin correspondiente; en una segunda fase se puede revisar si se quiere que se administre todo de un sólo lado (creo que no se justifica)
Hay que agregar al admin algunas pantallas de reporte, que @lecovi y @facundobatista necesiten.
Por lo pronto:
etc
@facundobatista tiene una GSpreadsheet con los datos de todos los miembros acutales.
Hay que consumir esa planilla y meterla en nuestros modelos.
Cuando el admin hace una factura, luego le toca el turno al organizador de enviar dicha factura a los sponsors, para que realicen el pago.
Es responsabilidad del organizador que la factura le llegue al sponsor, y que el sponsor dé el OK.
Cuando el sponsor da el OK, queda (a todas las partes, incluso el sistema) esperar que el sponsor haga el pago.
Este "aprobar factura" es más bien "la factura ya está en manos del sponsor, queda esperar que hagan el pago". No es aprobar, tenemos que encontrar un mejor verbo y cambiar la interfaz (botones, mensajes) para expresar esto mejor.
Para los socios colaboradores necesitamos un flag más en el modelo que indique que realizó el proceso para ser colaborador, default a False en caso de ser colaborador, nullable (para los no colaboradores) y que se pondría en True a mano..
Hablo de esta. Tiene un listado, con paginación, pero el listado es muy corto; muestra 5, debería mostrar unos 20, o 50...
Hay que hacer lo mínimos indispensable para desplegar este proyecto. Incluye:
[] Hacer el oroyecto pip instalable
[] Dockerizar
[] etc
Sugiero discutir esto con @gilgamezh
Hay que armar un doc que explique cómo hay que hacer para contribuir en el proyecto.
Aprovechando que tenemos la nueva infra, podemos dejar ahí mismo descripto el proceso para que pase a staging
Sería muy útil tener las tareas pendientes separadas por evento y por tipo.
Incluso mejor, poder ordenarlas o filtrarlas...
Eliminar la configuración de pypi local: https://github.com/PyAr/asoc_members/blob/develop/Dockerfile#L5
Tenemos todo dockerizado pero Especializado para producción.
Deberíasmos meojrar la cosa para facilitar el entorno de desarrollo. Tener docker-compose específico y eso.
@FedeG (Fede Gonzalez) nos estuvo tirando algunas líneas y podría colaborar
Quedó desactualizada la informaición contenida en la WIKI. TODO lo que aparece en ella no aplica para la app.
Al dar de alta un proveedor sería útil contar con alguna validación para el campo CBU ya que tiene 22 caracteres y es facil equivocarse.
Para referencia de como se podria validar: https://es.wikipedia.org/wiki/Clave_Bancaria_Uniforme
Una libreria Python que implementa (entre otras cosas) la validación del CBU: https://github.com/arthurdejong/python-stdnum
Necesitamos un comando que genere las facturas de un determinado período. Ya hay un script que interactúa con AFIP, hay que tocarlo/ajustarlo y ver qué funcione como corresponde.
Cuando se da de alta un proveedor, para algunos casos, el numero de cuenta bancaria no es lo suficientemente largo.
Por ejemplo, para banco macro, el numero de cuenta posee 15 dígitos.
El script debe recibir un mes como parámetro, y tiene que sacar todos los miembros que NO tienen débito automático, y si la ultima cuota que tienen cargada es del mes recibido, mandarles un mail.
El mail es algo como "te recordamos que la última cuota que tenés paga de la AC es la del mes tanto, y tenés todas estas opciones para seguir pagando".
Después pondremos un crontab los últimos días del mes o los primeros del siguiente, y sale solo.
Hoy tenemos bien configurados y separados los entornos de dev y prod.
Tenemos que agregar la posibilidad de instalar cosas en el entorno de dev (que no se instalen en prod).
Por ej ipython
y (eventualmente) todas las dependencias para testear (factory-boy
, etc)
Fui al admin -> sponsors, hice click en Kilimo, fue a esta url, me dio 500
Está agregado travis, pero no funciona en los PR.
Se necesita setear en el install del travis q use el requirements desde ./config/
Ejemplo esta página que es la que apunta del home page a nivel de "tarea".
Uno va ahí porque el sistema dice "che, tenés que generar la factura", pero no está la info de qué hay que facturar...
Tiene que mostrar:
(los datos del sponsor ya están, pero ocultos por default)
No me entra 191-070-34060/6
Todo lo actual (excepto la página de "me quiero hacer socio"!!) protegido para que sea sólo accesible por usuarios admines...
Sino, ¿cómo cargamos sponsors no Argentinos?
Se necesita un menú para poder navegar entre secciones.
Es muy molesto tener que volver al home para poder cambiar de sección.
En vez de utilizar Google Form, y luego a mano cargar la info en el sistema, hacer una pantalla que permita ingresar los datos iniciales directamente en el sistema:
Durante el PyCamp generamos funcionalidades para:
Ambas funcionalidades deben ser detalladamente monitoreadas y testeadas. Hay muchos corner cases y cosas que pueden fallar.
Progresivamente, hay que hacer esas funcionalidades más robustas.
Ejemplo esta ventana, dice
Onapsis
GCoop
Fiqus
...
Ejemplo, en esta página, hay dos cosas a cambiar:
el título de la primer opción está pegado: Sponsorcategory*
el combobox de la segunda opción está desordenado
En la de persona:
https://github.com/PyAr/asoc/wiki/Socios-colaboradores
En la de empresa:
http://bit.ly/pyar-estatuto
https://drive.google.com/file/d/0ByBMM-qX_hs1TlM5LTBMN19mUHc/view
).This way we would never land code that fail tests
Es recomendable que el interesado en afiliarse a la AC, reciba via email todo los formularios para finalizar el registro. Eso debe suceder luego de darse de alta por la WEB.
Luego del registro también que aparezcan directamente como step2 los formularios para que los pueda descargar inmediatamente.
Básicamente para acordarnos de reclamarle cada tanto al sponsor que ponga la tarasca...
Es en esta página, quizás se refiera a que la factura no está hecha?
Por ejemplo, esta página, cuando yo había cargado el patrocinio puse un comentario pero acá no aparece :/
Basicamente hacer "web" el comando "pay" que existe en este momento.
dos typos en la misma frase :)
Hoy cuando se carga un patrocinio, se relaciona un sponsor con una categoría de sponsorship. Esa relación dictamina el monto a facturar.
Sería deseable en ese momento tener la posibilidad de sobreescribir el monto por default asignado por la categoría.
Este caso de uso surge debido a que en PyData los montos están expresados en USD, al cargar las categorias se uso una cotización en particular, pero al momento de emitir las facturas esta cotización es muy distinta.
Hay una signal de post_save que crea automáticamente las cuotas a partir de un pago. Como todo, puede fallar. Hay que analizar bien qué hace falta registrar y cómo. ¿Alarmas, alertas, etc?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.