Giter VIP home page Giter VIP logo

timeoverflow's Introduction

TimeOverflow

Build Status Maintainability Test Coverage

🏦 ⌛ Time Bank management system. Learn more about Time Banks.

TimeOverflow is a software developed in an altruistic way to offer a system that facilitates the interaction of the members and the management of the Time Banks. The model on which we work is guided by the needs of the Time Banks that make use of it and is prepared to be able to accommodate several Time Banks in a single installation, for this account with three levels of privileges: superadmin, admin (only manages a bank) and members of a bank.

Demo UI

TimeOverflow is divided into 2 large blocks:

  • Management system for administrators
  • Social network and online banking for users

NOTE A physical Time Bank can work only with the management block, it could happen, for example, that the vast majority of its members do not use the Internet and may want to operate only with listings, checks and a management office.

Management system

Physical Time Banks (mainly focused on TimeOverflow) often work without the Internet, perform lists of services and members and pay the hours with heels that are finally entered in the office, therefore the management system allows us to manage the members and their services, draw lists and keep accounting. It is important that Bank managers (admin) have useful information about the community so that they can act on it (for example, statistics on weak users, incident management, balance of accounts, etc.)

Social Network and Online Banking

The social network makes it easy for members to meet and meet outside the events scheduled by the Time Bank, as well as being able to post offers / demand ads explained in detail.

On the other hand the members can be paid the services of virtual way to save the passage through the office of the Bank of Time and also have the possibility to consult the extract of their account.

Docker deploying

This site is ready to be deployed in production with an optimized Docker image which uses two stages in order to minimize the final image size.

You can locally test the production deployment by the include docker-compose.yml file:

docker-compose up

The first time running it will build the image and setup the database along with some seeds in it (testing data). If the database already exists, it will run migrations (if needed) and just start the application.

Go to http://localhost:3000 to see the application running.

Note that the current docker-compose.yml is not suitable for a real production deployment, it's just for testing the production Dockerfile locally. For production deployment you should use a real database and a reverse proxy like Nginx or Apache (with SSL enabled). Refer to the next section in order to see the relevant ENV variables to configure the application.

ENV variables

In order to configure the application you can use the following ENV variables:

Make sure to configure at least the ones without a default value (empty).

