import pandas as pd import json import requests from requests_oauthlib import OAuth2Session from oauthlib.oauth2 import BackendApplicationClient from datetime import datetime domain = 'https://mappsacc.mazdaeur.com' # domain = 'https://mapps.mazdaeur.com' # Production Server webservice = domain + '/dogma-restapi-dms/api' module = '/vehicles/workshop/order-report' auth_url = domain + '/oauth/authorize' token_url = domain + '/oauth/token' client_id = 'E7FC943B-B73F-F48E-B71A-419EA4CD4AC7' api_key = '^bH=rk@c58zrr^Apc#9fzy$c' username = 'mmd88888.cdk' password = 'Der neue MX-30' dealer_number = '11197/MMD' # Example '10030/MMD' # token = 'MDDq3CUd9ix0iSqR' base_dir = 'C:/Projekte/Python/mazda/' def date_format(d): return d.isoformat() + "Z" def convert_csv(csv_file, json_file): date_cols = ['invoiceDate', 'orderDate', 'orderCompletionDate', 'vehicleIntakeDate', 'nextMotDueDate'] df = pd.read_csv(csv_file, encoding='ansi', decimal=',', sep=';', parse_dates=date_cols) # print(df[['currency','documentType','invoiceCategory','invoiceDate','invoiceNumber']].drop_duplicates().info()) invoices = df[['currency', 'documentType', 'invoiceCategory', 'invoiceDate', 'invoiceNumber']].drop_duplicates().to_dict('records') invoice_items = df[['invoiceNumber', 'orderLineNumber', 'orderNumber', 'amount', 'discount', 'portion', 'unitPrice']].groupby('invoiceNumber') for invoice in invoices: invoice['invoiceDate'] = date_format(invoice['invoiceDate']) items = invoice_items.get_group(invoice['invoiceNumber']) items.pop('invoiceNumber') invoice['invoiceItems'] = items.to_dict('records') orders = df[['orderNumber', 'orderDate', 'orderCompletionDate', 'vehicleIntakeDate']].drop_duplicates().to_dict('records') orders_vehicle = df[['orderNumber', 'licensePlate', 'nextMotDueDate', 'odometer', 'odometerUnit', 'vin']].drop_duplicates().groupby('orderNumber') orders_items = df[[ 'orderNumber', 'lineNumber', 'category', 'description', 'hours', 'operationCode', 'standardHours', 'description.1', 'type', 'description.2', 'isDamageCausal', 'manufacturer', 'partNumber', 'quantity', 'serialNumber', 'unit', 'company', 'description.3', 'invoiceCode', 'invoiceDate', 'invoiceNumber' ]].drop_duplicates().groupby('orderNumber') for order in orders: order['vehicle'] = orders_vehicle.get_group(order['orderNumber']).to_dict('records')[0] order['vehicle']['nextMotDueDate'] = date_format(order['vehicle']['nextMotDueDate']) order['orderDate'] = date_format(order['orderDate']) order['orderCompletionDate'] = date_format(order['orderCompletionDate']) order['vehicleIntakeDate'] = date_format(order['vehicleIntakeDate']) items = orders_items.get_group(order['orderNumber']).to_dict('records') order['items'] = [] for item in items: order['items'].append({ 'lineNumber': item['lineNumber'], 'operation': { 'category': item['category'], 'description': item['description'], 'hours': item['hours'], 'operationCode': item['operationCode'], 'standardHours': item['standardHours'] }, 'other': { 'description': item['description.1'], 'type': item['type'] }, 'part': { 'description': item['description.2'], 'isDamageCausal': item['isDamageCausal'], 'manufacturer': item['manufacturer'], 'partNumber': item['partNumber'], 'quantity': item['quantity'], 'serialNumber': item['serialNumber'], 'unit': item['unit'] }, 'purchaseInvoice': { 'company': item['company'], 'description': item['description.3'], 'invoiceCode': item['invoiceCode'], 'invoiceDate': date_format(item['invoiceDate']), 'invoiceNumber': item['invoiceNumber'] } }) date_min = str(df['invoiceDate'].min()) + 'T00:00:00.000Z' date_max = str(df['invoiceDate'].max()) + 'T00:00:00.000Z' res = { 'creationDate': str(datetime.now()), 'invoices': invoices, 'orders': orders, 'timeRangeBegin': date_min, 'timeRangeEnd': date_max } json.dump(res, open(json_file, 'w'), indent=2) return res def upload(data): headers = { 'accept': 'application/vnd.mazdaeur.dms.v3+json', 'x-mme-organisation': dealer_number, 'X-mazda-org': dealer_number, 'Content-Type': 'application/json', # 'Authorization': 'Bearer ' + token } # client = BackendApplicationClient(client_id=client_id) oauth = OAuth2Session(client=client_id) authorization_url, state = oauth.authorization_url(auth_url) print('Please go here and authorize: ' + authorization_url) redirect_response = input('Paste the full redirect URL here:') token = oauth.fetch_token(token_url=auth_url, client_id=client_id, client_secret=api_key, authorization_response=redirect_response) # s = requests.Session() # s.auth = (username, password) # s.headers.update(headers) # r = s.post(webservice + module, data=data) r = s.get(auth_url + '?response_type=code&client_id=globalcube&state=xyz&scope=write', token) print(r.text) r = s.post(token_url, data={'grant_type': 'authorization_code', 'code': ''}) print(r.text) def main(): # data = convert_csv(base_dir + 'Workshop_Order_Report.csv', base_dir + 'mazda_export.json') data = json.load(open(base_dir + 'mazda_export.json', 'r')) upload(data) if __name__ == '__main__': main()