import moment from 'moment' import OrderController from '../../controllers/order' import OrderHelpers from '../../controllers/order/helpers' import Fragments from '../../graphql/Fragments' import { logger } from '../../utils/logger' import { prismaClient as prisma } from '../../prismaClient' const getNextBookingDateForSubscriptionType = (lastOrderDate, subscriptionType) => { switch (subscriptionType) { case 'DAILY': return moment(lastOrderDate).add(1, 'days').format() case 'WEEKLY': return moment(lastOrderDate).add(1, 'weeks').format() case 'BIWEEKLY': return moment(lastOrderDate).add(2, 'weeks').format() case 'TRIWEEKLY': return moment(lastOrderDate).add(3, 'weeks').format() case 'MONTHLY': return moment(lastOrderDate).add(4, 'weeks').format() case 'YEARLY': return moment(lastOrderDate).add(1, 'year').format() } } export default async function verifyOrderWithSubscription(job, done) { // try { // logger.info(`Verify order with subscriptions`) // if (moment().hours() >= 21 || moment().hours() <= 7) { // done() // return logger.info(`Will not process orders subscription because it's in the night`) // } // const orders = await prisma.order.findMany({ // where: { subscription: { some: { active: true } }}, // select: { // ...Fragments.ORDER_FIELDS, // subscription: { // select: Fragments.ORDER_FIELDS // } // } // }) // // All the root order subscription // const rootSubscriptionOrders = orders.filter(o => !o.subscriptionRootOrder) // await rootSubscriptionOrders.reduce(async (promiseOrder, rootOrder) => { // await promiseOrder // logger.info(`Processing root order #${rootOrder.number}`) // try { // const weNeedToCreateAnotherOrder = !rootOrder.subscriptionOrders.some( // o => // o.status === 'CONFIRMED' || // o.status === 'PENDING' || // o.status === 'IN_PROGRESS' || // o.status === 'ARRIVED' || // o.status === 'ARRIVING' // ) // if (weNeedToCreateAnotherOrder) { // const lastOrderCompleted = rootOrder.subscriptionOrders.pop() || rootOrder // const newOrder = await OrderController.createOrder({ // data: { // number: await OrderHelpers.getCurrentOrderNumber(), // subtotalPrice: lastOrderCompleted.subtotalPrice, // totalShipping: lastOrderCompleted.totalShipping, // totalTax: lastOrderCompleted.totalTax, // totalPrice: lastOrderCompleted.totalPrice, // totalDiscounts: 0, // note: lastOrderCompleted.note, // serviceProject: { // connect: { // id: lastOrderCompleted.serviceProject.id // } // }, // booking: { // create: { // date: getNextBookingDateForSubscriptionType( // lastOrderCompleted.booking.date, // rootOrder.subscription.type // ), // address: { // connect: { // id: lastOrderCompleted.booking.address.id // } // } // } // }, // lineItems: { // connect: lastOrderCompleted.lineItems.map(lineItem => ({ // id: lineItem.id // })) // }, // customer: { // connect: { // id: lastOrderCompleted.customer.id // } // }, // subscription: { // connect: { // id: lastOrderCompleted.subscription.id // } // }, // subscriptionRootOrder: { // connect: { // id: rootOrder.id // } // } // } // }) // console.log('newOrder', newOrder) // // Add this order to the list of orders of the root order // await prisma.order.update({ // where: { // id: rootOrder.id // }, // data: { // subscription: { // connect: [ // { // id: newOrder.id // } // ] // } // } // }) // } // } catch (error) { // logger.error(error) // } // return Promise.resolve() // }, Promise.resolve()) // logger.info(`Finish processing subscriptions orders`) // done() // } catch (e) { // logger.error(e) // done(e) // } }