mazda_upload.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import json
  2. from dataclasses import dataclass
  3. from pathlib import Path
  4. from requests_oauthlib import OAuth2Session
  5. from mazda_export import convert_csv
  6. @dataclass
  7. class Token:
  8. access_token: str
  9. token_type: str
  10. refresh_token: str
  11. expires_in: int
  12. sub: str
  13. iss: str
  14. iat: int
  15. defaultDomain: str
  16. userGuid: str
  17. organisations: list[str]
  18. jti: str
  19. scope: list[str]
  20. expires_at: float
  21. @dataclass
  22. class MazdaConfig:
  23. domain: str
  24. webservice: str
  25. module: str
  26. auth_url: str
  27. token_url: str
  28. client_id: str
  29. client_secret: str
  30. username: str
  31. password: str
  32. dealer_number: str
  33. cfg_prod = MazdaConfig(
  34. domain="https://mapps.mazdaeur.com",
  35. webservice="/dogma-restapi-dms/api",
  36. module="/vehicles/workshop/order-report",
  37. auth_url="/oauth/authorize",
  38. token_url="/oauth/token",
  39. client_id="2F6FACF0-F216-FB26-868A-BAAF82890E62",
  40. client_secret="8scMw?34ecQT)M=7!C=LQ",
  41. username="mmd15972.globalcube2",
  42. password="fBYxJ!nfj)4?E3N",
  43. dealer_number="15972/MMD",
  44. )
  45. cfg_debug = MazdaConfig(
  46. domain="https://mappsacc.mazdaeur.com",
  47. webservice="/dogma-restapi-dms/api",
  48. module="/vehicles/workshop/order-report",
  49. auth_url="/oauth/authorize",
  50. token_url="/oauth/token",
  51. client_id="E7FC943B-B73F-F48E-B71A-419EA4CD4AC7",
  52. client_secret="^bH=rk@c58zrr^Apc#9fzy$c",
  53. username="mmd88888.cdk",
  54. password="MazdaCX30",
  55. dealer_number="15972/MMD",
  56. )
  57. redirect_uri = "https://localhost:8085/"
  58. base_dir = "C:/projekte/mazda/"
  59. def upload(cfg: MazdaConfig, oauth: OAuth2Session, data):
  60. headers = {
  61. "accept": "application/vnd.mazdaeur.dms.v5+json",
  62. "x-mme-organisation": cfg.dealer_number,
  63. "X-mazda-org": cfg.dealer_number,
  64. "Content-Type": "application/json",
  65. # 'Authorization': 'Bearer ' + token
  66. }
  67. invoices = data["invoices"]
  68. orders = data["orders"]
  69. data["orders"] = []
  70. for i in invoices:
  71. data["invoices"] = [i]
  72. order_no = [item["orderNumber"] for item in i["invoiceItems"]]
  73. data["orders"] = [o for o in orders if o["orderNumber"] in order_no]
  74. r = oauth.post(cfg.domain + cfg.webservice + cfg.module, json.dumps(data), headers=headers)
  75. print(f"{i['invoiceNumber']} => {r.status_code}")
  76. if r.status_code not in [200, 202]:
  77. with open(base_dir + f"logs/invoice_{i['invoiceNumber']}.log", "wb") as fwh:
  78. fwh.write(r.content)
  79. def upload_files(cfg: MazdaConfig, oauth: OAuth2Session, export_dir: str):
  80. headers = {
  81. "accept": "application/vnd.mazdaeur.dms.v5+json",
  82. "x-mme-organisation": cfg.dealer_number,
  83. "X-mazda-org": cfg.dealer_number,
  84. "Content-Type": "application/json",
  85. }
  86. result = []
  87. print("Upload Files")
  88. for order_file in Path(export_dir).glob("*.json"):
  89. data = json.load(order_file.open("r"))
  90. r = oauth.post(cfg.domain + cfg.webservice + cfg.module, json.dumps(data), headers=headers)
  91. print(f"{order_file.name} => {r.status_code}")
  92. result.append(f"{order_file.name} => {r.status_code}")
  93. if r.status_code in [200, 202]:
  94. # OK
  95. # order_file.unlink()
  96. order_file.rename(f"{export_dir}\\success\\{order_file.name}")
  97. else:
  98. with open(f"{base_dir}\\logs\\{order_file.name}.log", "wb") as fwh:
  99. fwh.write(r.content)
  100. order_file.rename(f"{export_dir}\\error\\{order_file.name}")
  101. return result
  102. def main():
  103. data = convert_csv(base_dir + "data/Workshop_Order_Report.csv", base_dir + "temp/mazda_export.json", 2021, 6)
  104. # data = json.load(open(base_dir + 'mazda_export.json', 'r'))
  105. upload(cfg_debug, None, data)
  106. if __name__ == "__main__":
  107. main()