ENV Description Default
ADMINS Space separated list of emails for the superadmins (ie: [email protected]
ALLOWED_HOSTS Put here the list of hosts allowed to access the application. Separate with spaces, for instance: www.timeoverflow.org timeoverflow.org localhost
RAILS_ENV Define the rails environment (not necessary to setup unless you have some special requirements) production
SECRET_KEY_BASE Secret key for the application, generate a new one with the command rails secret
DATABASE_URL Database URL, the format is postgresql://user:password@host:port/database
RAILS_SERVE_STATIC_FILES Tell the application to serve static files (you might want to turn this off if you are using an external web server to serve files from the public folder) true
RAILS_LOG_TO_STDOUT Tell the application to log to STDOUT (useful for Docker) true
RAILS_LOG_LEVEL Log level for the application (use debug for maximum information) info
RAILS_MAX_THREADS Maximum number of threads to use in the application (use 1 if multithreading is not desired) 5
RAILS_MIN_THREADS Minimum number of threads to use in the application RAILS_MAX_THREADS value
WEB_CONCURRENCY Number of web server processes to use 2
RUN_SIDEKIQ Run Sidekiq worker process in the docker instance (you might want to change this if want to run different docker instances for Sidekiq and Rails) true
RUN_RAILS Run Rails web server process in the docker instance true
SIDEKIQ_CONCURRENCY Number of threads to use in Sidekiq 5
STORAGE_PROVIDER Storage provider for the application (currently the application supports local and amazon) amazon
FORCE_SSL Force SSL connections false
MAIL_LINK_HOST Host to use in the links sent by email (use your domain without protocol mydomain.tld)
MAIL_LINK_PROTOCOL Protocol to use in the previous host defined for links sent by email https
SMTP_ADDRESS SMTP server address (ie: smtp.mailgun.org)
SMTP_PORT SMTP server port (ie: 587)
SMTP_DOMAIN SMTP domain (usually the application's domain)
SMTP_USER_NAME SMTP username
SMTP_PASSWORD SMTP password
SMTP_AUTHENTICATION SMTP authentication method plain
SMTP_ENABLE_STARTTLS_AUTO Enable STARTTLS true
SMTP_OPENSSL_VERIFY_MODE OpenSSL verify mode none
AWS_ACCESS_KEY_ID AWS access key ID (only if STORAGE_PROVIDER is amazon)
AWS_SECRET_ACCESS_KEY AWS secret access key (only if STORAGE_PROVIDER is amazon)
AWS_BUCKET AWS bucket name (only if STORAGE_PROVIDER is amazon)
AWS_REGION AWS region (only if STORAGE_PROVIDER is amazon)

Contributions

Any kind of feedback, bug report, idea or enhancement are really appreciated.

To contribute, just fork the repo, hack on it and send a pull request. Don't forget to add tests for behaviour changes and run the test suite:

bundle exec rspec

👉 Further information in our Wiki.

License

AGPL3

You can find the license file here.

timeoverflow's People

Contributors

alexlarra avatar amartincaro avatar andrewleontev avatar carlesjove avatar chipairon avatar d2bit avatar danielmacho72 avatar danypr92 avatar dependabot-support avatar dependabot[bot] avatar dormi avatar enricostano avatar franpb14 avatar hatsumora avatar javibertos avatar jgutzm avatar jordipujollarena avatar knoopx avatar markets avatar marsupio avatar matt-yorkley avatar mllocs avatar morantron avatar mperezv avatar nflorentin avatar patriror avatar rewritten avatar sauloperez avatar sseerrggii avatar viktorsmari 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

timeoverflow's Issues

Wireframes

Now that the main app skeleton is done, we need the wireframes for the app screens :)

Movimiento

Alta movimiento desde detalle usuario.

Campos necesarios:
cantidad (float)
fecha serv, (default hoy)
categoria (opcional)
usuario correspo.

Listado transacciones y total (pos - neg). Admin puede anular transaccion desde el listado.

Command pattern

We need a library or internal implementation for commands, that should be compatible with running them with ActiveJob. Maybe the same ActiveJob can do the task?

Suggestions are welcome.

Once defined, features should be moved into commands following a common namespacing etc. One first candidate is the weekly mailer.

cc: @markets @carlesjove

Note: ActiveJob does not support date and time arguments to jobs. And mixing in GlobalID::Identification into objects is spotty at the moment.

new organization como admin

Al entrar como Admin y darle a "new organization" no lleva a ningún lado pero peta con el siguiente mensaje:

"The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved."

Style guide

Get to an agreeent for remaining styles (mainly, line length and hash literla indentation), configure rubocop and make it work.

Remove Memcachier gem

It is only used in heroku, but cache should be an afterthought, not an internal part of the application, so heroku should be executed with a simpler (in-memory?) cache.

Mejoras listados

  • En usuarios ordenados por categoria, al hacer click sobre código de miembro ir a ver ficha del miembro
  • En usuarios ordenados por categoria, hacer el arbol con tabulaciones y los padres con títulos más grandes según jerarquía,
  • Que se pueda buscar en usuarios ordenados por categoria
  • En el listado de usuarios mostrar en una columna el campo "otro teléfono"
  • Hacer boton con un listado de emails de todos los miembros separados por comas (para luego poder mandar mails a todos los miembros, en la misma sección users)
  • Mejorar visionado de un usuario.

Mejora en la inserción de new user

Para facilitar el trabajo de inserción al crear "new user" el campo "Código de miembro" que por defecto sea el último código de miembro + 1 aunque se pueda cambiar si se necesita.

Insertar campo de sexo

Move remove_orphaned_users out of Member

Currently, the Member model handles this:

after_destroy :remove_orphaned_users

private
def remove_orphaned_users
  user.destroy if user && user.members.empty?
end

However, this:

  1. Should not be a Member reponsability
  2. Generates a lot of work overload to the database

Instead, it should be moved somewhere else. Maybe a method accessible via a DELETE request from the admin's panel?

Also, this method is really telling us that there is a bug in the app, since there shouldn't be an scenario with orphans users.

Baja usuario

Los usuarios han de poderse dar de baja, lo que significa que dejan de ser visibles en todos los ámbitos, excepto en las transacciones económicas que realizaron.

La baja viene a ser como marca el usuario como "invisible"

Upgrade to Rails 4.2

Upgrade to Rails 4.2 and review app skeleton files (rake rails:update with care ⚠️ ).

Implement 404 page

We need to customize the Rails' default 404 page. It's not very user friendly. Looks like the server is on 🔥 .

Our proposal is something functional as the following but we're open to suggestions:

photo5992211769084455444

Note that the broken left-alignment is not intended.

Next steps (by sseerrggii)

  • Al pagar horas como admin/superadmin necesitamos el campo fecha del pago y si es con cheque o no.
  • Para los admin, que al ver el perfil de un usuario puedan añadirle fácilmente ofertas existentes (por título).
  • Que el listado de movimientos de un usuario se pueda paginar, ademas los admin que tengan la opción de borrar un movimiento (con un aviso de ¿¿¿estás seguro???)
  • Que en una nueva oferta/demanda por defecto esté marcado joinable y permanent. (solved in ee8e366)
  • Sistema de tags con autocompletar.
  • Traducción de categorías
  • Listado de usuarios de baja, que un admin los pueda restablecer
  • Comprobar que N.Documento sea único en el Banco (además de obligatorio, por seguridad) (solved in 19f06ba)
  • En el form de usuario, la fecha de alta, por defecto hoy (solved in d6fc64c), lo mismo para fecha de inicio de oferta y demanda
  • El orden del listado de usuarios por código de usuario ascendente. (solved in 7de3751)
  • Estadísticas / listados de: usuarios más inactivos (que hace más tiempo que no hacen ningún intercambio), usuarios con el saldo más positivo, usuarios con el saldo más negativo), usuarios que cumplen años esta semana (-7 +7 dias de hoy)

