Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixing broken templates #82

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
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
8 changes: 6 additions & 2 deletions Loans/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,13 @@ class CreateLoanForm(ModelForm):

class Meta:
model = Loan
fields = ["program_title", "size", "sectors", "amount", "amount",
fields = ["program_title", "size", "sectors", "amount",
"paying_days", "grace_period",
"collateral", "requirements"]
"collateral", "requirements", "intrest"]

def __init__(self, *args, **kwargs):
super(CreateLoanForm, self).__init__(*args, **kwargs)
self.fields["intrest"].widget.attrs['class'] = 'form-input'


class AddRecordForm(ModelForm):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.0.6 on 2022-08-29 17:34

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('Loans', '0001_initial'),
]

operations = [
migrations.RenameField(
model_name='requirement',
old_name='requiremenent',
new_name='requirement',
),
]
25 changes: 13 additions & 12 deletions Loans/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,17 +107,18 @@ def number_of_approved(self):
return count

def get_sector_data(self):
beneficiaries = self.beneficiaries.all()
data = {}
for beneficiary in beneficiaries:
sector = beneficiary.user.sector
print("sectors", sector)
it_exist = data.get(sector.name, 0)
if it_exist == 0:
data[sector.name] = 1
else:
data[sector.name] += 1
return data
pass
# beneficiaries = self.beneficiaries.all()
# data = {}
# for beneficiary in beneficiaries:
# sector = beneficiary.user.sector.all()
# print("sectors", sector)
# it_exist = data.get(sector.name, 0)
# if it_exist == 0:
# data[sector.name] = 1
# else:
# data[sector.name] += 1
# return data

# number_of_approved = loan.beneficiaries.filter(is_given=True).count()

Expand Down Expand Up @@ -146,7 +147,7 @@ def grant_loan(self, user):
application = get_object_or_404(Beneficiaries, id=the_id)
application.is_given = True
application.is_denied = False
application.time_to_pay = timezone.localtime() + timedelta(days=self.paying_days)
application.time_to_pay = datetime.today() + timedelta(days=self.paying_days)
application.save()
return True
return False
Expand Down
5 changes: 3 additions & 2 deletions Loans/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from .views import create_loan, loan_details, dashboard, loans_list, fsp_profile, \
loan_beneficiaries, add_record, add_sales_record, fs, fr, user_loan_details, \
list_loans, apply_loan, users_credentials, grant_loan, deny_loan, generate_income_statement, \
request_financial_statements, verify_transfer
request_financial_statements, verify_transfer, beneficiary_data

app_name = 'loans'

Expand All @@ -20,12 +20,13 @@
path('loans/', loans_list, name='loans_list'),
path('fsp/profile/', fsp_profile, name='profile'),
path('loans/<int:pk>/beneficiaries/', loan_beneficiaries, name='beneficiaries'),
path('loans/<int:loan_pk>/beneficiaries/<int:beneficiary_pk>', beneficiary_data, name='beneficiary_data'),
path('list-loans', list_loans, name="list_loans"),
path('apply-loan/<int:id>/', apply_loan, name="apply_loan"),
path('users-credential/<int:loan_id>/<slug:username>/', users_credentials, name="users_loan_requirements"),
path('grant-loan/<int:loan_id>/<slug:username>/', grant_loan, name="approve_loan"),
path('deny-loan/<int:loan_id>/<slug:username>/', deny_loan, name="deny_loan"),
path('request-financial-statement/', request_financial_statements, name="request-statement"),
path('transfer/verify', verify_transfer, name="verify_transfer"),
path("recommended-loans/", recommended_loans, name="recommended_loans")
# path("recommended-loans/", recommended_loans, name="recommended_loans")
]
191 changes: 103 additions & 88 deletions Loans/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
from django.conf import settings



# Create your views here.

def create_loan(request):
Expand Down Expand Up @@ -63,6 +62,7 @@ def get_stats_all(loans):
}
return data


def loan_details(request, pk):
loan = get_object_or_404(Loan, id=pk)
data = get_stats(loan)
Expand All @@ -82,8 +82,11 @@ def dashboard(request):
loans = Loan.objects.filter(fsp=user)
return render(request, 'fsp/fsp-home.html', {"loans": loans})
else:

# recommended = Loan.objects.filter(Q(sector=user.sectors, size=user.size) |
# Q(size=user.size) | Q(sector=user.sectorsx))
loans = Loan.objects.all()
return render(request, 'user/user_loan.html', {"loans": loans})
return render(request, 'user/user_loan.html', {"user": user, "loans": loans})


