main.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. from datetime import datetime
  2. import json
  3. import os
  4. from flask import Flask, request
  5. from src.models.transaction_model import transaction_model
  6. from src.errors.argument_exception import argument_exception
  7. from src.export.exporter_factory import exporter_factory
  8. from src.settings.settings_manager import settings_manager
  9. from src.logic.start_factory import start_factory
  10. from src.storage.storage import storage
  11. from src.storage.storage_service import storage_service
  12. setman = settings_manager()
  13. start = None
  14. strg = None
  15. app = Flask(__name__)
  16. @app.route("/api/export/<storage_key>/<format>", methods=["GET"])
  17. def get_export_format(storage_key: str, format: str):
  18. global setman, start, strg
  19. try:
  20. exp = exporter_factory().create(format)
  21. except argument_exception as e:
  22. return "Wrong format: " + e.error.error_text, 400
  23. if storage_key not in strg.data:
  24. return "Key not found", 404
  25. return app.response_class(
  26. response=exp.export_by_key(storage_key),
  27. status=200,
  28. mimetype=exp.strategy.mimetype,
  29. )
  30. @app.route("/api/export/<storage_key>", methods=["GET"])
  31. def get_export(storage_key: str):
  32. global setman, start, strg
  33. format = setman.settings.export_format
  34. try:
  35. exp = exporter_factory().create(format)
  36. except argument_exception as e:
  37. return "Wrong format: " + e.error.error_text, 400
  38. if storage_key not in strg.data:
  39. return "Key not found", 404
  40. return app.response_class(
  41. response=exp.export_by_key(storage_key),
  42. status=200,
  43. mimetype=exp.strategy.mimetype,
  44. )
  45. @app.route("/api/export/rests", methods=["GET"])
  46. def get_rests():
  47. args = request.args
  48. if "start_period" not in args.keys() or "stop_period" not in args.keys():
  49. raise argument_exception("Нет дат!")
  50. start_date = datetime.strptime(args["start_period"], "%Y-%m-%d")
  51. stop_date = datetime.strptime(args["stop_period"], "%Y-%m-%d")
  52. service = storage_service(start.storage.data[storage.transaction_key()])
  53. result = service.create_turns_dt(strg, start_date, stop_date, strg)
  54. return storage_service.create_response(result, app)
  55. @app.route("/api/storage/<nomenclature_name>/turns")
  56. def get_nomens_rests(nomenclature_name):
  57. nomen = [
  58. nomen
  59. for nomen in start.storage.data[storage.nomenclature_key()]
  60. if nomen.name == nomenclature_name
  61. ]
  62. if len(nomen) == 0:
  63. return ""
  64. nomen = nomen[0]
  65. service = storage_service(start.storage.data[storage.transaction_key()])
  66. result = service.create_turns_nomen(strg, nomen)
  67. return storage_service.create_response(result, app)
  68. @app.route("/api/storage/<recipe_name>/debits")
  69. def debits_recipe(recipe_name):
  70. args = request.args
  71. if "storage" not in args:
  72. raise argument_exception("Не указан склад!")
  73. recipe = [
  74. recipe
  75. for recipe in start.storage.data[storage.recipe_key()]
  76. if recipe.name == recipe_name
  77. ]
  78. storage_ = [
  79. storage
  80. for storage in start.storage.data[storage.storage_key()]
  81. if storage.name == args["storage"]
  82. ]
  83. if len(recipe) == 0 or len(storage_) == 0:
  84. return ""
  85. recipe = recipe[0]
  86. storage_ = storage_[0]
  87. service = storage_service(start.storage.data[storage.transaction_key()])
  88. turns = service.create_turns(recipe, storage=storage_)
  89. service.take_recipe(recipe, turns, storage_, strg)
  90. return app.response_class(
  91. response=json.dumps({"success": True}),
  92. status=200,
  93. mimetype="application/json; charset=utf-8",
  94. )
  95. # Инициализация приложения
  96. def run():
  97. global setman, start, strg
  98. setman.open(os.path.dirname(__file__) + "/config/settings.json")
  99. strg = storage()
  100. start = start_factory(setman.settings, strg)
  101. start.create()
  102. start.create_transactions()
  103. app.run()
  104. if __name__ == "__main__":
  105. run()