Web Application for Accounting

 Why this application? Zoho that we use for invoicing and calculation of quotes has a very limited mechanism to contribute expenses. There is no way to automatically upload bank transactions per bank account, thus making costs and income not easy for accountants to find. Here are costs per project.



Then for another app I use quickbooks and there is a mechanism



But he asks for a connection with the bank or uploading a file and the format of the file is not correct..

Not working with Belgium banks KBC Brussel 


And even if you got this functionality to work. You have no opportunity to




Then we have a very complicated import system for expenses that we have to categorize as Income, Fixed asset, Expenses. However, there is no possibility to provide these transactions with a file of an Income or Expenses..

We really need to have a simple system to deliver accounting, to our Belgium college. 

Because our accounting gets more complicated every quarter.

And that is really invoices aimed at accountants and tax authorities. Maybe we will also create a command later that will add certain categories to costs and income, but at the moment I only have a system as soon as possible where I link bank and card transactions with invoices from different suppliers.

Simple system should be feasible. That's really a highlight for it now. Because accounting takes too much time. Multiple files must also be possible with a transaction for cars because there is CMR and proof that VAT is valid, etc. Also the communication with the customer. Photo of email exchange in Doc or screenshot format. In this way we can have a real accounting oriented application that will help in my small business management.


For accounting in Belgium in several other countries I have a semi-automatic system with which I can upload a file with transfers and then with every transfer a record or object is automatically created and then with this record I can upload an invoice purchase or sale. That will then be divided into three folders in the filesystem and so I can download a zip and print it.

Q12022 of 01.2022 

  • Bank

  • Sale

  • Expense 




Then I can also give access to these files to the bookkeeper and download the print if it needs a backup system for the cycle. Cycle
In Bulgaria that is monthly in Belgium every 3 months.

We must be able to search in this system by filtering per year, per quarter or per month.
An account is therefore 1 company. Or the whole app is a business. So that it can grow to thousands of records and transactions. Maybe I can make it open source. (keyword bookkeeper is about 5k)

So model should look like:

Period

     Name (Quarter Q1 same as root folder in the future)


PaymentMethod

Type (Visa, Master, …)

Number (IBAN)

BIC



Bank Transaction

Unik key (date, amount, account of counterparty)

Key bank account

Key Period

Currencies

Amount

Etc.. See bank export file

Description entire record in text format

Type (Sales, Expenses, Fixed asset, Stock cars)



File (several files with a bank transaction possible)

Key Bank Transaction (No cash operations, cash must always be in the account)

File

Remark

 

Create correct folder during upload? 

https://docs.djangoproject.com/en/4.1/topics/http/file-uploads/ 

https://docs.djangoproject.com/en/4.1/ref/models/fields/#django.db.models.FileField 



upload_to may also be a callable, such as a function. This will be called to obtain the upload path, including the filename. This callable must accept two arguments and return a Unix-style path (with forward slashes) to be passed along to the storage system. The two arguments are:


For example:

def user_directory_path(instance, filename):

    # file will be uploaded to MEDIA_ROOT/user_<id>/<filename>

    return 'user_{0}/{1}'.format(instance.user.id, filename)


class MyModel(models.Model):

    upload = models.FileField(upload_to=user_directory_path)




GUI is Admin with standard forms


List of all transactions


Only I need to extend admin filters with multiple file uploads.


class BookInline(admin.TabularInline):

model = Book

formset = # Yours


class AuthorAdmin(admin.ModelAdmin):

inlines = [ BookInline, ]


https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.StackedInline 





So in this way you can upload files innline to a transaction and add a proportion to a transaction if the saved then count of docs is saved as well. This way we see documents for every transaction.


Commands





Import files per period.


Upload files directly in the correct file system structure for use or upload in 1 folder. Or generate correct folders with a command.

So we will first try to save it in the correct format in the correct file system folders.




Action plan