Problema fecha

Problemas al introducir fechas mediante el calendario en el form de new user, es un problema que ocurre solo con el calendario que introduce chrome

Nombre de tu Banco

Cuando haces login como administrador o usuario de un Banco (no cuando eres super-administrador) que arriba a la izquierda en Lugar de TimeOverflow ponga el nombre de la organización. (en el pie se puede poner algo como Powered by TimeOverflow, con el link a github)

Y en la home, ponga

Nombre de la organización
Bienvenido al sistema de gestión del "organización"

Template engine: ERB vs Haml vs Slim?

Actualmente se utilizan los 3 (Haml más que el resto), en mi opinión creo que estaría bien unificar. Personalmente me quedo con ERB: más verbose, pero funciona out-of-the-box, no añades hard dependencies, más fácil para integrar themes (normalmente son HTML plano) y más cómodo para diseñadores que puedan trabajar sobre los templates. También es, en general, más rápido, aunque no estoy seguro que esto tenga un gran impacto en el tiempo de renderizado final de aplicaciones sencillas-medias.

cc @coopdevs/timeoverflow-contributors

Translate README to English

We need the README to also be translated to English so that non-spanish speakers (a considerable amount 🌏) can also contribute to the project.

Usabilidad categorías

El sistema de categorías es un árbol de 3 niveles. Para agregar una nueva categoría a un usuario, o ver/explorar el listado de las mismas, debe poder hacerse de una manera más usable.

Modificar campos de usuario

Modificar los Datos que se solicitan en el formulario de New People para que sean los habituales:

NºSocio
Nombre
Apellidos
Fecha de alta en el BdT
Fecha de nacimiento
DNI
Dirección (postal + ciudad + provincia)
Telefono 1
Telefono 2 (opcional)
E-mail

Implement pagination & search for users list

The users list (shown below) has two problems that we want to tackle: first, it does filtering on the client side, resulting in poor performance on mobile devices for large lists. Secondly, it is not consistent with the rest of the app, where the filtering happens on the backend.

users

Also, we would like to get rid of Angular to cut off some complexity that we think is not needed. It can greatly simplify the app and make it easier for others to contribute to the project.

Requirements

  • Paginate the response in the backend, so that not all records are returned in one go. This is already done in offers. See image below:

offers

  • Change the search field to query Elasticsearch, rather than filtering on the client side. Again this is already done in offers/dashboard.

  • Remove all the now unused Angular machinery. We might not be able to completely remove Angular as it might be used in some other corner of the app.

This clearly fits in two isolated PRs that would go together in the next release.

Edit user by admins

We want to disable the ability to edit users that already accepted the terms of service (those that did login already).

Editing users will only be possible for admins in case the user never accepted the ToS.

Categorias de ofertas demandas

Realizar un árbol base de categorias

Asignar de forma sencilla desde el panel de admin ofertas/demandas a un usuario

Por ejemplo un form

Usuario
Es Oferta o Demanda ?
Titulo oferta/demanda
Texto oferta/demanda
Categoria

Email notifications

Enviar mails semanales de las nuevas ofertas y demandas de cada banco del tiempo a todos los usuarios que hayan hecho login alguna vez en el sistema.

Elastic Search - Se muestran Ofertas/Demandas inactivas

En los resultados de la búsqueda se muestran ofertas/demandas borradas, ver http://community.coopdevs.org/t/timeoverflow-error-ofertas/254/2

El último cambio que hicimos en Elastic Search #253

$ bundle exec rake environment elasticsearch:import:model CLASS='Offer' FORCE=y
$ bundle exec rake environment elasticsearch:import:model CLASS='Inquiry' FORCE=y

Quizás hay que añadir algo como SCOPE='active' ???

Ver https://github.com/elastic/elasticsearch-rails/tree/master/elasticsearch-rails#features

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.