76 lines
3.0 KiB
Python
76 lines
3.0 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):
|
||
|
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,
|
||
|
"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
|