Skip to content
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
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
django
django==1.11
mysql-python
gunicorn
dj_static
26 changes: 24 additions & 2 deletions src/chit_main_app/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.13 on 2018-05-20 04:04
# Generated by Django 1.11 on 2018-06-14 09:46
from __future__ import unicode_literals

from django.conf import settings
Expand Down Expand Up @@ -44,7 +44,7 @@ class Migration(migrations.Migration):
('amount', models.IntegerField(null=True)),
('entry_date', models.DateField()),
('comment', models.CharField(max_length=1000)),
('entry_type', models.CharField(choices=[(b'A', b'Auction'), (b'P', b'Payment'), (b'D', b'Disbursement')], max_length=10)),
('entry_type', models.CharField(choices=[('A', 'Auction'), ('P', 'Payment'), ('D', 'Disbursement')], max_length=10)),
('member', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='chit_main_app.Customer')),
],
),
Expand All @@ -56,6 +56,28 @@ class Migration(migrations.Migration):
('credit', models.IntegerField()),
],
),
migrations.CreateModel(
name='Loan',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('loan_amount', models.IntegerField()),
('interest', models.IntegerField()),
('approved_date', models.DateField()),
('loan_lastpayment_date', models.DateField()),
('loan_name', models.CharField(max_length=30, null=True)),
('accumulated_interest', models.IntegerField(default=0)),
('identity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='chit_main_app.Customer')),
],
),
migrations.CreateModel(
name='LoanHistory',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('last_payment_date', models.DateField()),
('payment_amount', models.IntegerField(default=0)),
('key', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='chit_main_app.Loan')),
],
),
migrations.CreateModel(
name='Subscriptions',
fields=[
Expand Down
18 changes: 17 additions & 1 deletion src/chit_main_app/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django.db import models
from django.contrib.auth.models import User
from datetime import date, datetime

# Create your models here .
class Group(models.Model):
Expand All @@ -22,7 +23,7 @@ class Subscriptions(models.Model):
auction_amount = models.IntegerField(null=True)
auction_date = models.DateField(null=True)
auction_number = models.IntegerField(null=True)

class Journal(models.Model):
member = models.ForeignKey(Customer, null=True)
amount = models.IntegerField(null=True)
Expand All @@ -43,3 +44,18 @@ class JournalItem(models.Model):
subscription = models.ForeignKey(Subscriptions)
debit = models.IntegerField()
credit = models.IntegerField()

class Loan(models.Model):
identity = models.ForeignKey(Customer)
loan_amount = models.IntegerField()
interest = models.IntegerField()
approved_date = models.DateField()
loan_lastpayment_date = models.DateField()
loan_name = models.CharField(max_length=30,null=True)
accumulated_interest = models.IntegerField(default=0)

class LoanHistory(models.Model):
key = models.ForeignKey(Loan, null = True,on_delete = models.CASCADE)
last_payment_date = models.DateField()
payment_amount = models.IntegerField(default=0)

22 changes: 18 additions & 4 deletions src/chit_main_app/static/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,21 @@
width: 100%
}
.menu {
border: 1px lightblue solid;
border: 1px lightblue solid;
padding-top: 1pt;
padding-bottom: 1pt;
padding-left: 10pt;
padding-right: 10pt;
background: lightgray;
text-decoration: none;
text-decoration: none;
}
.action_icon {
width: 12pt;
height: 12pt;
}
.label {
color: gray;
text-align: right;
text-align: right;
}
button, submit {
font-size: 12pt;
Expand All @@ -61,7 +61,7 @@ span.warning {
}

.payment-amount {
font-size: 12pt;
font-size: 12pt;
}

.total-amount, .extraCredits {
Expand Down Expand Up @@ -94,3 +94,17 @@ tr:nth-child(even) {
tr:nth-child(odd) {
background-color: #ffffff;
}


.form-container {
width: 100%;
margin: auto;
}
.groups-form {
width: 48%;
float: left;
}
.loans-form {
width: 48%;
float: right;
}
197 changes: 127 additions & 70 deletions src/chit_main_app/templates/customers/grouplist.html
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
{% extends "site_layout.html" %}
{% load myfilter %}
{% block title %}{{customer_details.name}} details{% endblock %}
{% block title %}{{customer_details.name}} details{% endblock %}
{% block page_heading %} Details of {{customer_details.name}} {% endblock %}
{% block content %}

<button onclick="window.location='/customers/subscription?cid={{customer_details.id}}'">Add To Group</button>
<button onclick="window.location='/customers/loan_registration?cid={{customer_details.id}}'">New Loan</button>
<button onclick="window.location='/customers/history?id={{customer_details.id}}'">Transaction History</button>

<p/>
<script>
$(function() {
Expand All @@ -18,31 +20,30 @@
var txtDueAmounts = $('.payment-amount');
var sum = 0;
$.each(arr,function(){sum+= parseFloat($(this).text()) || 0;});
var in_progress = 0

var in_progress = 0;

function line_item_change(){
if (in_progress) { return }
in_progress = 1
var sumOfTxtDueAmounts = 0;
$.each(txtDueAmounts ,function(){sumOfTxtDueAmounts+= parseFloat($(this).val()) || 0;});
sumOfTxtDueAmounts+= parseFloat($(".extraCredits").val()) || 0;
$("#total_payment").val(sumOfTxtDueAmounts);
in_progress = 0
}

$(".payment-amount").change(line_item_change);
$(".payment-amount").keyup(line_item_change);
$(".extraCredits").keyup(line_item_change);

function amount_changed() {
if (in_progress) { return }
in_progress = 1
var remaing_amount = parseInt($("#total_payment").val());

console.log(typeof(txtDueAmounts));
console.log(txtDueAmounts);

for(var i=0; i<arr.length; i++) {
var this_due = parseInt($(arr[i]).text())
if (remaing_amount > 0) {
Expand All @@ -61,10 +62,8 @@
in_progress = 0
}
$("#total_payment").change(amount_changed);

});


});
function remove_subscription(id) {
x = confirm('Are you sure you want to remove the subscription?')
if (x) {
Expand All @@ -74,67 +73,125 @@
return false;
}
}

function remove_loan(id) {
x = confirm('Are you sure you want to remove the loan?')
if (x) {
window.location = '/customers/remove_loan?return_to=loan&id='+id
}
else {
return false;
}
}
</script>
{% if group_list %}
<form action='/customers/record_payment' method="post">
{% csrf_token %}
<input type='hidden' name='customer_id' value='{{ customer_details.id }}'/>
<table border="0">
<tr align='right'>
<td> Payment Date: <input id='datepicker' name='payment_date' type='text'/>
</tr>
<tr><td>
<table border="1" bordercolor=lightgray cellspacing=0 cellpadding=5>
<tr>
<th>&nbsp;</th>
<th>Group Names</th>
<th>Subscription</th>
<th>Auction Amount</th>
<th>Due</th>
<th>Payment</th>
</tr>
{% for subscription in group_list %}
<tr>
<td>
{% if subscription.group.started %}
&nbsp;
{% else %}
<a href='#' onclick="remove_subscription({{subscription.id}})">
<img src='/static/remove.png' class='action_icon' tooltip='Delete Subscription'/>
</a>
{% endif %}
</td>
<td>{{subscription.group.name}}</td>
<td><a href="/customers/group_activity?subscription_id={{ subscription.id }}&return_to=customer">{{subscription.id}}</a></td>
<td>{{subscription.auction_amount|default:"-"}}</td>
<td><span
{% if not subscription.group_id == 1 %}
class='dueAmount'
{% endif %}
>{{due_amounts|get_item:subscription.id}}</span></td>
<td><input dir="rtl" size=10 pattern="\d*"
{% if subscription.group_id == 1 %}
class='extraCredits'
{% else %}
class='payment-amount'
{% endif %}
name="payment_for_{{ subscription.id }}"/>
</td>
</tr>
{% endfor %}
<tr>
<td align='right' colspan='4'> <b>Total:</b> </td>
<td> <b>{{total_due}}</b> </td>
<td align='right' colspan='4'> <input id='total_payment' class='total-amount' autocomplete="off" name='payment_amount' size=10 dir="rtl"/> </td>
<tr>
</table>
<tr align='right'>
<td><button onclick="window.location='#">Record Payment</button> </td>
<tr>

</table>
</form>
<div class="form-container">
{% if group_list %}
<div class="groups-form">
<form action='/customers/record_payment' method="post">
{% csrf_token %}
<input type='hidden' name='customer_id' value='{{ customer_details.id }}'/>
<table border="0">
<tr>
<td>
<table border="1" bordercolor=lightgray cellspacing=0 cellpadding=5>
<tr>
<th>&nbsp;</th>
<th>Group Names</th>
<th>Subscription</th>
<th>Auction Amount</th>
<th>Due</th>
<th>Payment</th>
</tr>
{% for subscription in group_list %}
<tr>
<td>
{% if subscription.group.started %}
&nbsp;
{% else %}
<a href='#' onclick="remove_subscription({{subscription.id}})">
<img src='/static/remove.png' class='action_icon' tooltip='Delete Subscription'/>
</a>
{% endif %}
</td>
<td>{{subscription.group.name}}</td>
<td><a href="/customers/group_activity?subscription_id={{ subscription.id }}&return_to=customer">{{subscription.id}}</a></td>
<td>{{subscription.auction_amount|default:"-"}}</td>
<td><span
{% if not subscription.group_id == 1 %}
class='dueAmount'
{% endif %}
>{{due_amounts|get_item:subscription.id}}</span></td>
<td><input dir="rtl" size=10 pattern="\d*"
{% if subscription.group_id == 1 %}
class='extraCredits'
{% else %}
class='payment-amount'
{% endif %}
name="payment_for_{{ subscription.id }}"/>
</td>
</tr>
{% endfor %}
<tr>
<td align='right' colspan='4'> <b>Total:</b> </td>
<td> <b>{{total_due}}</b> </td>
<td align='right' colspan='4'> <input id='total_payment' class='total-amount' autocomplete="off" name='payment_amount' size=10 dir="rtl"/> </td>
<tr>
</table>
</td>
</tr>
</table>
<br>
<p>payment date: <input name='payment_date' type='date'/></p>
<br>
<center><button align="center " onclick="window.location-'#'">Record Payment</button></center>
</form>
{% else %}
Not in any groups yet
{% endif %}
</div>
<div class="loans-form">
{% if customer_loan %}
<form action='/customers/record_loan_payment' method="post">
{% csrf_token %}
<input type='hidden' name='customer_id' value='{{ customer_details.id }}'/>
<table border="1" bordercolor=lightgray cellspacing=0 cellpadding=5>
<tr>
<th>&nbsp;</th>
<th>Loan Name</th>
<th>Principal Amount</th>
<th>Rate of <br>Interest
</th>
<th>Accumulated <br> Interest</th>
<th>Due</th>
<th>Payment</th>
</tr>
{% for loan in customer_loan %}
<tr>
<td>
<a href='#' onclick="remove_loan({{loan.id}})">
<img src='/static/remove.png' height='16px' width='16px'>
</a>
</td>
<td>{{loan.loan_name}}</td>
<td>{{loan.loan_amount}}</td>
<td>{{loan.interest}}</td>
<td>{{loan.accumulated_interest}}</td>
<td>{{loan.accumulated_interest|add_loan:loan.loan_amount }}</td>
<td><input dir="rtl" size=10 pattern="\d*" name="payment_for_{{loan.id}}"/>
</td>
</tr>
{% endfor %}
</table>
<br>
<br>
<p>payment date: <input name='loan_payment_date' type='date'/></p>
<br>
<br>
<center><button align="center " onclick=""="window.location-'#'">Record Payment</button></center>
</form>
{% else %}
Not in any loans yet
{% endif %}
</div>
</div>
{% endblock %}
Loading