Create a repository in bitbucket so that we can commit all accounting files there as well and all changes to the database are saved as well.

On the local computer add all code and admin. Make 1 quarter so we can test thoroughly on the local computer.

Online under accounting.online solutions. Publish so the accountant could also log in and look up something if needed.



Keyword analysis and business opportunities for this project.

We first see if it works with it and switch a bit if yes, then we can think about business model and automation for these accounts.


That could become a magnetization mechanism for my business blog.


Keywords for domain,  this web app in open source?



Accounting


Myaccounting.software

Accounting.codes


I have found two domains that would be good for this application. Accounting in general has over 1 million visitors per month in worldwide English searches.


Maybe I could use other words like.

accounting opensource

open source accounting software

accounting opensource

open source quickbooks 


Quickbooks is 1.5 million searches. quickbooks online Trying to port to open source?

 

Domains that are free. Could be registered.


Quickbook.be

Quickbook.site

Quick-book.online 



So we have a domain to set up this site separately and for each company I can create a separate subdomain and maybe extend it so that it is used by me because invoices software I use is easy to clash with. Maybe I can make a little money with it. Make it free and only add ads? Could be..

Oh, great that's only 2 Euros. If it works well, it can be extended next year.. But this keyword can really become a business. If that becomes an application with subdomains and each company has its own database instance, etc. Make it for my own company and for everyone who wants it..








Django project method


python3 -m django starter project quickbook


python3 manage.py startapp accountingperiod


I will not go into details further. I can open source this project later if it runs well for us and becomes useful to us and maybe to others. Currently source code is only in a private repository.



Action plan for the first VAT period

=============================

Create a command that will import KBC Brussels files into System account

Export of Visa

Mastercard Export

Go through one behind the other provider and upload files for transactions.

Download on my computer ( in my previous old system )

Upload with the transaction and see how correct files are stored in existing system.

Start with the car business because that is where the largest invoices are.

- Purchase sale


Add comments to the transactions and various files TextField

Create an elasticsearch instance that allows me to search for files that I index and transfer transaction information. But I can search in comments on these transactions and or files. No, this is not really necessary because too much technology for such a project, possibilities for installation. It will be better if we create models.TextField from the explanation of the transaction object then no need to search between different models. We search in 1 model transaction.

Model:



name = models.CharField(verbose_name=_("Name"), max_length=120, db_index=True, help_text="Amount - Date - PymentMethod Id ", unique=True)

statement_of_expenditure = models.CharField(verbose_name=_("Statement of expenditure"), max_length=120, null=True, blank=True, help_text="juli 2021")

statement_number = models.CharField(verbose_name=_("Statement number"), max_length=120, help_text="2021107", null=True, blank=True)

accounting_period = models.ForeignKey('AccountingPeriod.AccountingPeriod', related_name='accounting_period', on_delete=models.CASCADE)

paymentmethod = models.ForeignKey('PaymentMethod.PaymentMethod', related_name='paymentmethod', on_delete=models.CASCADE)

transaction_date = models.DateTimeField()

settlement_date = models.DateTimeField()

transaction_type = models.CharField(max_length=64, choices=TRANSACTION_TYPE, default=DEFAULT_TYPE)

amount = models.DecimalField(max_digits=8, decimal_places=2, default=0)

credit = models.DecimalField(max_digits=8, decimal_places=2, default=0)

debet = models.DecimalField(max_digits=8, decimal_places=2, default=0)

coin = models.CharField(verbose_name=_("Coin"), max_length=120, db_index=True, help_text="Euro", default="Euro")

course = models.DecimalField(max_digits=8, decimal_places=2, default=1)

amount_in_eur = models.DecimalField(max_digits=8, decimal_places=2, default=1)

trader = models.CharField(verbose_name=_("Trader"), max_length=120, help_text="DNH*GO DADDY EUROPE EU", null=True, blank=True)

