// define a single task in a file import { Task, api, task } from "actionhero"; import moment from 'moment' export class ExportOrder extends Task { constructor() { super(); this.name = "exportOrder"; this.description = "I export a specific retail invoice for a shopify order"; this.frequency = 0; this.queue = "importExport"; this.middleware = []; this.inputs = { order: { required: true}, shop: { required: true}, exportType: {required: true}, cronId: {required: false} }; } async run(params) { const {order, shop, exportType, cronId} = params; let log = await api.exportLogs.orders.createLog({ orderId: order.id, cronId: cronId, type: "export:" + exportType, shop: shop, status: "started" }) try{ const dateTime = this.getDateString(); let xmlData; const rentalOrder = { ...order, line_items: [] } const retailOrder = { ...order, line_items: [] } //supliment orderData for(var i = 0; i < order.line_items.length; i++){ const line_item = order.line_items[i]; const product = await api.exportOrders.getProductData(line_item.product_id, shop, "product_type"); const metafields = await api.exportOrders.getProductMetaFields(line_item.product_id, shop); line_item.metafields = metafields.metafields; line_item.productData = product.product; if(line_item.productData.product_type == "Rental"){ rentalOrder.line_items.push(line_item); }else{ retailOrder.line_items.push(line_item); } } if(exportType == "reservation"){ if(rentalOrder.line_items.length){ xmlData = api.exportOrders.convertRentalReservation(rentalOrder); } }else{ if(retailOrder.line_items.length){ xmlData = api.exportOrders.convertRetailInvoice(retailOrder); } } if(xmlData){ const fileName = `${exportType}${order.id}_${dateTime}.xml`; await api.exportOrders.saveXMLFile(fileName, xmlData, shop); log.message = fileName log.status = "success" api.exportLogs.orders.createUpdateLog(log); api.exportOrders.markOrder(order, "exported", shop); }else{ //no export and no error... delete log await log.destroy(); } }catch(e){ log.message = e.stack log.status = "error" api.exportLogs.orders.createUpdateLog(log); await task.enqueue( "sendEmail", { email: "ryan@43webstudio.com", subject: `Order ${order.name} errored during export on ${shop}.`, message: e.stack}, "default" ); } } getDateString(){ return moment().format(); } }