83 lines
3.2 KiB
Python
83 lines
3.2 KiB
Python
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 = {
|
|
"content": "<@1242455259675230309>",
|
|
"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
|