hi WIX community,
I need urgent help from everyone,
in event.js backend code, I have following to do some extra steps after an order is placed.
…
export function wixStores_onNewOrder(event) {
console.log( “geting order :” +event.orderId);
getFullOrder(event.orderId)
.then( async (order) => {
setOrderNumber(order.cartId, order.number);
});
}
…
Basically, I add a table to store customer delivery date/time. this table has only cart id. Until order placed, an order # will be created. The event code supposed write order number into the table so deliver date/time can attach to order # ( more readable than cartid). Further more, the delivery date/time will be recorded to track shipping capacity for that date/time. Just fyi, the code is mostly copied from example of ‘custom delivery time’, https://www.wix.com/velo/example/delivery-time. All respect to author of the example.
I tested wixStores_onNewOrder(event), by manually providing event like following.
{
“event” : {
“orderId” : “6c182135-2b84-4846-9b2a-1dbe31936bc4”
}
}
the order id is a real id in prod read-only order table. and in test table ‘delivery’, i have its cartid along with deliver date/time. It worked as expected, event triggered inserting order# into test data ‘delivery’. And it also write anothre table to track deliver date/time count.
But in prod site, after I placed order ( paid by palpay, order infor properly stored in ‘order’ table), nothing happens in prod table ‘delivery’. No order# written. Nor delivery date/time recorded.
Base on the fact that it works in dev mode if I manually provide/trigger event, I can only imagine, in prod site, for some reason, even order successfully placed, the wixStores_onNewOrder(event) is not triggered.
I did similar on wixStores_onOrderPaid, works in dev mode by manually trigger event. But in prod site, order placed, no order number write to ‘delivery’ tabl e.
BTW, the tables have been provided with anyone written permission, so that is not an issue.
Pls let me know your thoughts, suggestions. I’d really appreciate.
Below is the entire event.js as reference.
import wixData from ‘wix-data’ ;
import wixStores from ‘wix-stores-backend’ ;
const CONSTANTS = {
PICKUP_TITLE: ‘Pickup from store’ ,
PICKUP_TIME: ‘00:00’
}
function setOrderNumber(cartId, orderNumber) {
wixData.query( ‘deliveries’ )
.eq( ‘cartId’ , cartId)
.find()
.then((results) => {
if (results.items.length > 0 ) {
const item = results.items[ 0 ];
deliveryUpdate(cartId, orderNumber, item);
setDeliverySlot(item.date, item.deliveryTime);
} else {
console.log( ‘Cart ID ’ + cartId + ’ not found’ );
}
})
. catch ((err) => {
console.error( ‘deliveryUpdate error’ , err);
});
}
function deliveryUpdate(cartId, orderNumber, itemToUpdate) {
wixData.get( ‘deliveries’ , itemToUpdate._id)
.then((item) => {
item.orderNumber = orderNumber + ‘’ ;
wixData.update( ‘deliveries’ , item);
})
. catch ((err) => {
console.error( ‘deliveryUpdate error’ , err);
});
}
function updateDeliveryAvailability(item) {
wixData.get( ‘deliveries-availability’ , item._id)
.then(result => {
result.counter = result.counter + 1 ;
wixData.update( ‘deliveries-availability’ , result);
})
. catch ((err) => {
console.error( ‘updateDeliveryAvailability error’ , err);
});
}
function insertDeliveryAvailability(datObj, slot) {
let toInsert = {
‘deliveryDate’ : datObj,
‘deliveryTime’ : slot,
‘counter’ : 1
};
wixData.insert( 'deliveries-availability' , toInsert)
.then((response) => {
console.log( 'deliveries-availability insert' , response)
})
. catch ((err) => {
console.error( 'insertDeliveryAvailability error' , err);
});
}
function setDeliverySlot(date, slot) {
const datObj = new Date(date).toDateString();
wixData.query( 'deliveries-availability' )
.eq( 'deliveryDate' , datObj)
.find()
.then((results) => {
if (results.items.length > 0 ) {
const itemToUpdate = results.items[ 0 ];
if (itemToUpdate.deliveryTime === slot) {
updateDeliveryAvailability(itemToUpdate); // date & slot exist
} else {
insertDeliveryAvailability(datObj, slot); // date exists, slot does not
}
} else {
insertDeliveryAvailability(datObj, slot); // date does not exist
}
})
. catch ((err) => {
console.error( ‘setDeliverySlot error’ , err);
});
}
export function wixStores_onNewOrder(event) {
console.log( “geting order :” +event.orderId);
getFullOrder(event.orderId)
.then( async (order) => {
setOrderNumber(order.cartId, order.number);
});
}
//export function wixStores_onOrderPaid(event) {
// console.log("order paid event triggered by "+event);
// setOrderNumber( event.cartId, event.number);
//}
function getFullOrder(orderId) {
console.log( “geting order :” +orderId);
return wixData.get( ‘Stores/Orders’ , orderId);
}