diff --git a/accounting/management/commands/accounting_sample.py b/accounting/management/commands/accounting_sample.py new file mode 100644 index 0000000..addb1b4 --- /dev/null +++ b/accounting/management/commands/accounting_sample.py @@ -0,0 +1,190 @@ +# The accounting application of the Mia project. +# by imacat , 2020/7/22 + +# Copyright (c) 2020 imacat. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""The command to populate the database with sample accounting data. + +""" +from django.core.management import BaseCommand, CommandParser +from django.utils.timezone import localdate, timedelta + +from accounting.models import Record, Account, Transaction +from mia_core.models import User +from mia_core.utils import new_sn + + +class Command(BaseCommand): + """Populates the database with sample accounting data.""" + help = "Populates the database with sample accounting data." + + def add_arguments(self, parser): + """Adds command line arguments to the parser. + + Args: + parser (CommandParser): The command line argument parser. + """ + pass + + def handle(self, *args, **options): + """Runs the command. + + Args: + *args (list[str]): The command line arguments. + **options (dict[str,str]): The command line switches. + """ + user = User.objects.get(login_id="imacat") + + Account(sn=new_sn(Account), code="1", title_zh_hant="資產", + title_en="assets", title_zh_hans="资产", created_by=user, + updated_by=user).save() + Account(sn=new_sn(Account), code="2", title_zh_hant="負債", + title_en="liabilities", title_zh_hans="负债", created_by=user, + updated_by=user).save() + Account(sn=new_sn(Account), code="3", title_zh_hant="業主權益", + title_en="owners’ equity", title_zh_hans="业主权益", + created_by=user, updated_by=user).save() + Account(sn=new_sn(Account), code="4", title_zh_hant="營業收入", + title_en="operating revenue", title_zh_hans="营业收入", + created_by=user, updated_by=user).save() + Account(sn=new_sn(Account), code="5", title_zh_hant="營業成本", + title_en="operating costs", title_zh_hans="营业成本", + created_by=user, updated_by=user).save() + Account(sn=new_sn(Account), code="6", title_zh_hant="營業費用", + title_en="operating expenses", title_zh_hans="营业费用", + created_by=user, updated_by=user).save() + Account(sn=new_sn(Account), code="7", title_zh_hant="營業外收入及費用", + title_en=("non-operating revenue and expenses, " + "other income (expense)"), + title_zh_hans="营业外收入及费用", created_by=user, + updated_by=user).save() + Account(sn=new_sn(Account), code="8", title_zh_hant="所得稅費用(或利益)", + title_en="income tax expense (or benefit)", + title_zh_hans="所得税费用(或利益)", created_by=user, + updated_by=user).save() + Account(sn=new_sn(Account), code="9", title_zh_hant="非經常營業損益", + title_en="nonrecurring gain or loss", title_zh_hans="非经常营业损益", + created_by=user, updated_by=user).save() + + Account(sn=new_sn(Account), parent=Account.objects.get(code="3"), + code="33", title_zh_hant="保留盈餘(或累積虧損)", + title_en="retained earnings (accumulated deficit)", + title_zh_hans="保留盈余(或累积亏损)", created_by=user, + updated_by=user).save() + Account(sn=new_sn(Account), parent=Account.objects.get(code="33"), + code="335", title_zh_hant="未分配盈餘(或累積虧損)", + title_en=("retained earnings-unappropriated " + "(or accumulated deficit)"), + title_zh_hans="未分配盈余(或累积亏损)", created_by=user, + updated_by=user).save() + Account(sn=new_sn(Account), parent=Account.objects.get(code="335"), + code="3351", title_zh_hant="累積盈虧", + title_en="accumulated profit or loss", title_zh_hans="累积盈亏", + created_by=user, updated_by=user).save() + Account(sn=new_sn(Account), parent=Account.objects.get(code="335"), + code="3353", title_zh_hant="本期損益", + title_en="net income or loss for current period", + title_zh_hans="本期损益", created_by=user, updated_by=user).save() + + Account(sn=new_sn(Account), parent=Account.objects.get(code="1"), + code="11", title_zh_hant="流動資產", title_en="current assets", + title_zh_hans="流动资产", created_by=user, updated_by=user).save() + Account(sn=new_sn(Account), parent=Account.objects.get(code="11"), + code="111", title_zh_hant="現金及約當現金", + title_en="cash and cash equivalents", title_zh_hans="现金及约当现金", + created_by=user, updated_by=user).save() + Account(sn=new_sn(Account), parent=Account.objects.get(code="111"), + code="1111", title_zh_hant="庫存現金", + title_en="petty cash/revolving funds", title_zh_hans="库存现金", + created_by=user, updated_by=user).save() + Account(sn=new_sn(Account), parent=Account.objects.get(code="111"), + code="1112", title_zh_hant="零用金/週轉金", title_en="cash on hand", + title_zh_hans="零用金/周转金", created_by=user, + updated_by=user).save() + Account(sn=new_sn(Account), parent=Account.objects.get(code="6"), + code="62", title_zh_hant="管理及總務費用", + title_en="general & administrative expenses", + title_zh_hans="管理及总务费用", created_by=user, + updated_by=user).save() + Account(sn=new_sn(Account), parent=Account.objects.get(code="62"), + code="627", title_zh_hant="管理及總務費用", + title_en="general & administrative expenses", + title_zh_hans="管理及总务费用", created_by=user, + updated_by=user).save() + Account(sn=new_sn(Account), parent=Account.objects.get(code="627"), + code="6272", title_zh_hant="伙食費", title_en="meal (expenses)", + title_zh_hans="伙食费", created_by=user, updated_by=user).save() + + transaction = Transaction(sn=new_sn(Transaction), + date=localdate() - timedelta(days=2), ord=1, + created_by=user, updated_by=user) + transaction.save() + transaction.record_set.all() + transaction.record_set.create(sn=new_sn(Record), is_credit=False, + ord=1, + account=Account.objects.get(code="6272"), + summary="午餐", amount=1200, + created_by=user, updated_by=user) + transaction.record_set.create(sn=new_sn(Record), is_credit=False, + ord=2, + account=Account.objects.get(code="6272"), + summary="飲料", amount=1300, + created_by=user, updated_by=user) + transaction.record_set.create(sn=new_sn(Record), is_credit=True, ord=1, + account=Account.objects.get(code="1111"), + amount=2500, created_by=user, + updated_by=user) + transaction.record_set.all() + + transaction = Transaction(sn=new_sn(Transaction), + date=localdate() - timedelta(days=1), ord=1, + created_by=user, updated_by=user) + transaction.save() + transaction.record_set.all() + transaction.record_set.create(sn=new_sn(Record), is_credit=False, + ord=1, + account=Account.objects.get(code="6272"), + summary="午餐", amount=900, + created_by=user, updated_by=user) + transaction.record_set.create(sn=new_sn(Record), is_credit=False, + ord=2, + account=Account.objects.get(code="6272"), + summary="飲料", amount=1400, + created_by=user, updated_by=user) + transaction.record_set.create(sn=new_sn(Record), is_credit=True, ord=1, + account=Account.objects.get(code="1111"), + amount=2300, created_by=user, + updated_by=user) + transaction.record_set.all() + + transaction = Transaction(sn=new_sn(Transaction), date=localdate(), + ord=1, created_by=user, updated_by=user) + transaction.save() + transaction.record_set.all() + transaction.record_set.create(sn=new_sn(Record), is_credit=False, + ord=1, + account=Account.objects.get(code="6272"), + summary="午餐", amount=1500, + created_by=user, updated_by=user) + transaction.record_set.create(sn=new_sn(Record), is_credit=False, + ord=2, + account=Account.objects.get(code="6272"), + summary="飲料", amount=600, + created_by=user, updated_by=user) + transaction.record_set.create(sn=new_sn(Record), is_credit=True, ord=1, + account=Account.objects.get(code="1111"), + amount=2100, created_by=user, + updated_by=user) + transaction.record_set.all()