location = models.CharField(verbose_name=_("Location"), max_length=120, help_text="GODADDY.COM", null=True, blank=True)

country = models.CharField(verbose_name=_("Country"), max_length=120, help_text="Verenigd Koninkrijk, Belgium ...", null=True, blank=True)

explanation = models.TextField(verbose_name=_("explanation"), help_text="Transaction description BIC, address, All information about Invoice to search in transactions ", null=True, blank=True)



Data for import.

[0 ’Rekeningnummer',

 1 Rubrieknaam',

 2 ‘Naam',

 3 Munt',

 4 ‘Afschriftnummer',

 5’ Datum',

 6’ Omschrijving',

 7’ Valuta',

 8 ‘Bedrag',

 9’ Saldo',

 10 credit',

 11 ‘debet',

 12 ‘rekeningnummer tegenpartij',

 13 ‘BIC tegenpartij',

 14 Naam tegenpartij',

 15 Adres tegenpartij',

 16 gestructureerde mededeling',

 17 Vrije mededeling']


Credit card Mastercard


[     0. ‘Kredietkaart nummer',

  1. 'kaarthouder',

  2. 'uitgavenstaat',

  3. 'datum verrichting',

  4. 'Datum verrekening',

  5.  'bedrag',

  6. 'credit',

  7. 'debet',

  8. 'munt',

  9. 'koers',

  10. 'bedrag in EUR',

  11. 'Kosten op verrichting',

  12. 'Handelaar',

  13. 'locatie',

  14. 'land',

  15. 'toelichting']


For prepaid is identical structure to parser so I can just parse these two types as is.


[0.'kredietkaart',

 1.'kaarthouder',

 2.'uitgavenstaat',

 3.'datum verrichting',

 4'Datum verrekening',

 5.'bedrag',

 6.'credit',

 7.'debet',

 8.'munt',

 9.'koers',

 10.'bedrag in EUR',

 11.'Kosten op verrichting',

 12.'Handelaar',

 13.'locatie',

 14;'land',

 15.'toelichting']

 

I have created small application for accounting only models, import commands an admin UI in django.. 

All that in in number of hours.. Not in one day but spread over a week.  

For example, it will install further tests so that it continues to work with subdomains and hetzner cloud for small applications provisionally in filesystem database.

What an excellent thing I have made. That is very excellent. Now I can find everything and put all invoices in one place. For example, I have a prepaid account and multiple invoices for 1 bank transfer. 

 Or sometimes 1 invoice and multiple transfers. All that is simple te register and can be found without problems. 


Order paid on:
2022-08-23

Method of payment used:
Prepaid account



 



I created this website to link invoices to bank transactions and to be able to store all information about the company in 1 place and to display statistics in beautiful reports for clarity. At the moment I have made a small web app to simplify the process of VAT declaration a bit. Because we lose time and sometimes even documents or transactions are hard to find.. So, in our database with filters and full text search bar I can search all transactions from all bank accounts in 1 mouse click and link invoices so that they are in 10 years also easy to find. Easy to find and easy to download. This database also has an automatic backup system and document hierarchy is managed with a subversion mechanism that allows me to go into document history. The Centralised document management app.

About transactions




In this view we are looking for transactions and if you have extra staff rights you can add, edit or delete records. Currently you only have rights to view transactions.





So, you can hide the menu so you have more places to search and see..

Purchase ( expenses )





Costs are all filled in and have an invoice or proof of payment.



You can use links to download a file.

But you can also see which document is in which folder and which transaction belongs to which transaction if you want to continue with a zip file. Because in zip I saved exactly the same files.
 


Waiting list


Our nightmare is the waiting list of invoices that have no documents, have been requested or have none at all or a weird unrecognised transaction.. This time I have 16 documents to process. See a commentary at the bottom of each transaction for more information about it.


So if waiting list documents get an invoice then they move to expenses or if nothing gets they will get a status for Current / Private account..

 

Comments