amsiddiqui / accountingsoftware Goto Github PK
View Code? Open in Web Editor NEWA lightweight web based Accounting Software
A lightweight web based Accounting Software
Invoice Report
/invoice/
request = {
accessToken:
token:
fromMonth:
toMonth:
}
response = {
invoices: [{
clientID:
id: 1,
date: '22/11/2019',
amountDue: 200,
total: 270,
amountPaid: 50,
balanceDue: 220,
notes: 'shopping done on 22nd of November'
},]
}
Expense Routes
/expense/
request = {
accessToken:
token:
fromMonth:
toMonth:
}
response = {
expense : //array of all expense object
}
Client Report
/client/
request = {
accessToken:
token:
fromMonth:
toMonth:
}
response = {
client: //array of all client
}
Pages:
Login page /login
Signup page /signup
Dashboard /dashboard
Company create page /company/create
Company edit page /company/edit
Company/Accountant create page /company/accountant/create
Company/Accountant edit page /company/accountant/edit
Client show page /clients
Client create page /clients/create
Client edit page /clients/edit
Expense show page /expenses
Expense create page /expenses/create
Expense Edit page /expenses/edit
Report query page /report/request
Report show page /report
Vendor show page /vendor
Vendor create page /vendor/create
Vendor edit page /vendor/edit
Create /auth/logout route on database server.
Method: Post
accessToken: String
userToken: String
status: number (click here for reference)
err: String
if accessToken doesn't matches: Authorisation error
if userToken not exist in session: Invalid request error (user not logged in)
if userToken doesn't matches in session: Invalid userToken error
request = {
startMonth:
endMonth:
}
Note: startMonth is given relative to current month. For example if current month is 11 and startMonth = 5 then absolute startMonth = 6 ("June"). Same way endMonth is also given relative to currentMonth. Eg: endMonth = 2, then absolute endMonth = 9 ("September"). If currentMonth - startMonth is negative, cycle back to previous year month.
response = {
profit: []
}
profit: array contains integer values for each month according to following calculations.
profit = sum of all invoice.total - sum of expense.amount for a month.
Add delete route to delete existing clients/vendor
Learn Django using the documentation. Start here https://www.djangoproject.com/start/
Create /init route on database server.
Method: Post
clientId: String
secret: String
status: number (click here for reference)
accessToken: String (encrypted),
data: {
lastClientId:
lastExpenseId:
lastInvoiceId:
lastVendorId:
}
err: String
clientId + currentTime
if client doesn't exists create new token.
if client already exists and
secret matches: create new token and send
secret doesn't matches: authentication error
Create /util/<data_type> route on database server.
Method: Post
accessToken: String
status: number (click here for reference)
<data_type>* : Object
err: String
if accessToken doesn't matches: Authorisation error
request = {
startMonth:
endMonth:
quantity: // number
}
Note: startMonth is given relative to current month. For example if current month is 11 and startMonth = 5 then absolute startMonth = 6 ("June"). Same way endMonth is also given relative to currentMonth. Eg: endMonth = 2, then absolute endMonth = 9 ("September"). If currentMonth - startMonth is negative, cycle back to previous year month.
Note: quantity is number of clients returned in response ordered by sum of invoice.balanceDue if overdue* associated with them.
*overdue is if (currentDate - invoice.date (in days) > client.dayLimit)
response = {
expense: [
{client: // name of client
due: // sum of invoice.blanceDue if overdue
days: // currentDate - invoice.date - client.dayLimit (in days)
}
],
totalOverdue: // sum of all invoice.blanceDue of all clients if overdue in the requested time frame
}
request {
accessToken:
email: // email of accountant
}
response {
exists: boolean
}
request = {
startMonth:
endMonth:
quantity: // number
}
Note: startMonth is given relative to current month. For example if current month is 11 and startMonth = 5 then absolute startMonth = 6 ("June"). Same way endMonth is also given relative to currentMonth. Eg: endMonth = 2, then absolute endMonth = 9 ("September"). If currentMonth - startMonth is negative, cycle back to previous year month.
Note: quantity is number of clients returned in response ordered by sum of invoice.balanceDue associated with them.
response = {
revenue: [
{client: // name of client
revenue: // sum of invoice.blanceDue in that time frame
}
],
totalRevenue: // sum of all invoice.balanceDue of all clients in the requested time frame
}
Add a functionality to user input form to add multiple address line fields.
Create /auth/login route on database server.
Method: Post
accessToken: String
email: String
password: String (plain text)
status: number (click here for reference)
user: Object (of type User)**
err: String
** user format
{
name: "",
email: "",
company: //complete company data
token: ""
}
user.email + currentTime
if accessToken doesn't matches: Authorisation error
if user exists: send details and token
if user doesn't exist: Invalid email address error
if user exist and password doesn't match: Invalid password error
request: {
category: // string value
}
response: {
// success or failure
}
request = {
}
response = {
categories: [] // array of all categories name only
}
Create /auth/signup route on database server.
Method: Post
accessToken: String
company: Object (type company)
Company object specification
{
company: {
name:
countryCode:
phone:
email:
address: {}
currency:
datefmt:
taxrate:
accountants: ['Head', 'Client', 'Expense', 'General']
profilesCreated: // length of accountants array
}
headAcc: {
// Details of Head accountant including password
}
clientAcc: {
}
expenseAcc: {
}
generalAcc: {
}
}
headAcc: {
accountantType: 'Head'
firstName:
lastName:
countryCode:
phone:
email:
address: {
address1:
city:
state:
country:
pincode:
},
password:
}
Note: headAcc, clientAcc etc will only be present if included in accountants array inside company
status: number (click here for reference)
token: String (encrypted) (for Head Accountant)
err: String
headAccountant.email + currentTime
if accessToken doesn't matches: Authorisation error
if userToken already exist: user already logged in error
if any data already present in database: Already present error
Create a database the contains the following values for user completion.
Countries
Currencies
Phone area code
Supported Date Formats
Famous Business Quotes (to display on dashboard)
Instead of hard coding MySQL settings provide setting value through environment variable loaded from .env file in root folder. Django-environ should be used to load environment variables from .env file located in root folder and setting values supplied to settings
request = {
client: {
firstName:
lastName:
countryCode:
phone:
email:
address: {},
lateFeeRate:
dayLimit:
}
}
response: {
// Success or failure
}
request: {
accessToken:
token:
quantity: // Number of last clients
}
NOTE: Send latest quantity number of clients
response: {
clients: [
// array of clients
]
}
NOTE client should be returned with id as specified in url
request = {
months: // Latest time frame for which invoices are to be send. Num between (1-12)
}
response = {
client : {
// All client information
invoices: [] // array of invoices for last 'months' months as requested
}
}
request = {
client: {
firstName:
lastName:
countryCode:
phone:
email:
address: {},
lateFeeRate:
dayLimit:
}
}
response = {
// Success or failure
}
request: {
accessToken:
token:
clients: [2, 3, 5] // array containing all the ids of clients to be deleted
}
response: {
// success or failure
}
request : {
accessToken:
token:
vendor: {
name:
email:
phone:
address: {}
}
}
request: {
accessToken:
token:
}
NOTE: send all vendor names only
respone: {
vendors: [] // array of vendor names only
}
Add a navbar logo hover animation
request = {
startMonth:
endMonth:
}
Note: startMonth is given relative to current month. For example if current month is 11 and startMonth = 5 then absolute startMonth = 6 ("June"). Same way endMonth is also given relative to currentMonth. Eg: endMonth = 2, then absolute endMonth = 9 ("September"). If currentMonth - startMonth is negative, cycle back to previous year month.
response: {
revenue: // Total revenue calculated
}
**Calculations: **
Total of invoice.balaceDue for number of months passed in request
request = {
startMonth:
endMonth:
}
response: {
overdue: // Total overdue calculated
}
Calculations:
Total of invoice.balanceDue if currentDate - invoice.date (in days) > invoice.client.dayLimit
Add bulma progress bar to initial creation process. From company create to all accountants creation.
request: {
name: // company name
phone: // company phone
email: // company email
accessToken: // accessToken
}
response: {
nameExists: boolean
phoneExists: boolean
emailExists: boolean
}
request = {
startMonth:
endMonth:
quantity: // number
}
Note: startMonth is given relative to current month. For example if current month is 11 and startMonth = 5 then absolute startMonth = 6 ("June"). Same way endMonth is also given relative to currentMonth. Eg: endMonth = 2, then absolute endMonth = 9 ("September"). If currentMonth - startMonth is negative, cycle back to previous year month.
Note: quantity is number of vendors returned in response ordered by sum of expense.amount associated with them.
response = {
expense: [
{vendor: // name of vendor
expense: // sum of expense.amount in that time frame
}
],
totalExpense: // sum of all expense.amount of all vendors in the requested time frame
}
request = {
expense: {
category:
date: // date of expense
vendor:
description:
amount:
},
datefmt:
}
response: {
// Success or failure
}
request: {
accessToken:
token:
quantity: // Number of last expense
}
NOTE: Send latest quantity number of expenses
response: {
expenses: [
// array of expenses
]
}
NOTE expense should be returned with id as specified in url
request = {
}
response = {
expense : {
// All expense details
}
}
request = {
expense: {
category:
date: // date of expense
vendor:
Description:
amount:
},
datefmt:
}
}
response = {
// Success or failure
}
request: {
accessToken:
token:
clients: [2, 3, 5] // array containing all the ids of expenses to be deleted
}
response: {
// success or failure
}
request: {
accessToken:
token:
invoice:
{
id: invoiceId,
clientId:
date:
amountDue:
amountPaid:
total:
balanceDue:
items: [
{
item:
description:
rate:
quantity:
price:
},
],
notes
},
datefmt: // Date format
}
response: {
// success or failure
}
request {
accessToken:
token:
}
NOTE: Sends invoice with given id
response: {
invoice: {
client: {
// complete client details
},
// complete invoice details
}
}
request: {
accessToken:
token:
quantity: // Number of last invoices
}
NOTE: Send latest quantity number of invoices
response: {
invoices: [
// array of invoices
]
}
request: {
accessToken:
token:
invoices: [2, 3, 5] // array containing all the ids of invoices to be deleted
}
response: {
// success or failure
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.