+
+
+
+
+
Donations
+
+
+
+
+ | Currency |
+ Amount |
+
+
+
+ {% for donation in donations %}
+
+ | {{donation[0]}} |
+ {{donation[1]}} |
+
+ {% endfor %}
+
+
-
-
- {% if user_reports %}
-
Downloadable Files:
-
-
-
- | Report Type |
- Number of Rows |
- Time Created |
- Range Start |
- Range End |
- Download |
- Delete |
-
-
-
-
-
- {% else %}
-
No reports available.
- {% endif %}
+
+
-
{% endblock %}
\ No newline at end of file
diff --git a/app/users/users_api/__init__.py b/app/users/users_api/__init__.py
new file mode 100644
index 0000000..220211f
--- /dev/null
+++ b/app/users/users_api/__init__.py
@@ -0,0 +1,9 @@
+from flask import Blueprint
+
+users_api = Blueprint('users_api',
+ __name__,
+ template_folder='templates',
+ static_folder='static',
+ url_prefix='/users_api')
+
+from app.users.users_api import routes
\ No newline at end of file
diff --git a/app/users/users_api/routes.py b/app/users/users_api/routes.py
new file mode 100644
index 0000000..3f4d1f4
--- /dev/null
+++ b/app/users/users_api/routes.py
@@ -0,0 +1,18 @@
+from app import db
+from flask import render_template
+from app.users.users_api import users_api
+from app.users.models import User
+from time import sleep
+
+
+
+@users_api.route('update_admin_status/
/', methods=['PUT'])
+def update_admin_status(id, status):
+ if status == 'true':
+ status = 'Admin'
+ else:
+ status = 'User'
+ User.query.filter_by(id=id).update({'user_type':status})
+ db.session.commit()
+ sleep(1)
+ return {'status':'success'}
diff --git a/python_files/db_population.py b/python_files/db_population.py
new file mode 100644
index 0000000..11cd533
--- /dev/null
+++ b/python_files/db_population.py
@@ -0,0 +1,151 @@
+from sqlalchemy import create_engine, MetaData, Table, select, insert, func, update, bindparam, delete
+import os
+import csv
+from datetime import datetime, timedelta
+from dateutil.parser import parse
+import time
+import json
+from werkzeug.security import generate_password_hash
+import random
+
+def engineer():
+ path1 = 'C:/Users/Lenovo/Desktop/Pilzno/instance/site.db'
+ path2 = '/home/yisroel2/Desktop/Pilzno/instance/site.db'
+ path3 = '/home/ubuntu/PilznoProject/PilznoProduction/instance/site.db'
+
+ for p in [path1, path2, path3]:
+ if os.path.exists(p):
+ path = p
+ break
+ engine = create_engine(f'sqlite:///{path}')
+ metadata_obj = MetaData()
+ metadata_obj.reflect(bind=engine)
+ return engine, metadata_obj
+
+def check_db():
+ engine, metadata_obj = engineer()
+ user_table = Table("user", metadata_obj, autoload_with=engine)
+ donation_table = Table("donation", metadata_obj, autoload_with=engine)
+ campaign_table = Table("campaign", metadata_obj, autoload_with=engine)
+ with engine.connect() as conn:
+ print('USERS')
+ users = conn.execute(select(user_table)).all()
+ if users:
+ for user in users:
+ print(user.first_name)
+ else:
+ print('no users')
+ print("DONATIONS")
+ donations = conn.execute(select(donation_table)).all()
+ if donations:
+ for donation in donations:
+ print(donation.id)
+ else:
+ print('no donations')
+ campaigns = conn.execute(select(campaign_table)).all()
+ print('CAMPAIGNS')
+ if campaigns:
+ for campaign in campaigns:
+ print(campaign.title)
+ else:
+ print('no campaigns')
+
+def insert_users():
+ users = [
+ ['Yisroel', 'Baum', 'yisroel.d.baum@gmail.com', generate_password_hash('12'), 'Admin'],
+ ['Yoni', 'Gerzi', 'yoni@gerzi.com', generate_password_hash('12'), 'User'],
+ ['Shmuli', 'Modes', 'shmuli@modes.com', generate_password_hash('12'), 'User'],
+ ['Emma', 'Baum', 'emma@baum.com', generate_password_hash('12'), 'User'],
+ ['Yisroel', 'Factor', 'yisroel@factor.com', generate_password_hash('12'), 'User'],
+ ['Yaakov', 'Frager', 'yaakov@frager.com', generate_password_hash('12'), 'User'],
+ ['Michael', 'Oshman', 'michael@oshman.com', generate_password_hash('12'), 'User'],
+ ['Shalom', 'Goldberg', 'shalom@goldberg.com', generate_password_hash('12'), 'User'],
+ ['Daniel', 'Caller', 'daniel@caller.com', generate_password_hash('12'), 'User'],
+
+ ]
+ engine, metadata_obj = engineer()
+ user_table = Table("user", metadata_obj, autoload_with=engine)
+
+ with engine.connect() as conn:
+ for user in users:
+ conn.execute(user_table.insert().values(
+ first_name = user[0],
+ last_name = user[1],
+ email = user[2],
+ password = user[3],
+ user_type = user[4]
+ ))
+ conn.commit()
+
+def insert_donations():
+ engine, metadata_obj = engineer()
+ donation_table = Table("donation", metadata_obj, autoload_with=engine)
+
+ currency_types = ['shekel', 'dollar']
+ boolean_choice = [True, False]
+
+ with engine.connect() as conn:
+ for _ in range(100):
+ conn.execute(donation_table.insert().values(
+ currency_type = currency_types[random.randint(0,1)],
+ amount = random.randint(1,200),
+ anonymous = boolean_choice[random.randint(0,1)],
+ campaign_id=random.randint(1,4),
+ user_id=random.randint(1,9)
+ ))
+ conn.commit()
+
+def insert_campaigns():
+ engine, metadata_obj = engineer()
+ campaign_table = Table("campaign", metadata_obj, autoload_with=engine)
+
+ campaign_titles = ['general campaign', 'yomim noraim 2024', 'pesach kibbudim 2024', 'RH kibbudim 2024']
+ is_active = [True, False]
+ with engine.connect() as conn:
+ for title in campaign_titles:
+ conn.execute(campaign_table.insert().values(
+ title=title,
+ active=is_active[random.randint(0,1)],
+ goal=5000,
+ archived=False
+ ))
+ conn.commit()
+
+def insert_ambassador_relationships():
+ engine, metadata_obj = engineer()
+ user_table = Table("user", metadata_obj, autoload_with=engine)
+ donation_table = Table("donation", metadata_obj, autoload_with=engine)
+ campaign_table = Table("campaign", metadata_obj, autoload_with=engine)
+
+ with engine.connect() as conn:
+ campaign_ids = conn.execute(select(campaign_table.c.id)).all()
+ user_ids = conn.execute(select(user_table.c.id)).all()
+
+
+def test_selections():
+ engine, metadata_obj = engineer()
+ user_table = Table("user", metadata_obj, autoload_with=engine)
+ donation_table = Table("donation", metadata_obj, autoload_with=engine)
+ campaign_table = Table("campaign", metadata_obj, autoload_with=engine)
+
+
+def delete_all():
+ engine, metadata_obj = engineer()
+ user_table = Table("user", metadata_obj, autoload_with=engine)
+ donation_table = Table("donation", metadata_obj, autoload_with=engine)
+ campaign_table = Table("campaign", metadata_obj, autoload_with=engine)
+
+ with engine.connect() as conn:
+ conn.execute(delete(user_table))
+ conn.execute(delete(campaign_table))
+ conn.execute(delete(donation_table))
+ conn.commit()
+
+def insert_all():
+ insert_users()
+ insert_campaigns()
+ insert_donations()
+
+if __name__ == '__main__':
+ delete_all()
+ insert_all()
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..8fe6503
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,39 @@
+alembic==1.13.2
+amqp==5.2.0
+billiard==4.2.0
+blinker==1.8.2
+celery==5.4.0
+cffi==1.17.0
+click==8.1.7
+click-didyoumean==0.3.1
+click-plugins==1.1.1
+click-repl==0.3.0
+colorama==0.4.6
+cryptography==43.0.1
+dnspython==2.6.1
+email_validator==2.2.0
+Flask==3.0.3
+Flask-Login==0.6.3
+Flask-Mail==0.10.0
+Flask-Migrate==4.0.7
+Flask-SQLAlchemy==3.1.1
+Flask-WTF==1.2.1
+greenlet==3.0.3
+idna==3.8
+itsdangerous==2.2.0
+Jinja2==3.1.4
+jwt==1.3.1
+kombu==5.4.0
+Mako==1.3.5
+MarkupSafe==2.1.5
+prompt_toolkit==3.0.47
+pycparser==2.22
+python-dateutil==2.9.0.post0
+six==1.16.0
+SQLAlchemy==2.0.33
+typing_extensions==4.12.2
+tzdata==2024.1
+vine==5.1.0
+wcwidth==0.2.13
+Werkzeug==3.0.4
+WTForms==3.1.2