@login_required
Expand All @@ -98,7 +101,7 @@ def list_loans(request):
"""All the list of loans from all financial service providers"""
loans = Loan.objects.all()
print(loans)
return render(request, "list_of_loans.html", {"loans": loans})
return render(request, "loans/list_of_loans.html", {"loans": loans})


def fsp_profile(request):
Expand All @@ -111,9 +114,23 @@ def loan_beneficiaries(request, pk):
user = request.user
loan = get_object_or_404(Loan, id=pk)
beneficiaries = loan.beneficiaries.all()
recommended = True
# if beneficiaries:
# for beneficiary in beneficiaries:
# if beneficiary.is_recommended(pk):
# recommended = True

print(beneficiaries)
return render(request, 'fsp/loan_beneficiaries.html', {"user": user, "beneficiaries": beneficiaries, "loans": loan})
return render(request, 'fsp/loan_beneficiaries.html', {"user": user, "beneficiaries": beneficiaries, "loan": loan, \
"recommended": recommended})


def beneficiary_data(request, loan_pk, beneficiary_pk):
loan = get_object_or_404(Loan, id=loan_pk)
beneficiaries = loan.beneficiaries.all()
beneficiary = beneficiaries.get(user=beneficiary_pk)
return render(request, 'fsp/beneficiary_data.html', {"loan": loan, "beneficiaries": beneficiaries, \
"beneficiary": beneficiary})


def grant_loan(request, loan_id, username):
Expand All @@ -129,7 +146,6 @@ def grant_loan(request, loan_id, username):
# and will never apply to this specific loan program again



