mazda_upload.py 3.6 KB

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