admin/controllers/employee/index.js

/* ============================================================================ *\
|| ########################################################################## ||
|| # Auction Software Marketplace          Release: 0.6   Build 0.7         # ||
|| # ---------------------------------------------------------------------- # ||
|| # License # 35YAHCNR9344X6O666C123AB                                     # ||
|| # ---------------------------------------------------------------------- # ||
|| # Copyright ©2014–2021 Develop Scripts LLC. All Rights Reserved          # ||
|| # This file may not be redistributed in whole or significant part.       # ||
|| # ------------- AUCTION SOFTWARE IS NOT FREE SOFTWARE ------------------ # ||
|| # http://www.auctionsoftwaremarketplace.com|support@auctionsoftware.com  # ||
|| # ---------------------------------------------------------------------- # ||
|| ########################################################################## ||
\* ============================================================================ */

/* eslint-disable prefer-destructuring */
/* eslint-disable no-param-reassign */
const jwt = require('jsonwebtoken')
const md5 = require('md5')

const adminEmployeeModule = require('../../modules/employee').default
const schemaModule = require('./schema').default
const commonFunction = require('../../../common/function').default
const sendgridModule = require('../../../common/thirdparty/sendgrid').default

const { jsonResponse, errorResponse } = require('../logger')
/**
 * Login Admin User
 *
 * @memberOf adminside.employee
 * @param {commonFunction.tableFunction} modules
 */
const employeeAction = async (req) => {
    req.body.id = commonFunction.getValidID(req.body.id)

    const baseTableUsed = global.configColumns.employees
    const customTableUsed = global.configColumns.custom_employees

    const [results] = await Promise.all([
        commonFunction.tableFunction(req, baseTableUsed, customTableUsed),
    ])
    return true
}

