simplier report storing
This commit is contained in:
@@ -7,6 +7,7 @@ import logging
|
||||
from flask_sqlalchemy import BaseQuery
|
||||
from sqlalchemy.dialects import mysql
|
||||
from sqlalchemy.exc import OperationalError, StatementError
|
||||
from sqlalchemy.types import JSON
|
||||
from time import sleep
|
||||
import random
|
||||
import string
|
||||
@@ -983,20 +984,15 @@ class Server(db.Model):
|
||||
class ItemReports(db.Model):
|
||||
__tablename__ = 'item_reports'
|
||||
|
||||
item = db.Column(
|
||||
db.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False
|
||||
)
|
||||
|
||||
count = db.Column(
|
||||
db.Integer(),
|
||||
data = db.Column(
|
||||
JSON(),
|
||||
nullable=False
|
||||
)
|
||||
|
||||
date = db.Column(
|
||||
db.Date(),
|
||||
primary_key=False,
|
||||
primary_key=True,
|
||||
autoincrement=False
|
||||
)
|
||||
|
||||
def save(self):
|
||||
@@ -1007,4 +1003,3 @@ class ItemReports(db.Model):
|
||||
def delete(self):
|
||||
db.session.delete(self)
|
||||
db.session.commit()
|
||||
|
||||
|
@@ -22,8 +22,15 @@ def items_by_date(date):
|
||||
return render_template('reports/items/by_date.html.j2', items=items, date=date)
|
||||
|
||||
|
||||
@scheduler.task("cron", id="gen_item_report", hour=3)
|
||||
@scheduler.task("cron", id="gen_item_report", hour=7)
|
||||
def gen_item_report():
|
||||
date = datetime.date.today().strftime('%Y-%m-%d')
|
||||
report = ItemReports.query.filter(ItemReports.date==date).first()
|
||||
|
||||
# Only one report per day
|
||||
if report != None:
|
||||
return f"Report Already Generated for {date}"
|
||||
|
||||
char_xmls = CharacterXML.query.join(
|
||||
CharacterInfo,
|
||||
CharacterInfo.id==CharacterXML.id
|
||||
@@ -31,7 +38,9 @@ def gen_item_report():
|
||||
Account,
|
||||
CharacterInfo.account_id==Account.id
|
||||
).filter(Account.gm_level < 3).all()
|
||||
date = datetime.date.today().strftime('%Y-%m-%d')
|
||||
|
||||
report_data={}
|
||||
|
||||
for char_xml in char_xmls:
|
||||
character_json = xmltodict.parse(
|
||||
char_xml.xml_data,
|
||||
@@ -40,19 +49,10 @@ def gen_item_report():
|
||||
for inv in character_json["obj"]["inv"]["items"]["in"]:
|
||||
if "i" in inv.keys() and type(inv["i"]) == list and (int(inv["attr_t"])==0 or int(inv["attr_t"])==0):
|
||||
for item in inv["i"]:
|
||||
entry = ItemReports.query.filter(
|
||||
ItemReports.item == int(item["attr_l"]) and \
|
||||
ItemReports.date == date
|
||||
).first()
|
||||
if entry:
|
||||
entry.count = entry.count + int(item["attr_c"])
|
||||
entry.save()
|
||||
if item["attr_l"] in report_data:
|
||||
report_data[item["attr_l"]] = report_data[item["attr_l"]] + int(item["attr_c"])
|
||||
else:
|
||||
new_entry = ItemReports(
|
||||
item=int(item["attr_l"]),
|
||||
count=int(item["attr_c"]),
|
||||
date=date
|
||||
)
|
||||
new_entry.save()
|
||||
report_data[item["attr_l"]] = int(item["attr_c"])
|
||||
|
||||
return "Done"
|
||||
|
||||
return f"Generated Report for {date}"
|
||||
|
Reference in New Issue
Block a user