import json import yaml import requests from datetime import ( datetime, timedelta ) from ShipmentNotifierLogger import log SETTINGS = yaml.safe_load(open('../ShipmentNotifierSettings.yaml')) def sendDiscordNotification(*args, settings=SETTINGS): now = datetime.now() currentTime = now.strftime("%Y-%m-%d %H:%M:%S") newLine = '\n' shipmentNotification = requests.post( SETTINGS['DISCORD_WEBHOOK'], json = { "embeds": [ { "title": ":package: New Inbound Shipment Detected :package:", "url": f"https://sellercentral.amazon.co.uk/fba/sendtoamazon?wf={args[0]}", "color": 4886754, "footer": { "text": f"ShipmentNotifier ({args[0]}) • {currentTime}" }, "fields": [ { "name": "Shipment Information", "value": f''' > Inbound Shipment Plan ID: {args[0]} > Creation Date: {args[1]['creationDate']} > Destination Fulfilment Centres: {', '.join(destination for destination in args[1]['destinations'])} > Shipments: {', '.join(f'[{shipmentID}](https://sellercentral.amazon.co.uk/fba/inbound-shipment/summary/{shipmentID}/contents)' for shipmentID in args[1]['shipmentIDs'])} ''' }, { "name": "Shipment Contents", "value": f''' {newLine.join(f"> {MSKU}: {Count}" for MSKU, Count in args[1]['contents'].items())} ''' } ] } ] }, ) def updateSentNotifications(inboundPlanId): with open('../ShipmentNotifierSentNotifications.json') as sentNotificationsJSON: sentNotifications = json.load(sentNotificationsJSON) sentNotifications['sentNotifications'].append(inboundPlanId) with open('../ShipmentNotifierSentNotifications.json', mode='w') as outputSentNotifications: outputSentNotifications.write(json.dumps(sentNotifications, indent=4)) def isInboundShipmentPlanIDInSentNotifications(inboundShipmentPlanId): with open('../ShipmentNotifierSentNotifications.json') as sentNotificationsJSON: sentNotifications = json.load(sentNotificationsJSON) if inboundShipmentPlanId in sentNotifications['sentNotifications']: return True else: return False def isInboundShipmentPlanWithinSpecifiedDelta(inboundShipmentPlanCreationTime, delta=20160): currentTime = datetime.now() inboundShipmentPlanTime = datetime.strptime(inboundShipmentPlanCreationTime, '%Y-%m-%dT%H:%M:%SZ') timeDelta = currentTime - inboundShipmentPlanTime log(f'Current time: {currentTime}', 'info') log(f'Inbound shipment plan creation time: {inboundShipmentPlanTime}', 'info') log(f'Time delta: {timeDelta}', 'info') if timeDelta < timedelta(minutes=delta): return True else: return False