const config = require('../../config'); const providers = config.providers; const crypto = require('crypto'); const bcrypt = require('bcrypt'); const moment = require('moment'); module.exports = function(sequelize, DataTypes) { const orders = sequelize.define( 'orders', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, order_number: { type: DataTypes.TEXT, }, order_type: { type: DataTypes.ENUM, values: [ "dine_in", "takeaway", "delivery" ], }, status: { type: DataTypes.ENUM, values: [ "draft", "placed", "confirmed", "preparing", "ready", "served", "completed", "cancelled", "refunded" ], }, placed_at: { type: DataTypes.DATE, }, subtotal_amount: { type: DataTypes.DECIMAL, }, tax_amount: { type: DataTypes.DECIMAL, }, discount_amount: { type: DataTypes.DECIMAL, }, total_amount: { type: DataTypes.DECIMAL, }, payment_status: { type: DataTypes.ENUM, values: [ "unpaid", "paid", "refunded", "partial_refund" ], }, payment_method: { type: DataTypes.ENUM, values: [ "cash", "card", "online" ], }, notes: { type: DataTypes.TEXT, }, delivery_address: { type: DataTypes.TEXT, }, importHash: { type: DataTypes.STRING(255), allowNull: true, unique: true, }, }, { timestamps: true, paranoid: true, freezeTableName: true, }, ); orders.associate = (db) => { db.orders.belongsToMany(db.order_items, { as: 'items', foreignKey: { name: 'orders_itemsId', }, constraints: false, through: 'ordersItemsOrder_items', }); db.orders.belongsToMany(db.order_items, { as: 'items_filter', foreignKey: { name: 'orders_itemsId', }, constraints: false, through: 'ordersItemsOrder_items', }); /// loop through entities and it's fields, and if ref === current e[name] and create relation has many on parent entity db.orders.hasMany(db.order_items, { as: 'order_items_order', foreignKey: { name: 'orderId', }, constraints: false, }); //end loop db.orders.belongsTo(db.users, { as: 'customer', foreignKey: { name: 'customerId', }, constraints: false, }); db.orders.belongsTo(db.restaurant_tables, { as: 'table', foreignKey: { name: 'tableId', }, constraints: false, }); db.orders.belongsTo(db.users, { as: 'createdBy', }); db.orders.belongsTo(db.users, { as: 'updatedBy', }); }; return orders; };