Initial commit (Clean history)
This commit is contained in:
91
app/cob.py
Normal file
91
app/cob.py
Normal file
@@ -0,0 +1,91 @@
|
||||
from rest_framework import status
|
||||
from rest_framework.decorators import api_view
|
||||
from rest_framework.response import Response
|
||||
from app.models import *
|
||||
from django.db.models import F, Q, Count, Sum, FloatField
|
||||
from datetime import datetime, timedelta
|
||||
from django.db import close_old_connections
|
||||
|
||||
#==========================================================================================
|
||||
def account_book(system_date):
|
||||
for row in Internal_Account.objects.all():
|
||||
filter1 = {'date': system_date, 'account': row.id, 'type': 1}
|
||||
filter2 = {'date': system_date, 'account': row.id, 'type': 2}
|
||||
arr = Internal_Entry.objects.all().values('account').annotate(
|
||||
credit = Sum(F('amount'), filter=Q(**filter1), output=FloatField()),
|
||||
debit = Sum(F('amount'), filter=Q(**filter2), output=FloatField()),
|
||||
number_credit = Count(F('id'), filter=Q(**filter1), output=FloatField()),
|
||||
number_debit = Count(F('id'), filter=Q(**filter2), output=FloatField())
|
||||
)
|
||||
entry = next(iter(arr), None)
|
||||
book = Account_Book.objects.filter(system_date=system_date, account=row.id).first()
|
||||
if book:
|
||||
book.end_balance = row.balance
|
||||
book.update_time = datetime.now()
|
||||
if entry:
|
||||
book.credit = entry['credit']
|
||||
book.debit = entry['debit']
|
||||
book.number_credit = entry['number_credit']
|
||||
book.number_debit = entry['number_debit']
|
||||
book.save()
|
||||
else:
|
||||
previous_date = system_date - timedelta(days=1)
|
||||
previous = Account_Book.objects.filter(system_date=previous_date, account=row.id).first()
|
||||
start_balance = previous.end_balance if previous else 0
|
||||
book = Account_Book(system_date=system_date, account=row, current_date=datetime.now().date(), start_balance=start_balance,
|
||||
end_balance=row.balance, create_time=datetime.now(), update_time=datetime.now())
|
||||
if entry:
|
||||
book.credit = entry['credit']
|
||||
book.debit = entry['debit']
|
||||
book.number_credit = entry['number_credit']
|
||||
book.number_debit = entry['number_debit']
|
||||
book.save()
|
||||
|
||||
#==========================================================================================
|
||||
def run_cob():
|
||||
# close old connections
|
||||
close_old_connections()
|
||||
try:
|
||||
print(f'===START COB===: {str(datetime.now())}')
|
||||
mode = System_Setting.objects.filter(category='system', classify='mode', code='status').first()
|
||||
#set batch mode
|
||||
mode.detail = 'cob'
|
||||
mode.save()
|
||||
row = System_Setting.objects.filter(category='system', classify='current', code='date').first()
|
||||
system_date = row.detail
|
||||
sys_date = datetime.strptime(system_date, "%Y-%m-%d").date()
|
||||
current_date = datetime.now().date()
|
||||
#change next date
|
||||
if datetime.now().hour >= 23:
|
||||
current_date = current_date + timedelta(days=1)
|
||||
#diff days
|
||||
days = (sys_date - current_date).days
|
||||
while days <= 0:
|
||||
#batch log
|
||||
log = Batch_Log(system_date=sys_date, start_time=datetime.now(), status=Task_Status.objects.filter(code='running').first())
|
||||
log.save()
|
||||
# write account book
|
||||
account_book(sys_date)
|
||||
row.detail = str(sys_date)
|
||||
row.save()
|
||||
log.status = Task_Status.objects.filter(code='success').first()
|
||||
log.save()
|
||||
sys_date = sys_date + timedelta(days=1)
|
||||
days = (sys_date - current_date).days
|
||||
#return active mode
|
||||
mode.detail = 'active'
|
||||
mode.save()
|
||||
log.end_time = datetime.now()
|
||||
log.duration = int((log.end_time - log.start_time).total_seconds())
|
||||
log.task = Task_Status.objects.filter(code='success').first()
|
||||
log.save()
|
||||
print(f'===END COB===: {str(datetime.now())}')
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error RUN-COB: {e}")
|
||||
|
||||
#==========================================================================================
|
||||
@api_view(['GET', 'POST'])
|
||||
def close_of_business(request):
|
||||
run_cob()
|
||||
return Response(status = status.HTTP_200_OK)
|
||||
Reference in New Issue
Block a user