c11.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import os
  2. import re
  3. import time
  4. from datetime import datetime
  5. from enum import Enum
  6. from itertools import chain
  7. from pathlib import Path
  8. import typer
  9. import cognos7.mdl_convert
  10. import cognos11
  11. import config
  12. from pdf import pdf_merge, pdf_test
  13. def flatten_chain(list_of_lists):
  14. return list(chain.from_iterable(list_of_lists))
  15. class ExportFormat(Enum):
  16. PDF = "PDF"
  17. XML = "XML"
  18. app = typer.Typer()
  19. cfg = config.Config()
  20. @app.command()
  21. def export(folder="", overwrite="0"):
  22. exp = cognos11.c11_export(cfg)
  23. exp.export_folder(folder, overwrite=overwrite != "0")
  24. @app.command()
  25. def reportoutput(folder="", mailcsv="", exp=None):
  26. if re.match(r"^[\d\.\-\/]+$", folder):
  27. return reportoutput_by_date(folder, mailcsv)
  28. if exp is None:
  29. exp = cognos11.c11_export(cfg)
  30. # folder2 = exp.get_folder(folder)
  31. req_plan = exp.get_folder_pdf_request_plan(folder)
  32. merge_group = exp.get_merge_group(req_plan)
  33. exp.template(req_plan, merge_group)
  34. req_plan_filtered = exp.filter_request_plan(req_plan, f"{cfg.xml_dir}\\{mailcsv}")
  35. req_plan_flat = flatten_chain(req_plan_filtered)
  36. print("Exportiere Reports...")
  37. for i in range(1, 6):
  38. print(f"Durchlauf {i}...")
  39. req_plan_flat = exp.execute_request_plan(req_plan_flat)
  40. if not req_plan_flat:
  41. break
  42. time.sleep(20)
  43. exp.api.login()
  44. if req_plan_flat:
  45. print("!! Fehler: Einige Reports konnten nicht exportiert werden !!")
  46. for report_req in req_plan_flat:
  47. print(Path(report_req.filename).relative_to(cfg.cognos11.reportoutput_dir))
  48. if mailcsv == "":
  49. pdf_test.missing_data(f"{cfg.cognos11.reportoutput_dir}\\{folder}")
  50. pdf_merge.pdf_merge_files(merge_group)
  51. cognos11.get_converted_jobs(cfg)
  52. # pdf_merge.merge_reports_in_folder(self.cfg, folder2)
  53. def reportoutput_by_date(date_str: str, mailcsv: str = "") -> None:
  54. current_date = None
  55. if re.match(r"^\d{4}-\d{2}-\d{2}$", date_str):
  56. current_date = datetime.strptime(date_str, "%Y-%m-%d")
  57. elif re.match(r"^\d{2}\.\d{2}\.\d{4}$", date_str):
  58. current_date = datetime.strptime(date_str, "%d.%m.%Y")
  59. elif re.match(r"^\d{2}\/\d{2}\/\d{4}$", date_str):
  60. current_date = datetime.strptime(date_str, "%m/%d/%Y")
  61. if current_date is None:
  62. print(f"Ungültiges Datumsformat: {date_str}")
  63. return
  64. exp = cognos11.c11_export(cfg)
  65. folders = [f["name"] for f in exp.api.get_folders()]
  66. # for f in folders:
  67. # print(f)
  68. weekdays = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
  69. current_weekday = weekdays[current_date.weekday()]
  70. print(f"Berichte für {current_weekday}, {current_date.strftime('%d.%m.%Y')}...")
  71. # taeglich
  72. daily_interval = ["Mo-Fr", "Mo-Sa", "Mo-So", "Di-So"]
  73. daily_interval_special = {
  74. "Mo": ["Mo-Fr", "Mo-Sa", "Mo-So"],
  75. "Sa": ["Mo-Sa", "Di-So"],
  76. "So": ["Mo-So", "Di-So"]
  77. }
  78. current_interval = daily_interval_special.get(current_weekday, daily_interval)
  79. for c in current_interval:
  80. search = f"Team Content/ReportOutput/taeglich/{c}"
  81. for f in folders:
  82. if search in f:
  83. print(f)
  84. # woechentlich
  85. search = f"Team Content/ReportOutput/woechentlich/{current_weekday}"
  86. for f in folders:
  87. if search in f:
  88. print(f)
  89. # 14-taeglich
  90. week = (int(current_date.strftime("%W")) % 2) + 1
  91. search = f"Team Content/ReportOutput/14-taeglich/{current_weekday}{week}"
  92. for f in folders:
  93. if search in f:
  94. print(f)
  95. # monatlich
  96. day_of_month = current_date.strftime("%d")
  97. search = f"Team Content/ReportOutput/monatlich/{day_of_month}"
  98. for f in folders:
  99. if search in f:
  100. print(f)
  101. @app.command()
  102. def merge(folder="", config=""):
  103. folder2 = cognos11.c11_export.get_folder(folder)
  104. config_json = pdf_merge.get_config_json(config, cfg.cognos11.config_dir)
  105. pdf_merge.merge_reports_in_folder(cfg, folder2, config_json)
  106. @app.command()
  107. def errors():
  108. exp = cognos11.c11_export(cfg)
  109. exp.export_errors()
  110. @app.command()
  111. def create(path: str):
  112. cognos11.c11_create(cfg).create_path(path)
  113. @app.command()
  114. def template():
  115. exp = cognos11.c11_export(cfg)
  116. cognos11.get_converted_jobs(cfg)
  117. req_plan = exp.get_folder_pdf_request_plan("")
  118. merge_group = exp.get_merge_group(req_plan)
  119. exp.template(req_plan, merge_group)
  120. @app.command()
  121. def mailtemplate():
  122. return template()
  123. @app.command()
  124. def mdlconvert(mdl_file):
  125. cognos7.mdl_convert.convert_file(mdl_file)
  126. source = mdl_file[:-4] + ".json"
  127. target = cfg.cognos11.specs_dir + "/../DataModel/" + Path(source).name
  128. os.makedirs(os.path.dirname(target), exist_ok=True)
  129. Path(target).unlink(missing_ok=True)
  130. os.rename(source, target)
  131. @app.command()
  132. def deploy():
  133. cube_out = cfg.system_dir + "\\Cube_out"
  134. cubes_dir = cfg.portal_dir + "\\Cubes"
  135. cognos11.deploy(cube_out, cubes_dir)
  136. @app.command()
  137. def users():
  138. api = cognos11.c11_api(cfg).login()
  139. ns = api.get_users(cfg.cognos11.config_dir)
  140. api.export_users(ns, cfg.cognos11.config_dir)
  141. api.show_users(ns)
  142. @app.command()
  143. def version():
  144. with open(cfg.cognos11.server_dir + "\\cmplst.txt", "r") as frh:
  145. for line in frh.readlines():
  146. match = re.search(r"Manifest=casrv-manifest-(.*).json", line)
  147. if match:
  148. ver = match.group(1)
  149. print("Cognos Version: " + ver)
  150. if not ver.startswith("11.1.7") and not ver.startswith("12."):
  151. print("!! Fehler: Cognos Version ist veraltet !!")
  152. return
  153. if __name__ == "__main__":
  154. app()
  155. # reportoutput()
  156. # reportoutput("2023-10-02")