def deny_loan(request, loan_id, username):
# TODO: deny loan tomorow test
user = get_object_or_404(User, username=username)
Expand Down Expand Up @@ -160,22 +176,23 @@ def apply_loan(request, id):
form.cleaned_data["number_of_employee"]) if not \
(user.number_of_employee) else user.number_of_employee)
loan.beneficiaries.add(beneficiary)
generate_balance_sheet(request.user, True)
generate_income_statement(request,user, True)
return render(request, "apply_message.html", {"message": \
generate_balance_sheet(user, True)
generate_income_statement(user, True)
return render(request, "loans/apply_message.html", {"message": \
"successfully applied!, you'll hear from us sonn"})
return render(request, "apply_message.html", {"user": user, "message": \
return render(request, "loans/apply_message.html", {"user": user, "message": \
"Sorry we cannot offer you Credit!, Try Again"})
return render(request, "apply_message.html", {"message": "You Have Already Applied to this program!"})
return render(request, "loans/apply_message.html", {"message": "You Have Already Applied to this program!"})
else:
print(form.as_p())
return render(request, "apply_for_loan.html", {"form": form})
return render(request, "loans/apply_for_loan.html", {"form": form})

# if the user credit score is below 50% dont give him
# if the user has no problem
# add him to the beneficiaries list
# with all his documents and things


def users_credentials(request, loan_id, username):
"""This will query all the requirements of a user of the particular loan"""
user = get_object_or_404(User, username=username)
Expand All @@ -187,18 +204,17 @@ def users_credentials(request, loan_id, username):
print(output)
return render(request, "user/users_credentials.html", {"credentials": output})


def recommended_loans(request):
# TODO: recommend loan
# check the loans that target the bussiness size and sector to be top
user = request.user
recommended = Loan.objects.filter(Q(sector=user.sector, size=user.size) |
Q(size=user.size) | Q(sector=user.sector))
return render(request, "recommended_loans.html", {"loans": recommended})

return render(request, "loans/list_of_loans.html")


def search(request):
recommended = Loan.objects.filter(Q(sector=user.sector, size=user.size) |
Q(size=user.size) | Q(sector=user.sector))
recommended = Loan.objects.filter(Q(sector=user.sector, size=user.size) |
Q(size=user.size) | Q(sector=user.sector))
return render(request, "recommended_loans.html", {"loans": recommended})

# call a fake machine learning recomendation algorithm
Expand Down Expand Up @@ -379,7 +395,7 @@ def generate_balance_sheet(user, is_apply_loan):
stock_dividend = b_sheet.stock_dividend
liabilities = b_sheet.liabilities
assets = b_sheet.assets

# b_sheet.save()

name = user.username + " " + " Company"
Expand Down Expand Up @@ -479,7 +495,6 @@ def request_financial_statements(request):


def verify_transfer(request):

"""Webhook to verify any transfer made to Flutterwave and send the two pdf files to the user. This is an
automatic process"""

Expand Down Expand Up @@ -511,75 +526,75 @@ def verify_transfer(request):
email_2.send(fail_silently=True)

return HttpResponse(status=200)
=======
f_record = get_object_or_404(FinancialRecord, user=user)
records = f_record.records
other_income = f_record.get_other_incomes
total_sales = f_record.total_sales
total_income = f_record.get_total_incomes
expenses = f_record.get_expenses
total_expenses = f_record.get_total_expenses

start_date = datetime.today()
end_date = start_date - timedelta(days=30)
revenues = f_record.total_sales
prev_revenues = f_record.total_prev_sales
net_profit = f_record.get_net_profit
prev_net_profit = f_record.get_prev_net_profit
ideal_profit = f_record.get_ideal_profit()
print(str(ideal_profit))

gross_profit = f_record.get_gross_profit
prev_gross_profit = f_record.get_prev_gross_profit

depreciation = f_record.get_appreciation

f_record.revenue = revenues
f_record.net_profit = net_profit
f_record.profit = gross_profit
f_record.save()

try:
depreciation_percent = (net_profit / prev_net_profit) * 100

except ZeroDivisionError:

depreciation_percent = 0

name = user.username + " " + " Company"

open('templates/temp.html', "w").write(render_to_string('income-statement.html',
{'f_record': f_record,
'records': records,
'name': name,
'from_date': end_date,
'to_date': start_date,
'revenues': revenues,
'net_profit': net_profit,
'gross_profit': gross_profit,
'depreciation': depreciation,
'prev_revenues': prev_revenues,
'prev_net_profit': prev_net_profit,
'prev_gross_profit': prev_gross_profit,
'depreciation_percent': depreciation_percent,
'other_incomes': other_income,
'total_sales': total_sales,
'total_income': total_income,
'expenses': expenses,
'total_expenses': total_expenses, }))

# getting the template
pdf = html_to_pdf('temp.html')

# file_name = user.first_name + " income statement " + month + " " + year + ".pdf"
file_name = user.username + " income statement" + ".pdf"

receipt_file = BytesIO(pdf.content)

user.financial_record = File(receipt_file, file_name)
user.save()
# rendering the template
return HttpResponse(pdf, content_type='application/pdf')
#
# f_record = get_object_or_404(FinancialRecord, user=user)
# records = f_record.records
# other_income = f_record.get_other_incomes
# total_sales = f_record.total_sales
# total_income = f_record.get_total_incomes
# expenses = f_record.get_expenses
# total_expenses = f_record.get_total_expenses
#
# start_date = datetime.today()
# end_date = start_date - timedelta(days=30)
# revenues = f_record.total_sales
# prev_revenues = f_record.total_prev_sales
# net_profit = f_record.get_net_profit
# prev_net_profit = f_record.get_prev_net_profit
# ideal_profit = f_record.get_ideal_profit()
# print(str(ideal_profit))
#
# gross_profit = f_record.get_gross_profit
# prev_gross_profit = f_record.get_prev_gross_profit
#
# depreciation = f_record.get_appreciation
#
# f_record.revenue = revenues
# f_record.net_profit = net_profit
# f_record.profit = gross_profit
# f_record.save()
#
# try:
# depreciation_percent = (net_profit / prev_net_profit) * 100
#
# except ZeroDivisionError:
#
# depreciation_percent = 0
#
# name = user.username + " " + " Company"
#
# open('templates/temp.html', "w").write(render_to_string('income-statement.html',
# {'f_record': f_record,
# 'records': records,
# 'name': name,
# 'from_date': end_date,
# 'to_date': start_date,
# 'revenues': revenues,
# 'net_profit': net_profit,
# 'gross_profit': gross_profit,
# 'depreciation': depreciation,
# 'prev_revenues': prev_revenues,
# 'prev_net_profit': prev_net_profit,
# 'prev_gross_profit': prev_gross_profit,
# 'depreciation_percent': depreciation_percent,
# 'other_incomes': other_income,
# 'total_sales': total_sales,
# 'total_income': total_income,
# 'expenses': expenses,
# 'total_expenses': total_expenses, }))
#
# # getting the template
# pdf = html_to_pdf('temp.html')
#
# # file_name = user.first_name + " income statement " + month + " " + year + ".pdf"
# file_name = user.username + " income statement" + ".pdf"
#
# receipt_file = BytesIO(pdf.content)
#
# user.financial_record = File(receipt_file, file_name)
# user.save()
# # rendering the template
# return HttpResponse(pdf, content_type='application/pdf')


@method_decorator(login_required, name='dispatch')
Expand Down
Loading