module.exports = {
    /**
     * Get All Employees
     *
     * @memberOf adminside.employee
     * @param {adminEmployeeModule.fetchEmployeesAll} modules
     */
    allemployees: async (req, res) => {
        req.body.action = typeof req.body.action === 'undefined' ? 'open' : req.body.action
        let records = []
        let totalRecords = []
        let activelots = []
        try {
            ;[records, totalRecords, activelots] = await Promise.all([
                adminEmployeeModule.fetchEmployeesAll(req, 0),
                adminEmployeeModule.fetchEmployeesAll(req, 1),
            ])
        } catch (e) {
            console.error(e)
            jsonResponse(res, 'error', {
                responseType: 3,
                message: 'Internal Server error!',
            })
        } finally {
            let responseData = { records, totalRecords, activelots }
            responseData = await commonFunction.getdynamicinnercontents(req, responseData)
            jsonResponse(res, 'success', {
                responseType: 1,
                message: 'Details successfully retrieved!',
                responseData,
            })
        }
    },
    /**
     * Get Single Employee Details
     *
     * @memberOf adminside.employee
     * @param {adminEmployeeModule.fetchUsersbyID} modules
     */
    getSingleUser: async (req, res) => {
        let record = {}
        try {
            req.body.id = commonFunction.getValidID(req.body.id)
            const baseTableUsed = global.configColumns.employees
            const customTableUsed = global.configColumns.custom_employees

            const [records] = await Promise.all([
                commonFunction.fetchTableFunction(req, baseTableUsed, customTableUsed),
            ])
            record = records[0]
        } catch (e) {
            console.error(e)
            jsonResponse(res, 'error', {
                responseType: 3,
                message: 'Internal Server error!',
            })
        } finally {
            const responseData = { record }
            jsonResponse(res, 'success', {
                responseType: 1,
                message: 'Details successfully retrieved!',
                responseData,
            })
        }
    },
    /**
     * Employee Action
     *
     * @memberOf adminside.employee
     * @param {adminEmployeeModule.checkEmailExisting} modules
     * @param {adminEmployeeModule.userOperation} modules
     */
    userAction: async (req, res) => {
        try {
            req.body.id =
                typeof req.body.id === 'undefined' || req.body.id === 0 || req.body.id === ''
                    ? null
                    : req.body.id
            req.body.emp_email = req.body.emp_email.toLowerCase()
            req.body.emailexists = false
            const loginurl2 = `${global.react_url.admin_end}`
            if (req.body.id) {
                const resultuser = await Promise.all([
                    adminEmployeeModule.checkEmailExisting(req.body.emp_email),
                ])
                if (resultuser[0].length > 0) {
                    if (
                        resultuser[0][0].id === req.body.id &&
                        resultuser[0][0].emp_email === req.body.emp_email
                    ) {
                        await Promise.all([employeeAction(req)])
                    } else {
                        req.body.emailexists = true
                    }
                } else {
                    await Promise.all([employeeAction(req)])
                }
            } else {
                const resultuser = await Promise.all([
                    adminEmployeeModule.checkEmailExisting(req.body.emp_email),
                ])
                if (resultuser[0].length > 0) {
                    req.body.emailexists = true
                } else {
                    if (!req.body.password) {
                        req.body.password = Math.random().toString(36).slice(2)
                    }
                    req.body.password_salt = '12345'
                    req.body.password_hash = md5(md5(req.body.password) + req.body.password_salt)

                    const usermail = req.body.emp_email.toLowerCase()
                    const firstname = req.body.emp_firstname
                    const lastname = req.body.emp_lastname

                    const results = await Promise.all([employeeAction(req)])

                    await Promise.all([
                        commonFunction.eventTriggerFuction(
                            {
                                username: `${firstname || ''} ${lastname || ''}`,
                                password: req.body.password,
                                loginurl: loginurl2,
                            },
                            usermail,
                            '',
                            'employee_register_admin',
                            1,
                            0,
                            0,
                        ),
                    ])
                }
            }
        } catch (e) {
            console.error(e)
            jsonResponse(res, 'error', {
                responseType: 3,
                message: 'Internal Server error!',
            })
        } finally {
            if (req.body.emailexists) {
                jsonResponse(res, 'error', {
                    responseType: 2,
                    message: 'Registration Failed! Email Already Exists.',
                })
            } else {
                const responseData = {}
                jsonResponse(res, 'success', {
                    responseType: 1,
                    message: req.body.id ? 'Successfully updated!' : 'Successfully registered!',
                    responseData,
                })
            }
        }
    },
    /**
     * Change Employee status
     *
     * @memberOf adminside.employee
     * @param {adminEmployeeModule.userStatusUpdate} modules
     */
    changeStatus: async (req, res) => {
        try {
            if (req.body.action && req.body.user_id.length > 0) {
                await adminEmployeeModule.userStatusUpdate(req.body.action, req.body.user_id)
            }
        } catch (e) {
            console.error(e)
            jsonResponse(res, 'error', {
                responseType: 3,
                message: 'Internal Server error!',
            })
        } finally {
            const responseData = {}
            jsonResponse(res, 'success', {
                responseType: 1,
                message: 'Status successfully changed',
                responseData,
            })
        }
    },
    /**
     * Add
     *
     * @memberOf adminside.employee
     * @param {adminEmployeeModule.fetchEmployeesAll} modules
     */
    employeeAdd: async (req, res) => {
        try {
            const userlist = await Promise.all([
                adminEmployeeModule.createuserlist(req, req.body, global.configColumns.employee),
            ])
            if (global.configColumns.custom_employee.enabled) {
                req.body.user_id = userlist[0].insertId
                await Promise.all([
                    adminEmployeeModule.createuserlist(
                        req,
                        req.body,
                        global.configColumns.custom_employee,
                    ),
                ])
            }
            jsonResponse(res, 'success', {
                responseType: 1,
                message: 'Details successfully retrieved!',
            })
        } catch (e) {
            errorResponse(e, res)
        }
    },
    /**
     * Update Employee
     *
     * @memberOf adminside.employee
     * @param {adminEmployeeModule.updatealltypeofproduct} modules
     * @param {adminEmployeeModule.updatealltypeofuser} modules
     */
    employeeUpdate: async (req, res) => {
        try {
            await Promise.all([
                adminEmployeeModule.updatealltypeofproduct(
                    req,
                    req.body,
                    req.body.id,
                    'id',
                    global.configColumns.employee,
                ),
            ])

            if (global.configColumns.custom_employee.enabled) {
                await Promise.all([
                    adminEmployeeModule.updatealltypeofuser(
                        req,
                        req.body,
                        req.body.id,
                        'user_id',
                        global.configColumns.custom_employee,
                    ),
                ])
            }

            jsonResponse(res, 'success', {
                responseType: 1,
                message: 'Details successfully retrieved!',
            })
        } catch (e) {
            errorResponse(e, res)
        }
    },
    /**
     * Get All Employees
     *
     * @memberOf adminside.employee
     * @param {adminEmployeeModule.commonselectparenttable} modules
     */
    employeeListing: async (req, res) => {
        try {
            const usersobj = {}
            const [baseuserlist] = await Promise.all([
                adminEmployeeModule.commonselectparenttable(
                    '*',
                    'id',
                    req.body.id,
                    global.configColumns.employee,
                ),
            ])
            usersobj.employee_list = baseuserlist
            if (global.configColumns.custom_employee.enabled) {
                const [baseuserlistcus] = await Promise.all([
                    adminEmployeeModule.commonselectparenttable(
                        '*',
                        'user_id',
                        req.body.id,
                        global.configColumns.custom_employee,
                    ),
                ])
                usersobj.employeecus_list = baseuserlistcus
            }
            jsonResponse(res, 'success', {
                responseType: 1,
                message: 'Details successfully retrieved!',
                usersobj,
            })
        } catch (e) {
            errorResponse(e, res)
        }
    },
}