- 12
- 3 257
Python Django Web Application
เข้าร่วมเมื่อ 5 ก.ค. 2021
Step by step create Web Application using Python and Django connected to Oracle Database 12C
Very Simple CRUD Chart Of Account using Datatables
CRUD sederhana Chart Of Account table menggunakan Datatables untuk tampilan tabular Mode Add, Edit dan Delete
Simple CRUD Chart Of Account table using Datatables for Add, Edit and Delete tabular views
Simple CRUD Chart Of Account table using Datatables for Add, Edit and Delete tabular views
มุมมอง: 27
วีดีโอ
Step by Step How To Develop Financial Application
มุมมอง 25หลายเดือนก่อน
Tahapan membuat Aplikasi Keuangan, dimulai dari Process Modeller, Data Flow Diagram, Entity Relationship Diagram sampai develop menggunakan Python Django yang terkoneksi ke Oracle Database. Stages of creating a Financial Application, starting from Process Modeller, Data Flow Diagram, Entity Relationship Diagram to development using Python Django connected to Oracle
Scripting Code 1 Table Only Oracle Database, Pythn, Django
มุมมอง 14หลายเดือนก่อน
Scripting only 1 Table to Oracle Database using Python, Django Models m_valuta.py from django.db import models class Valuta(models.Model): kode_valuta = models.CharField(primary_key=True, max_length=10) label_valuta = models.CharField(max_length=10) nama_valuta = models.CharField(max_length=50) rec_stat = models.CharField(max_length=1, blank=True, null=True) created_date = models.DateField(blan...
Sign Up Activate Login Logut Scripts
มุมมอง 31หลายเดือนก่อน
Models user.py from django.db import models class User(models.Model): password = models.CharField(max_length=128, blank=True, null=True) last_login = models.DateTimeField(blank=True, null=True) is_superuser = models.BooleanField() username = models.CharField(unique=True, max_length=150, blank=True, null=True) first_name = models.CharField(max_length=150, blank=True, null=True) last_name = model...
Sign Up, Activate, Login, Logout
มุมมอง 16หลายเดือนก่อน
Simple How to sign up, activate, login and logout
Financial Business Process Modeller
มุมมอง 20หลายเดือนก่อน
In Business, all data flow to the Finance. It is necessary to design Financial Module that record all data that represent to all Structural Unit in Company and produce Daily, Monthly, Quaterly and Yearly report to the Board Of Director.
Sales Invoice Print to PDF directly to Printer
มุมมอง 22หลายเดือนก่อน
Sales invoice, Edit, Re Process Journal, Check to Table Oracle until Print to PDF/Printer Table : tbl_Invoice_Master tbl_Invoice_Detail tbl_Transaction_Master tbl_Transaction_Detail tbl_Journal_Master tbl_Journal_Detail Additional_Table tbl_System_Paramater tbl_Refer_Detail tbl_Numbering tbl_Auto_Journal tbl_Sales_Order_Detail Procedure/Function func_numbering func_tax_numbering func_dec_roman_...
December 19, 2024
มุมมอง 11หลายเดือนก่อน
Sales Invoice integrated to Finance Transaction and Journal, auto journal processing, developed by Python Django- Oracle Database
December 19, 2024
มุมมอง 7หลายเดือนก่อน
Previous Sales Invoice using Oracle Form only can be accessed using Mozilla Firefox old version, not by Modern Browser like Edge, Google Chrome or later version of Mozilla Firefox
Dashboard Financial Application int the future
มุมมอง 7หลายเดือนก่อน
This the next version of our ERP Application developed by Python Django connected to Oracle Database
CRUD (Create Read Update Delete) Python Django Oracle Database12C, dependency dropdown list
มุมมอง 3252 ปีที่แล้ว
This part show how to develop simple CRUD 1 table using Python Django connected to Oracle Database 12 C, dependency dropdown list, choice
Python Django connect to Oracle 12c Database Episode 1
มุมมอง 2.8K2 ปีที่แล้ว
This Episode 1 is the first tutorial how to connect Python Django to Oracle 12C Database. You can follow step by step, if any inquiries you can chat in comment below. Dowload python software here : www.python.org/ftp/python/3.10.4/python-3.10.4-amd64.exe Step by step : 1. create directory you want to save project, eg. g:\python-django-erp 2. go to directrory, then create virtual environment by ...
If you need full script, please leave your message here, and your email. Then I will send you all script.
coa_edit.html part 2 <div class="row mb-3"> <!-- Account Trans Code --> <div class="col-md-4"> <label for="id_nr" class="form-label">Balance Sheet</label> <input type="text" class="form-control" id="{{ form.nr.id_for_label }}" name="{{ form.nr.html_name }}" value="{{ form.nr.value }}" placeholder="Enter Balance Sheet" required > </div> <!-- Account Code. --> <div class="col-md-4"> <label for="id_rl" class="form-label">Profit/Loss</label> <input type="text" class="form-control" id="{{ form.rl.id_for_label }}" name="{{ form.rl.html_name }}" value="{{ form.rl.value }}" placeholder="Enter Profit/Loss" required> </div> <!-- Account Desc. --> <div class="col-md-4"> <label for="id_ak" class="form-label">Cash Flow</label> <input type="text" class="form-control" id="{{ form.ak.id_for_label }}" name="{{ form.ak.html_name }}" value="{{ form.ak.value }}" placeholder="Enter Cash Flow" required> </div> <div class="col-md-4"> <label for="id_ek" class="form-label">Equity</label> <input type="text" class="form-control" id="{{ form.ek.id_for_label }}" name="{{ form.ek.html_name }}" value="{{ form.ek.value }}" placeholder="Enter Equity" required> </div> </div> <div class="row mb-3"> <!-- Account Trans Code --> <div class="col-md-4"> <label for="id_aging" class="form-label">Aging</label> <select class="form-select" id="{{ form.aging.id_for_label }}" name="{{ form.aging.html_name }}" value="{{ form.aging.value }}"required> <option value="" selected disabled>Select Agingt</option> <option value="AP">Account Payable</option> <option value="AR">Account Receivable</option> </select> </div> <!-- Account Code. --> <div class="col-md-4"> <label for="id_pl_calc_ref" class="form-label">Profit/Loss Ref</label> <input type="text" class="form-control" id="{{ form.pl_calc_ref.id_for_label }}" name="{{ form.pl_calc_refl.html_name }}" value="{{ form.pl_calc_ref.value }}" placeholder="Enter Profit/Loss Ref" required> </div> <!-- Account Desc. --> <div class="col-md-4"> <label for="id_pl_account" class="form-label">Profit/Loss Account </label> <input type="text" class="form-control" id="{{ form.pl_account.id_for_label }}" name="{{ form.pl_account.html_name }}" value="{{ form.pl_account.value }}" placeholder="Enter Profit/LOss Account" required> </div> </div> </div> </div> </div> </tbody> </table> <!-- Submit Button --> <div class="text-center mt-4"> <button type="submit" class="btn btn-primary btn-lg">Submit</button> </div> </form> <a href="{% url 'coa_page' %}">Back</a> </div> <script src="cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> {% endblock %}
coa_edit.html part 1 {% extends 'base.html' %} {% block content %} <head> <style> .form-section { margin-bottom: 2rem; } .form-section h3 { margin-bottom: 1.5rem; } </style> </head> <body> <div class="container mt-5"> <h1>{{ form.instance.pk|default:"Add" }} Chart Of Account</h1> <form method="post" novalidate> {% csrf_token %} <table class="table table-bordered"> <tbody> <!-- Personal Information Section --> <div class="form-section"> <div class="row mb-3"> <!-- Group Account 1st --> <div class="col-md-4"> <label for="id_group_rek1" class="form-label">Grp Account 1st</label> <input type="text" class="form-control" id="{{ form.group_rek1.id_for_label }}" name="{{ form.group_rek1.html_name }}" value="{{ form.group_rek1.value }}" placeholder="Enter Group Account 1st" required > </div> <!-- Account 1st Desc. --> <div class="col-md-4"> <label for="id_keter_rek1" class="form-label">Grp Account 1st Desc</label> <input type="text" class="form-control" id="{{ form.keter_rek1.id_for_label }}" name="{{ form.keter_rek1.html_name }}" value="{{ form.keter_rek1.value }}" placeholder="Enter Group Account 1st Desc." required> </div> <div class="row mb-3"> <!-- Group Account 2nd --> <div class="col-md-4"> <label for="id_group_rek2" class="form-label">Grp Account 2nd</label> <input type="text" class="form-control" id="{{ form.group_rek2.id_for_label }}" name="{{ form.group_rek2.html_name }}" value="{{ form.group_rek2.value }}" placeholder="Enter Group Account 2nd" required > </div> <!-- Account 2nd Desc. --> <div class="col-md-4"> <label for="id_keter_rek2" class="form-label">Grp Account 2nd Desc</label> <input type="text" class="form-control" id="{{ form.keter_rek2.id_for_label }}" name="{{ form.keter_rek2.html_name }}" value="{{ form.keter_rek2.value }}" placeholder="Enter Group Account 2nd Desc." required> </div> <!-- Account 2nd Desc. --> <div class="col-md-4"> <label for="id_kode_rekening2" class="form-label">Account 2nd</label> <input type="text" class="form-control" id="{{ form.kode_rekening2.id_for_label }}" name="{{ form.kode_rekening2.html_name }}" value="{{ form.kode_rekening2.value }}" placeholder="Enter Account 2nd Desc." required> </div> <div class="row mb-3"> <!-- Group Account 3rd --> <div class="col-md-4"> <label for="id_group_rek3" class="form-label">Grp Account 3rd</label> <input type="text" class="form-control" id="{{ form.group_rek3.id_for_label }}" name="{{ form.group_rek3.html_name }}" value="{{ form.group_rek3.value }}" placeholder="Enter Group Account 3rd" required > </div> <!-- Account 2nd Desc. --> <div class="col-md-4"> <label for="id_keter_rek3" class="form-label">Grp Account 3rd Desc</label> <input type="text" class="form-control" id="{{ form.keter_rek3.id_for_label }}" name="{{ form.keter_rek3.html_name }}" value="{{ form.keter_rek3.value }}" placeholder="Enter Group Account 3rd Desc." required> </div> <div class="col-md-4"> <label for="id_kode_rekening3" class="form-label">Account 3rd</label> <input type="text" class="form-control" id="{{ form.kode_rekening3.id_for_label }}" name="{{ form.kode_rekening3.html_name }}" value="{{ form.kode_rekening3.value }}" placeholder="Enter Account 2nd Desc." required> </div> <div class="row mb-3"> <!-- Account Trans Code --> <div class="col-md-4"> <label for="id_kode_trans_rek" class="form-label">Account Trans Code</label> <input type="text" class="form-control" id="{{ form.kode_trans_rek.id_for_label }}" name="{{ form.kode_trans_rek.html_name }}" value="{{ form.kode_trans_rek.value }}" placeholder="Enter Account Trans Code" required > </div> <!-- Account Code. --> <div class="col-md-4"> <label for="id_kode_rekening" class="form-label">Account Code</label> <input type="text" class="form-control" id="{{ form.kode_rekening.id_for_label }}" name="{{ form.kode_rekening.html_name }}" value="{{ form.kode_rekening.value }}" readonly placeholder="Enter Account Code" required> </div> <!-- Account Desc. --> <div class="col-md-4"> <label for="id_keterangan" class="form-label">Account Description</label> <input type="text" class="form-control" id="{{ form.keterangan.id_for_label }}" name="{{ form.keterangan.html_name }}" value="{{ form.keterangan.value }}" placeholder="Enter Account Description." required> </div> </div> <div class="row mb-3"> <!-- Debit/Credit --> <div class="col-md-4"> <label for="id_d_k" class="form-label">Debit/Credit</label> <select class="form-select" id="{{ form.d_k.id_for_label }}" name="{{ form.d_k.html_name }}" value="{{ form.d_k.value }}"required> <option value="" selected disabled>Select Debit/Credit</option> <option value="D">Debit</option> <option value="C">Credit</option> </select> </div> </div>
coa_add.html part 2 <div class="row mb-3"> <!-- Account Trans Code --> <div class="col-md-4"> <label for="id_nr" class="form-label">Balance Sheet</label> <input type="text" class="form-control" id="{{ form.nr.id_for_label }}" name="{{ form.nr.html_name }}" value="{{ form.nr.value }}" placeholder="Enter Balance Sheet" required > </div> <!-- Account Code. --> <div class="col-md-4"> <label for="id_rl" class="form-label">Profit/Loss</label> <input type="text" class="form-control" id="{{ form.rl.id_for_label }}" name="{{ form.rl.html_name }}" value="{{ form.rl.value }}" placeholder="Enter Profit/Loss" required> </div> <!-- Account Desc. --> <div class="col-md-4"> <label for="id_ak" class="form-label">Cash Flow</label> <input type="text" class="form-control" id="{{ form.ak.id_for_label }}" name="{{ form.ak.html_name }}" value="{{ form.ak.value }}" placeholder="Enter Cash Flow" required> </div> <div class="col-md-4"> <label for="id_ek" class="form-label">Equity</label> <input type="text" class="form-control" id="{{ form.ek.id_for_label }}" name="{{ form.ek.html_name }}" value="{{ form.ek.value }}" placeholder="Enter Equity" required> </div> </div> <div class="row mb-3"> <!-- Account Trans Code --> <div class="col-md-4"> <label for="id_aging" class="form-label">Aging</label> <select class="form-select" id="{{ form.aging.id_for_label }}" name="{{ form.aging.html_name }}" value="{{ form.aging.value }}"required> <option value="" selected disabled>Select Agingt</option> <option value="AP">Account Payable</option> <option value="AR">Account Receivable</option> </select> </div> <!-- Account Code. --> <div class="col-md-4"> <label for="id_pl_calc_ref" class="form-label">Profit/Loss Ref</label> <input type="text" class="form-control" id="{{ form.pl_calc_ref.id_for_label }}" name="{{ form.pl_calc_refl.html_name }}" value="{{ form.pl_calc_ref.value }}" placeholder="Enter Profit/Loss Ref" required> </div> <!-- Account Desc. --> <div class="col-md-4"> <label for="id_pl_account" class="form-label">Profit/Loss Account </label> <input type="text" class="form-control" id="{{ form.pl_account.id_for_label }}" name="{{ form.pl_account.html_name }}" value="{{ form.pl_account.value }}" placeholder="Enter Profit/LOss Account" required> </div> </div> </div> </div> </div> </tbody> </table> <!-- Submit Button --> <div class="text-center mt-4"> <button type="submit" class="btn btn-primary btn-lg">Submit</button> </div> </form> <a href="{% url 'coa_page' %}">Back</a> </div> <script src="cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> {% endblock %}
coa.html part 1 {% extends 'base.html' %} {% block content %} <head> <style> .form-section { margin-bottom: 2rem; } .form-section h3 { margin-bottom: 1.5rem; } </style> </head> <body> <div class="container mt-5"> <h1>{{ form.instance.pk|default:"Add" }} Chart Of Account</h1> <form method="post" novalidate> {% csrf_token %} <table class="table table-bordered"> <tbody> <!-- Personal Information Section --> <div class="form-section"> <div class="row mb-3"> <!-- Group Account 1st --> <div class="col-md-4"> <label for="id_group_rek1" class="form-label">Grp Account 1st</label> <input type="text" class="form-control" id="{{ form.group_rek1.id_for_label }}" name="{{ form.group_rek1.html_name }}" value="{{ form.group_rek1.value }}" placeholder="Enter Group Account 1st" required > </div> <!-- Account 1st Desc. --> <div class="col-md-4"> <label for="id_keter_rek1" class="form-label">Grp Account 1st Desc</label> <input type="text" class="form-control" id="{{ form.keter_rek1.id_for_label }}" name="{{ form.keter_rek1.html_name }}" value="{{ form.keter_rek1.value }}" placeholder="Enter Group Account 1st Desc." required> </div> <div class="row mb-3"> <!-- Group Account 2nd --> <div class="col-md-4"> <label for="id_group_rek2" class="form-label">Grp Account 2nd</label> <input type="text" class="form-control" id="{{ form.group_rek2.id_for_label }}" name="{{ form.group_rek2.html_name }}" value="{{ form.group_rek2.value }}" placeholder="Enter Group Account 2nd" required > </div> <!-- Account 2nd Desc. --> <div class="col-md-4"> <label for="id_keter_rek2" class="form-label">Grp Account 2nd Desc</label> <input type="text" class="form-control" id="{{ form.keter_rek2.id_for_label }}" name="{{ form.keter_rek2.html_name }}" value="{{ form.keter_rek2.value }}" placeholder="Enter Group Account 2nd Desc." required> </div> <!-- Account 2nd Desc. --> <div class="col-md-4"> <label for="id_kode_rekening2" class="form-label">Account 2nd</label> <input type="text" class="form-control" id="{{ form.kode_rekening2.id_for_label }}" name="{{ form.kode_rekening2.html_name }}" value="{{ form.kode_rekening2.value }}" placeholder="Enter Account 2nd Desc." required> </div> <div class="row mb-3"> <!-- Group Account 3rd --> <div class="col-md-4"> <label for="id_group_rek3" class="form-label">Grp Account 3rd</label> <input type="text" class="form-control" id="{{ form.group_rek3.id_for_label }}" name="{{ form.group_rek3.html_name }}" value="{{ form.group_rek3.value }}" placeholder="Enter Group Account 3rd" required > </div> <!-- Account 2nd Desc. --> <div class="col-md-4"> <label for="id_keter_rek3" class="form-label">Grp Account 3rd Desc</label> <input type="text" class="form-control" id="{{ form.keter_rek3.id_for_label }}" name="{{ form.keter_rek3.html_name }}" value="{{ form.keter_rek3.value }}" placeholder="Enter Group Account 3rd Desc." required> </div> <div class="col-md-4"> <label for="id_kode_rekening3" class="form-label">Account 3rd</label> <input type="text" class="form-control" id="{{ form.kode_rekening3.id_for_label }}" name="{{ form.kode_rekening3.html_name }}" value="{{ form.kode_rekening3.value }}" placeholder="Enter Account 2nd Desc." required> </div> <div class="row mb-3"> <!-- Account Trans Code --> <div class="col-md-4"> <label for="id_kode_trans_rek" class="form-label">Account Trans Code</label> <input type="text" class="form-control" id="{{ form.kode_trans_rek.id_for_label }}" name="{{ form.kode_trans_rek.html_name }}" value="{{ form.kode_trans_rek.value }}" placeholder="Enter Account Trans Code" required > </div> <!-- Account Code. --> <div class="col-md-4"> <label for="id_kode_rekening" class="form-label">Account Code</label> <input type="text" class="form-control" id="{{ form.kode_rekening.id_for_label }}" name="{{ form.kode_rekening.html_name }}" value="{{ form.kode_rekening.value }}" placeholder="Enter Account Code" required> </div> <!-- Account Desc. --> <div class="col-md-4"> <label for="id_keterangan" class="form-label">Account Description</label> <input type="text" class="form-control" id="{{ form.keterangan.id_for_label }}" name="{{ form.keterangan.html_name }}" value="{{ form.keterangan.value }}" placeholder="Enter Account Description." required> </div> </div> <div class="row mb-3"> <!-- Debit/Credit --> <div class="col-md-4"> <label for="id_d_k" class="form-label">Debit/Credit</label> <select class="form-select" id="{{ form.d_k.id_for_label }}" name="{{ form.d_k.html_name }}" value="{{ form.d_k.value }}"required> <option value="" selected disabled>Select Debit/Credit</option> <option value="D">Debit</option> <option value="C">Credit</option> </select> </div> </div>
chartofaccount.html {% extends 'base.html' %} {% block content %} <body> <div class="container"> <h1>Chart Of Account Data</h1> <a href="{% url 'add_coa' %}">Add Chart Of Account</a> <table id="xcoa-table" class="display" style="width:100%"> <thead> <tr> <th>Group Acc 1</th> <th>Group Acc 2</th> <th>Group Acc 3</th> <th>Account Code</th> <th>Account Name</th> <th>D/C</th> <th>Balance Sheet</th> <th>Profit/Loss</th> <th>Cash Flow</th> <th>Equity</th> <th>Actions</th> </tr> </thead> </table> </div> <script> $(document).ready(function () { $('#xcoa-table').DataTable({ processing: true, serverSide: true, ajax: { url: "/fetch_coas/", type: "GET" }, columns: [ { data: "keter_rek1" }, { data: "keter_rek2" }, { data: "keter_rek3" }, { data: "kode_rekening" }, { data: "keterangan" }, { data: "d_k" }, { data: "nr" }, { data: "rl" }, { data: "ak" }, { data: "ek" }, { data: null, render: function (data) { return ` <a href="/editcoa/${data.kode_rekening}/">Edit</a> <a href="/deletecoa/${data.kode_rekening}/" onclick="deleteChartOfAccount(${data.kode_rekening})">Delete</a> `; } } ] }); }); </script> </div> </body> {% endblock %}
index.html {% extends 'base.html' %} {% block content %} <h1>Mustang Enterprise</h1> <p>This Application developed using Python Django Framework <em>connected to Oracle Database 12C</em>!</p> <h2>Dynamic content</h2> <p>The Application has the following record counts:</p> <ul> <li><strong>Chart Of Account records:</strong> {{ num_coa }}</li> </ul> {% endblock %}
base.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CRUD with Sidebar</title> <link rel="stylesheet" href="cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css"> <link href="cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="code.jquery.com/jquery-3.6.0.min.js"></script> <script src="cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script> <style> body { display: flex; } #sidebar { width: 200px; background: #f4f4f4; padding: 15px; height: 100vh; } #content { flex: 1; padding: 20px; } .active { font-weight: bold; } </style> </head> <body> <div id="sidebar"> <ul> <li><a href="{% url 'index' %}">Home</a></li> <li><a href="/coas/">Chart Of Account</a></li> </ul> </div> <div id="content"> {% block content %}{% endblock %} </div> </body> </html>
from django.shortcuts import render from django.http import JsonResponse import json from .models import ChartOfAccount from django.shortcuts import render, get_object_or_404, redirect from .forms import ChartOfAccountForm from django.http import JsonResponse def index(request): # Generate counts of some of the main objects num_coa = ChartOfAccount.objects.all().count() context = { 'num_coa': num_coa, } # Render the HTML template index.html with the data in the context variable return render(request, 'index.html', context=context) def coa_page(request): return render(request, 'chartofaccount.html') def fetch_coas(request): search_value = request.GET.get('search[value]', '') start = int(request.GET.get('start', 0)) length = int(request.GET.get('length', 10)) coas = ChartOfAccount.objects.all().order_by('kode_rekening') # Apply search filter if search_value: coas = coas.filter( kode_rekening__icontains=search_value ) total_records = coas.count() coas = coas[start:start + length] data = [ { "keter_rek1": coa.keter_rek1, "keter_rek2": coa.keter_rek2, "keter_rek3": coa.keter_rek3, "kode_rekening": coa.kode_rekening, "keterangan": coa.keterangan, "d_k": coa.d_k, "nr": coa.nr, "rl": coa.rl, "ak": coa.ak, "ek": coa.ek, } for coa in coas ] response = { "draw": int(request.GET.get('draw', 0)), "recordsTotal": total_records, "recordsFiltered": total_records, "data": data, } return JsonResponse(response) def add_coa(request): if request.method == 'POST': form = ChartOfAccountForm(request.POST) if form.is_valid(): form.save() return redirect('coa_page') else: form = ChartOfAccountForm() return render(request, 'coa_add.html', {'form': form}) def edit_coa(request, pk): coa = get_object_or_404(ChartOfAccount, pk=pk) if request.method == 'POST': form = ChartOfAccountForm(request.POST, instance=coa) if form.is_valid(): form.save() return redirect('coa_page') else: form = ChartOfAccountForm(instance=coa) return render(request, 'coa_edit.html', {'form': form}) def delete_coa(request, pk): ccy = get_object_or_404(ChartOfAccount, pk=pk) ccy.delete() return redirect('coa_page') # return JsonResponse({'success': True})
myapp folder urls.py from django.urls import path from . import views from django.urls import include urlpatterns = [ path('', views.index, name='index'), path('coas/', views.coa_page, name='coa_page'), path('fetch_coas/', views.fetch_coas, name='fetch_coas'), path('addcoa/', views.add_coa, name='add_coa'), path('editcoa/<str:pk>/', views.edit_coa, name='edit_coa'), path('deletecoa/<str:pk>/', views.delete_coa, name='delete_coa'), ]
froms.py from django import forms from .models import ChartOfAccount class ChartOfAccountForm(forms.ModelForm): class Meta: model = ChartOfAccount fields = ['group_rek1','keter_rek1', 'group_rek2', 'keter_rek2','kode_rekening2', 'group_rek3', 'keter_rek3','kode_rekening3', 'kode_trans_rek','kode_rekening', 'keterangan', 'd_k', 'nr','rl','ak','ek', 'aging','pl_calc_ref','pl_account']
models.py from django.db import models class ChartOfAccount(models.Model): group_rek1 = models.CharField(max_length=10) keter_rek1 = models.CharField(max_length=100, blank=True, null=True) group_rek2 = models.CharField(max_length=10) keter_rek2 = models.CharField(max_length=100, blank=True, null=True) group_rek3 = models.CharField(max_length=10) keter_rek3 = models.CharField(max_length=100, blank=True, null=True) kode_trans_rek = models.CharField(max_length=10) kode_rekening = models.CharField(primary_key=True, max_length=50) keterangan = models.CharField(max_length=100, blank=True, null=True) d_k = models.CharField(max_length=1, blank=True, null=True) created_date = models.DateField(blank=True, null=True) created_by = models.CharField(max_length=30, blank=True, null=True) last_updated_date = models.DateField(blank=True, null=True) last_updated_by = models.CharField(max_length=30, blank=True, null=True) program_name = models.CharField(max_length=30, blank=True, null=True) kode_rekening2 = models.CharField(max_length=50, blank=True, null=True) kode_rekening3 = models.CharField(max_length=50, blank=True, null=True) nr = models.CharField(max_length=10, blank=True, null=True) rl = models.CharField(max_length=10, blank=True, null=True) ak = models.CharField(max_length=10, blank=True, null=True) ek = models.CharField(max_length=10, blank=True, null=True) group_ak = models.CharField(max_length=10, blank=True, null=True) group_rl = models.CharField(max_length=10, blank=True, null=True) aging = models.CharField(max_length=10, blank=True, null=True) pl_calc_ref = models.CharField(max_length=10, blank=True, null=True) pl_account = models.CharField(max_length=10, blank=True, null=True) class Meta: managed = True db_table = 'chart_of_account' def __str__(self): """String for representing the Model object.""" return self.kode_rekening
CREATE TABLE DJANGO.CHART_OF_ACCOUNT ( GROUP_REK1 VARCHAR2(10 BYTE) NOT NULL, KETER_REK1 VARCHAR2(100 BYTE), GROUP_REK2 VARCHAR2(10 BYTE) NOT NULL, KETER_REK2 VARCHAR2(100 BYTE), GROUP_REK3 VARCHAR2(10 BYTE) NOT NULL, KETER_REK3 VARCHAR2(200 BYTE), KODE_TRANS_REK VARCHAR2(10 BYTE) NOT NULL, KODE_REKENING VARCHAR2(50 BYTE), KETERANGAN VARCHAR2(200 BYTE), D_K VARCHAR2(1 BYTE), CREATED_DATE DATE, CREATED_BY VARCHAR2(30 BYTE), LAST_UPDATED_DATE DATE, LAST_UPDATED_BY VARCHAR2(30 BYTE), PROGRAM_NAME VARCHAR2(30 BYTE), KODE_REKENING2 VARCHAR2(50 BYTE), KODE_REKENING3 VARCHAR2(50 BYTE), NR VARCHAR2(10 BYTE), RL VARCHAR2(10 BYTE), AK VARCHAR2(10 BYTE), EK VARCHAR2(10 BYTE), GROUP_AK VARCHAR2(10 BYTE), GROUP_RL VARCHAR2(10 BYTE), AGING VARCHAR2(10 BYTE), PL_CALC_REF VARCHAR2(10 BYTE), PL_ACCOUNT VARCHAR2(10 BYTE) ) TABLESPACE USERS;
login.html {% load static %} <!DOCTYPE html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Purple Admin</title> <!-- plugins:css --> <link rel="stylesheet" href="{% static 'assets/vendors/mdi/css/materialdesignicons.min.css' %}"> <link rel="stylesheet" href="{% static 'assets/vendors/ti-icons/css/themify-icons.css' %}"> <link rel="stylesheet" href="{% static 'assets/vendors/css/vendor.bundle.base.css' %}"> <link rel="stylesheet" href="{% static 'assets/vendors/font-awesome/css/font-awesome.min.css' %}"> <!-- endinject --> <!-- Plugin css for this page --> <!-- End plugin css for this page --> <!-- inject:css --> <!-- endinject --> <!-- Layout styles --> <link rel="stylesheet" href="{% static 'assets/css/style.css' %}"> <!-- End layout styles --> <link rel="shortcut icon" href="{% static 'assets/images/favicon.png' %}" /> </head> <body> <div class="container-scroller"> <div class="container-fluid page-body-wrapper full-page-wrapper"> <div class="content-wrapper d-flex align-items-center auth"> <div class="row flex-grow"> <div class="col-lg-4 mx-auto"> <div class="auth-form-light text-left p-5"> <div class="brand-logo"> <img src="{% static 'assets/images/logo.svg' %}"> </div> <h4>Hello! let's get started</h4> <h6 class="font-weight-light">Sign in to continue.</h6> <form class="pt-3" method="POST" action="{% url 'login_action' %}"> {% csrf_token %} <div class="form-group"> <input type="text" class="form-control form-control-lg" id="username" name="username" placeholder="Username"> </div> <div class="form-group"> <input type="password" class="form-control form-control-lg" id="password" name="password" placeholder="Password"> </div> <div class="mt-3 d-grid gap-2"> <button type="submit" class="btn btn-block btn-gradient-primary btn-lg font-weight-medium auth-form-btn"> SIGN IN </button> </div> <div class="my-2 d-flex justify-content-between align-items-center"> <div class="form-check"> <label class="form-check-label text-muted"> <input type="checkbox" class="form-check-input"> Keep me signed in </label> </div> <a href="#" class="auth-link text-primary">Forgot password?</a> </div> <div class="text-center mt-4 font-weight-light"> Don't have an account? <a href="{% url 'register_page' %}" class="text-primary">Sign Up</a> </div> </form> <div class="toast-container position-fixed bottom-0 end-0 p-3"> {% if messages %} {% for message in messages %} <div class="toast align-items-center text-bg-{{ message.tags }} border-0" role="alert" aria-live="assertive" aria-atomic="true" data-bs-autohide="true" data-bs-delay="3000"> <div class="d-flex"> <div class="toast-body"> {{ message }} </div> <button type="button" class="btn-close me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button> </div> </div> {% endfor %} {% endif %} </div> </div> </div> </div> </div> <!-- content-wrapper ends --> </div> <!-- page-body-wrapper ends --> </div> <!-- container-scroller --> <!-- plugins:js --> <script src="{% static 'assets/vendors/js/vendor.bundle.base.js' %}"></script> <!-- endinject --> <!-- Plugin js for this page --> <!-- End plugin js for this page --> <!-- inject:js --> <script src="{% static 'assets/js/off-canvas.js' %}"></script> <script src="{% static 'assets/js/misc.js' %}"></script> <script src="{% static 'assets/js/settings.js' %}"></script> <script src="{% static 'assets/js/todolist.js' %}"></script> <script src="{% static 'assets/js/jquery.cookie.js' %}"></script> <!-- endinject --> <script> document.addEventListener('DOMContentLoaded', function () { var toastElements = document.querySelectorAll('.toast'); toastElements.forEach(function (toast) { var bsToast = new bootstrap.Toast(toast); bsToast.show(); }); }); </script> </body> </html>
register.html {% load static %} <!DOCTYPE html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Purple Admin</title> <!-- plugins:css --> <link rel="stylesheet" href="{% static 'assets/vendors/mdi/css/materialdesignicons.min.css' %}"> <link rel="stylesheet" href="{% static 'assets/vendors/ti-icons/css/themify-icons.css' %}"> <link rel="stylesheet" href="{% static 'assets/vendors/css/vendor.bundle.base.css' %}"> <link rel="stylesheet" href="{% static 'assets/vendors/font-awesome/css/font-awesome.min.css' %}"> <!-- endinject --> <!-- Plugin css for this page --> <!-- End plugin css for this page --> <!-- inject:css --> <!-- endinject --> <!-- Layout styles --> <link rel="stylesheet" href="{% static 'assets/css/style.css' %}"> <!-- End layout styles --> <link rel="shortcut icon" href="{% static 'assets/images/favicon.png' %}" /> </head> <body> <div class="container-scroller"> <div class="container-fluid page-body-wrapper full-page-wrapper"> <div class="content-wrapper d-flex align-items-center auth"> <div class="row flex-grow"> <div class="col-lg-4 mx-auto"> <div class="auth-form-light text-left p-5"> <div class="brand-logo"> <img src="{% static 'assets/images/logo.svg' %}"> </div> <h4>New here?</h4> <h6 class="font-weight-light">Signing up is easy. It only takes a few steps</h6> <form class="pt-3" method="POST" action="{% url 'register_action' %}"> {% csrf_token %} <div class="form-group"> <input type="text" class="form-control form-control-lg" id="firstName" name="firstName" placeholder="First Name"> </div> <div class="form-group"> <input type="text" class="form-control form-control-lg" id="lastName" name="lastName" placeholder="Last Name"> </div> <div class="form-group"> <input type="text" class="form-control form-control-lg" id="username" name="username" placeholder="Username"> </div> <div class="form-group"> <input type="email" class="form-control form-control-lg" id="email" name="email" placeholder="Email"> </div> <div class="form-group"> <input type="password" class="form-control form-control-lg" id="password" name="password" placeholder="Password"> </div> <div class="mb-4"> <div class="form-check"> <label class="form-check-label text-muted"> <input type="checkbox" class="form-check-input" id="agreeTerms" name="agreeTerms"> I agree to all Terms & Conditions </label> </div> </div> <div class="mt-3 d-grid gap-2"> <button type="submit" class="btn btn-block btn-gradient-primary btn-lg font-weight-medium auth-form-btn">SIGN UP</button> </div> <div class="text-center mt-4 font-weight-light"> Already have an account? <a href="{% url 'login_page_secondary' %}" class="text-primary">Login</a> </div> </form> <div class="toast-container position-fixed bottom-0 end-0 p-3"> {% if messages %} {% for message in messages %} <div class="toast align-items-center text-bg-{{ message.tags }} border-0" role="alert" aria-live="assertive" aria-atomic="true" data-bs-autohide="true" data-bs-delay="3000"> <div class="d-flex"> <div class="toast-body"> {{ message }} </div> <button type="button" class="btn-close me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button> </div> </div> {% endfor %} {% endif %} </div> </div> </div> </div> </div> <!-- content-wrapper ends --> </div> <!-- page-body-wrapper ends --> </div> <!-- container-scroller --> <!-- plugins:js --> <script src="{% static 'assets/vendors/js/vendor.bundle.base.js' %}"></script> <!-- endinject --> <!-- Plugin js for this page --> <!-- End plugin js for this page --> <!-- inject:js --> <script src="{% static 'assets/js/off-canvas.js' %}"></script> <script src="{% static 'assets/js/misc.js' %}"></script> <script src="{% static 'assets/js/settings.js' %}"></script> <script src="{% static 'assets/js/todolist.js' %}"></script> <script src="{% static 'assets/js/jquery.cookie.js' %}"></script> <!-- endinject --> <script> document.querySelector('form').addEventListener('submit', function(e) { var checkbox = document.getElementById('agreeTerms'); if (!checkbox.checked) { e.preventDefault(); alert("You must agree to the Terms & Conditions."); } }); document.addEventListener('DOMContentLoaded', function () { var toastElements = document.querySelectorAll('.toast'); toastElements.forEach(function (toast) { var bsToast = new bootstrap.Toast(toast); bsToast.show(); }); }); </script> </body> </html>
Table : Subledger CREATE TABLE DJANGOERP.SUBLEDGER ( NAME VARCHAR2(100 BYTE), COUNTRY VARCHAR2(100 BYTE), PROVINCE VARCHAR2(100 BYTE), ADDRESS1 VARCHAR2(100 BYTE), ADDRESS2 VARCHAR2(100 BYTE), SL_TYPE VARCHAR2(50 BYTE), CITY VARCHAR2(100 BYTE) ) TABLESPACE USERS PCTUSED 0 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) LOGGING NOCOMPRESS NOCACHE; CREATE UNIQUE INDEX DJANGOERP.PK_SUBLEDGER ON DJANGOERP.SUBLEDGER (NAME) LOGGING TABLESPACE USERS_IDX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ); ALTER TABLE DJANGOERP.SUBLEDGER ADD ( CONSTRAINT PK_SUBLEDGER PRIMARY KEY (NAME) USING INDEX DJANGOERP.PK_SUBLEDGER ENABLE VALIDATE); ALTER TABLE DJANGOERP.SUBLEDGER ADD ( CONSTRAINT FK_CITY_CITY FOREIGN KEY (CITY) REFERENCES DJANGOERP.CITY (NAME) ON DELETE CASCADE ENABLE VALIDATE , CONSTRAINT FK_SL_COUN FOREIGN KEY (COUNTRY) REFERENCES DJANGOERP.COUNTRY (NAME) ON DELETE CASCADE ENABLE VALIDATE , CONSTRAINT FL_SL_PROV FOREIGN KEY (PROVINCE) REFERENCES DJANGOERP.PROVINCE (NAME) ON DELETE CASCADE ENABLE VALIDATE);
Table : City CREATE TABLE DJANGOERP.CITY ( CITY_NAME VARCHAR2(100 BYTE), PROVINCE VARCHAR2(100 BYTE), NAME VARCHAR2(100 BYTE) ) TABLESPACE USERS PCTUSED 0 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) LOGGING NOCOMPRESS NOCACHE; CREATE UNIQUE INDEX DJANGOERP.PK_CITY ON DJANGOERP.CITY (NAME) LOGGING TABLESPACE USERS_IDX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ); ALTER TABLE DJANGOERP.CITY ADD ( CONSTRAINT PK_CITY PRIMARY KEY (NAME) USING INDEX DJANGOERP.PK_CITY ENABLE VALIDATE);
Table : Province CREATE TABLE DJANGOERP.PROVINCE ( COUNTRY VARCHAR2(100 BYTE), NAME VARCHAR2(100 BYTE) ) TABLESPACE USERS PCTUSED 0 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) LOGGING NOCOMPRESS NOCACHE; CREATE UNIQUE INDEX DJANGOERP.PK_PROVINCE ON DJANGOERP.PROVINCE (NAME) LOGGING TABLESPACE USERS_IDX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ); ALTER TABLE DJANGOERP.PROVINCE ADD ( CONSTRAINT PK_PROVINCE PRIMARY KEY (NAME) USING INDEX DJANGOERP.PK_PROVINCE ENABLE VALIDATE);
Table : Country CREATE TABLE DJANGOERP.COUNTRY ( NAME VARCHAR2(100 BYTE) ) TABLESPACE USERS PCTUSED 0 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) LOGGING NOCOMPRESS NOCACHE; CREATE UNIQUE INDEX DJANGOERP.PK_COUNTRY ON DJANGOERP.COUNTRY (NAME) LOGGING TABLESPACE USERS_IDX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ); ALTER TABLE DJANGOERP.COUNTRY ADD ( CONSTRAINT PK_COUNTRY PRIMARY KEY (NAME) USING INDEX DJANGOERP.PK_COUNTRY ENABLE VALIDATE);
finapp/templates/finapp/city_dropdown_list_options.html <option value="">---------</option> {% for city in cities %} <option value="{{ city.pk }}">{{ city.name }}</option> {% endfor %}
finapp/templates/finapp/province_dropdown_list_options.html <option value="">---------</option> {% for province in provinces %} <option value="{{ province.pk }}">{{ province.name }}</option> {% endfor %}
finapp/templates/finapp/subledger_form.html {% extends "base.html" %} {% block content %} <h3>Sub Ledger</h3> <form action="" method="post" id="SubledgerForm" data-provinces-url="{% url 'ajax_load_provinces' %}" novalidate> {% csrf_token %} <table> {{ form.as_table }} </table> <input type="submit" value="Submit"> <a href="{% url 'subledger_changelist' %} ">Never mind</a> </form> <script src="code.jquery.com/jquery-3.3.1.min.js"></script> <script> // State $("#id_country").change(function () { var url = $("#subledgerForm").attr("data-provinces-url"); var countryId = $(this).val(); $.ajax({ url: "{% url 'ajax_load_provinces' %}", data: { 'country': countryId }, success: function (data) { $("#id_province").html( data); } }); }); // City $("#id_province").change(function () { var url = $("#subledgerForm").attr("data-provinces-url"); var provinceId = $(this).val(); $.ajax({ url: "{% url 'ajax_load_cities' %}", data: { 'province': provinceId }, success: function (data) { $("#id_city").html( data); } }); }); </script> {% endblock %}
finapp/templates/finapp/subledger_list.html {% extends "base.html" %} {% block content %} <!--h1>Customers/Suppliers List</h1--> <table class="table table-bordered table-hover"> List of Customers/Suppliers <a href="{% url 'subledger_add'%}">Add</a> <thead class="thead-dark"> <tr> <th scope="col" class="text-center">Name</th> <th scope="col" class="text-center">Type</th> <th scope="col" class="text-center">Address 1</th> <th scope="col" class="text-center">Address 2</th> <th scope="col" class="text-center">Country</th> <th scope="col" class="text-center">Province</th> <th scope="col" class="text-center">City</th> <th scope="col" class="text-center">Edit/Delete</th> </tr> </thead> {% if subledgers %} <tbody> {% for subledger in subledgers %} <tr> <td>{{subledger.name}}</td> <td>{{subledger.sl_type}}</td> <td>{{subledger.address1}}</td> <td>{{subledger.address2}}</td> <td>{{subledger.country}}</td> <td>{{subledger.province}}</td> <td>{{subledger.city}}</td> <!--td><a href="{% url 'subledger_change' subledger.pk%}">Edit</a></td--> <td><a href="{% url 'subledger_change' subledger.pk%}">Edit</a>/<a href="{% url 'subledger-delete' subledger.pk%}">Delete</a></td> </tr> {% endfor %} </tbody> </table> {% else %} <p>There are no customer/supplier in the database.</p> {% endif %} {% endblock %}
finapp/templates/index.html {% extends "base.html" %} {% block content %} <h1>Binary Applications Demo</h1> <p>This website developed using Python Django Framework <em>connected to Oracle Database 12C</em>!</p> <h2>Dynamic content</h2> <p>The Application has the following record counts:</p> <ul> <li><strong>Business Partner available:</strong> {{ num_bp_available }}</li> </ul> <p>You have visited this page {{ num_visits }} time{{ num_visits|pluralize }}.</p> {% endblock %}
finapp/templates/base.html <!DOCTYPE html> <html lang="en"> <head> {% block title %}<title>Binary Applications</title>{% endblock %} <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css"> <script src="cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script> <script src="cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script> <script src="cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script> {% load static %} <!-- <img src="{% static '/images/local_library_model_uml.png' %}" alt="UML diagram" style="width:55px;height:54px;"> --> </head> <body> <div class="container-fluid"> <div class="row"> <div class="col-sm-2"> {% block sidebar %} <ul class="sidebar-nav"> <div class="wrapper"> <!-- Sidebar --> <nav id="sidebar"> <div class="sidebar-header"> <h4><strong>Binary Applications</strong></h4> </div> <ul class="list-unstyled components"> <li class="active"> <a href="{% url 'index' %}"> <i class="fas fa-image"></i> Home </a><br> <a href="#homeSubmenu" data-toggle="collapse" aria-expanded="false" class="dropdown-toggle"> <i class="fas fa-home"></i> <strong>Master</strong> </a> <ul class="collapse list-unstyled" id="homeSubmenu"> <li><a href="{% url 'subledger_changelist' %}">Customer/Supplier</a></li> </ul> </li> <li> <a href="#"> <i class="fas fa-briefcase"></i> <strong>About</strong> </a><br> <a href="#pageSubmenu" data-toggle="collapse" aria-expanded="false" class="dropdown-toggle"> <i class="fas fa-copy"></i> <strong>General Ledger</strong> </a> <ul class="collapse list-unstyled" id="pageSubmenu"> <li> <a href="">Sales VAT/WHT</a> </li> <li> <a href="">Purchasing VAT/WHT</a> </li> </ul> <a href="#pageSubmenu" data-toggle="collapse" aria-expanded="false" class="dropdown-toggle"> <i class="fas fa-copy"></i> <strong>Pages</strong> </a> <ul class="collapse list-unstyled" id="pageSubmenu"> <li> <a href="#">Page 1</a> </li> <li> <a href="#">Page 2</a> </li> <li> <a href="#">Page 3</a> </li> </ul> </li> <li> <a href="#"> <i class="fas fa-image"></i> Portfolio </a> </li> <li> <a href="#"> <i class="fas fa-question"></i> FAQ </a> </li> <li> <a href="#"> <i class="fas fa-paper-plane"></i> Contact </a> </li> </ul> </ul> {% endblock %} </div> <div class="col-sm-10 "> {% block content %}{% endblock %} {% block pagination %} {% if is_paginated %} <div class="pagination"> <span class="page-links"> {% if page_obj.has_previous %} <a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">previous</a> {% endif %} <span class="page-current"> Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}. </span> {% if page_obj.has_next %} <a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a> {% endif %} </span> </div> {% endif %} {% endblock %} </div> </div> </div> </body> </html>
finapp/forms.py from django import forms from .models import Province, Subledger, City class SubledgerForm(forms.ModelForm): class Meta: model = Subledger fields = ( "name", "sl_type", "country", "province", "city", ) # State def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['province'].queryset = Province.objects.none() if 'country' in self.data: try: country_id = int(self.data.get('country')) self.fields['province'].queryset = Province.objects.filter(country_id=country_id).order_by('name') except (ValueError, TypeError): pass elif self.instance.pk and self.instance.country: self.fields['province'].queryset = self.instance.country.province_set.order_by('name') # City self.fields['city'].queryset = City.objects.none() if 'province' in self.data: try: province_id = int(self.data.get('province')) self.fields['city'].queryset = City.objects.filter(province_id=province_id).order_by('name') except (ValueError, TypeError): pass elif self.instance.pk and self.instance.province: self.fields['city'].queryset = self.instance.province.city_set.order_by('name')
finapp/views.py from django.shortcuts import render from .models import Subledger, Country,Province,City from .forms import SubledgerForm from django.views import generic from django.views.generic import ListView,CreateView, UpdateView, DeleteView from django.urls import reverse_lazy # Create your views here. def index(request): """View function for home page of site.""" # Generate counts of some of the main objects # Number of visits to this view, as counted in the session variable. num_visits = request.session.get('num_visits', 0) request.session['num_visits'] = num_visits + 1 context = { 'num_visits': num_visits, } # Render the HTML template index.html with the data in the context variable return render(request, 'index.html', context=context) class SubledgerListView(generic.ListView): model = Subledger form_class=SubledgerForm context_object_name='subledgers' paginate_by = 5 class SubledgerCreateView(generic.CreateView): model = Subledger # form_class=StudentForm fields = ['name','sl_type','address1','address2','country','province','city'] success_url = reverse_lazy('subledger_changelist') class SubledgerUpdateView(generic.UpdateView): model = Subledger # form_class=StudentForm fields = ['name','sl_type','address1','address2','country','province','city'] success_url = reverse_lazy('subledger_changelist') class SubledgerDeleteView(generic.DeleteView): model = Subledger # form_class=StudentForm fields = ['name','sl_type','address1','address2','country','province','city'] success_url = reverse_lazy('subledger_changelist') def load_provinces(request): country_id = request.GET.get('country') provinces = Province.objects.filter(country_id=country_id).order_by('name') return render(request, 'finapp/province_dropdown_list_options.html', {'provinces': provinces}) def load_cities(request): province_id = request.GET.get('province') cities = City.objects.filter(province_id=province_id).order_by('name') return render(request, 'finapp/city_dropdown_list_options.html', {'cities': cities})
finapp/admin.py from django.contrib import admin from .models import Province, Country, Subledger # Register your models here. admin.site.register(Subledger) admin.site.register(Country) admin.site.register(Province)
finapp/urls.py from django.urls import include,path from . import views urlpatterns = [ path('', views.index, name='index'), path('subledgers/', views.SubledgerListView.as_view(), name='subledger_changelist'), path('add/', views.SubledgerCreateView.as_view(), name='subledger_add'), path('<str:pk>/', views.SubledgerUpdateView.as_view(), name='subledger_change'), path('subledger/<str:pk>/delete/', views.SubledgerDeleteView.as_view(), name='subledger-delete'), path('ajax/load-provinces/', views.load_provinces, name='ajax_load_provinces'), path('ajax/load-cities/', views.load_cities, name='ajax_load_cities'), ]
finapp/model.py from django.db import models # Create your models here. #class College(models.Model): # name = models.CharField(primary_key=True,max_length=100, blank=True) ''' class College(models.Model): name = models.CharField(primary_key=True, max_length=100) class Meta: managed = False db_table = 'college' def __str__(self): return self.name ''' class Country(models.Model): name = models.CharField(primary_key=True, max_length=100) class Meta: managed = False db_table = 'country' def __str__(self): return self.name #class Branch(models.Model): # college = models.ForeignKey('College', on_delete=models.SET_NULL, blank=True, null=True) # name = models.CharField(primary_key=True,max_length=100, blank=True) class Province(models.Model): name = models.CharField(primary_key=True, max_length=100) country = models.ForeignKey('Country', models.DO_NOTHING, db_column='country', blank=True, null=True) class Meta: managed = True db_table = 'province' def __str__(self): return self.name class City(models.Model): name = models.CharField(primary_key=True, max_length=100) city_name = models.CharField(max_length=100, blank=True, null=True) province= models.ForeignKey('Province', on_delete=models.SET_NULL, db_column='province', blank=True, null=True) class Meta: managed = True db_table = 'city' def __str__(self): """String for representing the Model object.""" return self.city_name ''' class Branch(models.Model): name = models.CharField(primary_key=True, max_length=100) college = models.ForeignKey('College', models.DO_NOTHING, db_column='college', blank=True, null=True) class Meta: managed = True db_table = 'branch' def __str__(self): return self.name ''' #class Student(models.Model): # name = models.CharField(primary_key=True,max_length=100) # birthday=models.DateField(blank=True, null=True) # college = models.ForeignKey('College', on_delete=models.SET_NULL, blank=True, null=True) # branch=models.ForeignKey('Branch', on_delete=models.SET_NULL, blank=True, null=True) ''' class Student(models.Model): name = models.CharField(primary_key=True, max_length=100) college = models.ForeignKey(College, models.DO_NOTHING, db_column='college', blank=True, null=True) branch = models.ForeignKey(Branch, models.DO_NOTHING, db_column='branch', blank=True, null=True) birthday = models.DateField(blank=True, null=True) class Meta: managed = True db_table = 'student' def __str__(self): return self.name ''' class Subledger(models.Model): name = models.CharField(primary_key=True, max_length=100) SLTYPE = ( ('CUS', 'Customer'), ('SUP', 'Supplier'), ('DEPT', 'Department'), ('PER', 'Personal'), ) sl_type = models.CharField(max_length=50, choices=SLTYPE,blank=True,default='CUS',help_text='Subledger Type',) address1 = models.CharField(max_length=100, blank=True, null=True) address2 = models.CharField(max_length=100, blank=True, null=True) country = models.ForeignKey(Country, models.DO_NOTHING, db_column='country', blank=True, null=True) province = models.ForeignKey(Province, models.DO_NOTHING, db_column='province', blank=True, null=True) city = models.ForeignKey(City, models.DO_NOTHING, db_column='city', blank=True, null=True) class Meta: managed = True db_table = 'subledger' def __str__(self): return self.name
erpproject/urls.py from django.contrib import admin from django.urls import path #urlpatterns = [ # path('admin/', admin.site.urls), #] # Use include() to add paths from the financial application from django.urls import include #urlpatterns += [ # path('myapp/', include('myapp.urls')), #] #Add URL maps to redirect the base URL to our application from django.views.generic import RedirectView #urlpatterns += [ # path('', RedirectView.as_view(url='myapp/', permanent=True)), #] from django.conf import settings from django.conf.urls.static import static #urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) urlpatterns = [ path('admin/', admin.site.urls), path('finapp/', include('finapp.urls')), path('', RedirectView.as_view(url='finapp/')), ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
settings.py """ Django settings for erpproject project. Generated by 'django-admin startproject' using Django 4.0.5. For more information on this file, see docs.djangoproject.com/en/4.0/topics/settings/ For the full list of settings and their values, see docs.djangoproject.com/en/4.0/ref/settings/ """ from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production # See docs.djangoproject.com/en/4.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'django-insecure-sjdd%5=g3p@e_bw8n_k$bz+53fw8rl8haee1wy6fo$g5bcq%%n' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = ['*'] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'finapp.apps.FinappConfig', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'erpproject.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'erpproject.wsgi.application' # Database # docs.djangoproject.com/en/4.0/ref/settings/#databases #DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } #} DATABASES = { 'default': { 'ENGINE': 'django.db.backends.oracle', 'NAME': 'orclpy', # 'NAME': 'orcl12c', 'USER': 'djangoerp', 'PASSWORD': 'djangoerp', 'HOST': 'desktop-uslpa88', # 'HOST': 'WIN-QNVEVJ6RB1L.corp.kuwad.com', 'PORT': '1521', } } # Password validation # docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # docs.djangoproject.com/en/4.0/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # docs.djangoproject.com/en/4.0/howto/static-files/ STATIC_URL = 'static/' # Default primary key field type # docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'