/* ============================================================================ *\
|| ########################################################################## ||
|| # 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 # ||
|| # ---------------------------------------------------------------------- # ||
|| ########################################################################## ||
\* ============================================================================ */
const dateFormat = require('dateformat')
const md5 = require('md5')
const _ = require('underscore')
const mysqclass = require('./mysqli').default
const commonSQL = require('../../common/sql').default
const commonProduct = require('../../common/products').default
const commonFunction = require('../../common/function').default
/**
* @class class to handle product functions
*/
class productModule {
/**
* Search all the search products
* @param {object} req req object
* @param {object} data req.body object
* @param {number} count count for the pagination
* @returns {object} sql response
*/
static async searchProducts(req, data, count) {
const mysql = {}
const baseTableUsed = global.configColumns.projects
const customTableUsed = global.configColumns.custom_projects
let row = ''
let where = ''
let limitf = ''
let order = ''
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
if (typeof req.body.limit === 'undefined') {
req.body.limit = global.configurations.variables.search_limit || 25
}
if (typeof req.body.page === 'undefined') {
req.body.page = 1
}
order = ` ORDER BY p.id desc`
if (req.body.orderby || req.body.order) {
const sortReturn = commonProduct.sortOrderData(req, where)
if (sortReturn.order) {
order = sortReturn.order
}
if (sortReturn.where) {
where += sortReturn.where
}
}
if (req.body.similars) {
where += commonProduct.similarData(req)
}
if (req.body.filters) {
where += commonProduct.filterData(req)
}
if (req.body.market_status) {
if (Array.isArray(req.body.market_status)) {
const values = req.body.market_status.join('","')
where += ` AND p.market_status in ("${values}") `
} else if (typeof req.body.market_status === 'string') {
where += ` AND p.market_status = "${req.body.market_status}" `
}
} else {
where += `and p.market_status = "open" and p.date_closed >= "${dateNow}" `
}
if (data.type === 'live') {
where += ` and p.date_added <= "${dateNow}" `
}
if (req.user && req.user.id) {
where += ` and (p.selltype=1 and FIND_IN_SET("${req.user.id}", p.selectedbuyer) or p.selltype=0 ) `
} else {
where += ` and p.selltype=0 `
}
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
const additionalTable = global.configColumns.auctionlot
const customAdditionalTable = global.configColumns.custom_auctionlot
const additionalGeneratedData = commonProduct.additionalTableJoin(
additionalTable,
customAdditionalTable,
baseTableUsed,
'left join',
'id',
'auctionid',
)
mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedData.customTableJoin}`
mysql.columns = mysql.columns.concat(additionalGeneratedData.rowstoFetch)
mysql.customTableJoin2 = ''
mysql.columns2 = ''
if (global.configFeatures.custom_nellis_employee_join) {
mysql.columns2 =
', nellis_e.firstName as empFirstName, nellis_e.lastName as empLastName'
mysql.customTableJoin2 =
'left join employees as nellis_e on it.employeeId = nellis_e.id'
}
mysql.locationJoin = ''
if (global.configFeatures.nellis_state_city_filter) {
mysql.locationJoin = 'left join locations as l on l.id = p.location_id'
if (typeof req.body.filters.currentLocation !== 'undefined') {
where += ` and l.state = "${req.body.filters.currentLocation.state}" and l.city = "${req.body.filters.currentLocation.city}"`
}
}
if (typeof global.configFeatures.deposit_on_project !== 'undefined') {
if (global.configFeatures.deposit_on_project.enabled && req.user && req.user.id) {
const additionalTableDeposit = global.configColumns.bid_deposit
const customAdditionalTableDeposit = { enabled: 0 }
const additionalDepositGeneratedData = commonProduct.additionalTableJoin(
additionalTableDeposit,
customAdditionalTableDeposit,
baseTableUsed,
'left join',
'type_id',
'id',
)
mysql.customTableJoin += ` ${additionalDepositGeneratedData.customTableJoin} and ${additionalTableDeposit.short_name}.user_id = ${req.user.id} `
mysql.columns = mysql.columns.concat(additionalDepositGeneratedData.rowstoFetch)
}
}
row = count === 1 ? 'ingram_13' : 'ingram_13a'
const limitrg = req.body.limit
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = []
if (count === 1) {
let pagen = (req.body.page - 1) * limitrg
if (parseInt(pagen, 10) < 0) {
pagen = 0
}
limitf = ` limit ${pagen},${limitrg}`
}
mysql.userid = uidc
mysql.order = order
mysql.where = where
mysql.limitf = limitf
mysql.dateNow = dateNow
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Search all the dashboard products
* @param {object} req req object
* @param {object} data req.body object
* @param {number} count count for the pagination
* @returns {object} sql response
*/
static async searchDashboardProducts(req, data, count) {
const actionValue = data.action
const mysql = {}
let row = ''
let where = ''
let having = ''
let limitf = ''
let order = ''
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
order = ` ORDER BY p.id desc`
if (req.body.orderby || req.body.order) {
const sortReturn = commonProduct.sortOrderData(req, where)
if (sortReturn.order) {
order = sortReturn.order
}
if (sortReturn.where) {
where += sortReturn.where
}
}
if (req.body.similars) {
where += commonProduct.similarData(req)
}
if (req.body.filters) {
where += commonProduct.filterData(req)
}
if (req.body.having) {
having += commonProduct.havingData(req)
}
if (actionValue !== '') {
if (
actionValue === 'auction' ||
actionValue === 'all' ||
actionValue === 'winning' ||
actionValue === 'outbid' ||
actionValue === 'lost'
) {
row = count === 1 ? 'dash_auction_item' : 'dash_auction_item_count'
if (actionValue === 'winning') {
where += ` and p.market_status = "open"`
where += ` and p.date_closed >= "${dateNow}" `
where += `and (select IFNULL(bb.user_id,0) as latestbiduser_id from bids AS bb where bb.project_id = p.id and bb.proposal != "tie_bid" order by bb.proposed_amount desc limit 1) = "${uidc}"`
} else if (actionValue === 'outbid') {
where += ` and p.market_status = "open"`
where += ` and p.date_closed >= "${dateNow}" `
where += `and (select IFNULL(bb.user_id,0) as latestbiduser_id from bids AS bb where bb.project_id = p.id and bb.proposal != "tie_bid" order by bb.proposed_amount desc limit 1) != "${uidc}"`
} else if (req.body.is_past_auction) {
where += ` `
} else {
where += ` and (p.market_status = "open" or p.market_status = "sold")`
}
} else if (actionValue === 'watchlist') {
if (!req.body.is_custom_check)
where += ` and p.market_status = "open" and p.date_closed >= "${dateNow}" `
row = count === 1 ? 'dash_watchlist_item' : 'dash_watchlist_item_count'
} else if (actionValue === 'won') {
row = count === 1 ? 'dash_won_item' : 'dash_won_item_count'
} else if (actionValue === 'buynow') {
row = count === 1 ? 'dash_buynow_item' : 'dash_buynow_item_count'
}
}
if (actionValue === 'won' || actionValue === 'buynow') {
const baseTableUsed = global.configColumns.projects
const customTableUsed = global.configColumns.custom_projects
const generatedData = commonProduct.generateJoinWithColum(
baseTableUsed,
customTableUsed,
['id'],
)
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
mysql.mainTable = generatedData.mainTableJoin
const additionalTable = global.configColumns.buynow
const customAdditionalTable = { enabled: 0 }
const additionalGeneratedData = commonProduct.additionalTableJoin(
additionalTable,
customAdditionalTable,
baseTableUsed,
'inner join',
'project_id',
'id',
)
mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedData.customTableJoin}`
mysql.columns = mysql.columns.concat(additionalGeneratedData.rowstoFetch)
} else {
const baseTableUsed = global.configColumns.projects
const customTableUsed = global.configColumns.custom_projects
const generatedData = commonProduct.generateJoinWithColum(
baseTableUsed,
customTableUsed,
['id'],
)
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
if (typeof global.configFeatures.deposit_on_project !== 'undefined') {
if (global.configFeatures.deposit_on_project.enabled && req.user && req.user.id) {
const additionalTableDeposit = global.configColumns.bid_deposit
const customAdditionalTableDeposit = { enabled: 0 }
const additionalDepositGeneratedData = commonProduct.additionalTableJoin(
additionalTableDeposit,
customAdditionalTableDeposit,
baseTableUsed,
'left join',
'type_id',
'id',
)
mysql.customTableJoin += ` ${additionalDepositGeneratedData.customTableJoin} and ${additionalTableDeposit.short_name}.user_id = ${req.user.id} `
mysql.columns = mysql.columns.concat(additionalDepositGeneratedData.rowstoFetch)
}
}
}
const limitrg = req.body.limit
const escapeData = []
if (count === 1) {
let pagen = (req.body.page - 1) * limitrg
if (parseInt(pagen, 10) < 0) {
pagen = 0
}
limitf = ` limit ${pagen},${limitrg}`
}
mysql.order = order
mysql.where = where
mysql.having = having
mysql.limitf = limitf
mysql.dateNow = dateNow
mysql.userid = uidc
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Search all the invoice products
* @param {object} req req object
* @param {object} data req.body object
* @param {number} count count for the pagination
* @returns {object} sql response
*/
static async searchInvoiceProducts(req, data, count) {
let mysql = ''
let row = ''
let order = ''
const sortorder = data.orderby
const actionValue = data.action
let where = ''
let limitf = ''
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
if (req.body.paid) {
where += ` and pc.cart_paid = 1`
}
if (req.body.checkout) {
where += ` and pc.cart_checkout = 1`
}
if (req.body.unpaid) {
where += ` and pc.cart_paid = 0`
}
order = 'pc.cart_paiddate desc'
row = count === 1 ? 'invoice_item' : 'invoice_item_count'
const limitrg = req.body.limit
const escapeData = []
if (count === 1) {
let pagen = (req.body.page - 1) * limitrg
if (parseInt(pagen, 10) < 0) {
pagen = 0
}
limitf = ` limit ${pagen},${limitrg}`
}
const ordergor = order === '' ? '' : `order by ${order}`
mysql = {
where,
order: ordergor,
limitf,
userid: uidc,
}
const strQuery = await mysqclass.mysqli(mysql, row)
console.log('row', strQuery)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Search all the new invoice products
* @param {object} req req object
* @param {object} data req.body object
* @param {number} count count for the pagination
* @returns {object} sql response
*/
static async searchInvoiceProductsNew(req, data, count) {
let mysql = ''
let row = ''
let order = ''
const sortorder = data.orderby
const actionValue = data.action
let where = ''
let limitf = ''
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
if (req.body.checkout) {
where += ` and b.paid = 1 `
} else {
where += ` and b.paid = 0 AND partial = 0`
}
order = 'b.id desc'
row = count === 1 ? 'invoice_item_new' : 'invoice_item_new_count'
const limitrg = req.body.limit
const escapeData = []
if (count === 1) {
let pagen = (req.body.page - 1) * limitrg
if (parseInt(pagen, 10) < 0) {
pagen = 0
}
limitf = ` limit ${pagen},${limitrg}`
}
const ordergor = order === '' ? '' : `order by ${order}`
mysql = {
where,
order: ordergor,
limitf,
userid: uidc,
}
const strQuery = await mysqclass.mysqli(mysql, row)
console.log('row', strQuery)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Search all the return products
* @param {object} req req object
* @param {object} data req.body object
* @param {number} count count for the pagination
* @returns {object} sql response
*/
static async searchReturnProducts(req, data, count) {
let mysql = ''
let row = ''
let order = ''
const sortorder = data.orderby
const actionValue = data.action
let where = ''
let limitf = ''
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
if (req.body.paid) {
where += ` and rc.paid = 1`
}
if (req.body.checkout) {
where += ` and rc.checkout = 1`
}
if (req.body.unpaid) {
where += ` and rc.paid = 0`
}
order = 'rc.paiddate desc'
row = count === 1 ? 'return_item' : 'return_item_count'
const limitrg = req.body.limit
const escapeData = []
if (count === 1) {
let pagen = (req.body.page - 1) * limitrg
if (parseInt(pagen, 10) < 0) {
pagen = 0
}
limitf = ` limit ${pagen},${limitrg}`
}
const ordergor = order === '' ? '' : `order by ${order}`
mysql = {
where,
order: ordergor,
limitf,
userid: uidc,
}
const strQuery = await mysqclass.mysqli(mysql, row)
console.log('row', strQuery)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* getch all attachments
* @param {number} pid project id
* @returns {object} sql response
*/
static async fetchAllAttachments(pid) {
const mysql = {}
const escapeData = [pid]
const strQuery = await mysqclass.mysqli(mysql, 'im_26')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* check bid placed without login
* @param {number} pid project id
* @returns {object} sql response
*/
static async checkbidPlacedwhoutlogin(pid) {
const mysql = {}
const escapeData = [pid]
const strQuery = await mysqclass.mysqli(mysql, 'im_818')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* check bid placed without login
* @param {number} pid project id
* @param {string} type type
* @returns {object} sql response
*/
static async getProxyDetails(pid, type) {
const mysql = {}
let escapeData = []
if (type === 'get_highest_biduser') {
escapeData = [pid, 0]
} else if (type === 'second_highest_biduser') {
escapeData = [pid, 1]
}
const strQuery = await mysqclass.mysqli(mysql, 'get_proxy_details')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* bids notify all
* @param {number} pid project id
* @param {number} uid user id
* @returns {object} sql response
*/
static async bidsnotifyall(pid, uid) {
const mysql = {}
mysql.where = ''
const escapeData = [pid, uid]
const strQuery = await mysqclass.mysqli(mysql, 'im_822')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* bids awarded
* @param {number} pid project id
* @param {number} uid user id
* @returns {object} sql response
*/
static async bidsawarded(pid, uid) {
const mysql = {}
const escapeData = [pid, uid]
const strQuery = await mysqclass.mysqli(mysql, 'im_823')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get user proxy amt
* @param {number} pid project id
* @param {number} uid user id
* @returns {object} sql response
*/
static async getUserProxyAmt(pid, uid) {
const mysql = {}
const escapeData = [pid, uid]
const strQuery = await mysqclass.mysqli(mysql, 'im_824')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Fetch All Bid history
* @param {object} id project id
* @param {number} cnt count for the pagination
* @returns {object} sql response
*/
static async isbuyerbidstarted(pid, uid) {
const mysql = {}
const escapeData = [pid, uid]
const strQuery = await mysqclass.mysqli(mysql, 'im_821')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Fetch All Bid history
* @param {object} id project id
* @param {number} cnt count for the pagination
* @returns {object} sql response
*/
static async bidHistory(id, cnt) {
const mysql = {}
let row = ''
if (cnt === 1) {
row = 'im_45'
} else {
row = 'im_44'
}
const escapeData = [id]
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Fetch Bid history
* @param {object} req req.body
* @param {number} count count for the pagination
* @returns {object} sql response
*/
static async bidHistoryViewPage(req, count) {
const mysql = {}
mysql.where = ''
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
mysql.order = 'order by bh.id desc'
const order = req.body.order === '' ? 'asc' : req.body.order
const orderby = req.body.orderby === '' && !req.body.orderby ? '' : req.body.orderby
if (orderby !== '') {
mysql.order = ` order by ${orderby} ${order}`
}
// if (req.body.searchterm !== '' && req.body.searchterm !== undefined) {
// let changed = req.body.searchterm.replace(/\\/g, '\\\\\\\\')
// changed = changed.replace(/"/g, '\\"')
// mysql.where += `and (u.first_name like "%${changed}%" or p.id like "%${changed}%")`
// }
let row = ''
const pagen = (req.body.page - 1) * req.body.limit
const limitf = ` limit ${pagen},${req.body.limit}`
mysql.limit = limitf
mysql.dateNow = dateNow
const escapeData = [req.body.id]
if (count === 1) {
row = 'get_all_bid_history_limit'
} else {
row = 'get_all_bid_history'
}
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* ttw bid history
* @param {number} pid project id
* @param {number} uid user id
* @returns {object} sql response
*/
static async ttwBidHistory(req, count) {
const mysql = {}
mysql.where = ''
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
mysql.order = ''
let row = ''
if (req.body.user_id) mysql.where += ` and b.user_id = "${req.body.user_id}" `
const pagen = (req.body.page - 1) * req.body.limit
const limitf = ` limit ${pagen},${req.body.limit}`
mysql.limit = limitf
mysql.dateNow = dateNow
const escapeData = [req.body.id]
if (count === 1) {
row = 'get_all_ttwbid_history_limit'
} else {
row = 'get_all_ttwbid_history'
}
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get second higest bidder ttw
* @param {number} id project id
* @returns {object} sql response
*/
static async getSecondHighestBidderTTW(id) {
const mysql = {}
let row = 'getSecondHighestBidderTTW'
const escapeData = [id, id]
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get private Sold Quantity
* @param {object} id project id
* @param {number} id project id
* @returns {object} sql response
*/
static async getPrivateSoldQty(req, id) {
const mysql = {}
let row = 'privateSoldQty'
const escapeData = [id, req.user.id || 0]
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get search sort categories
* @param {object} id project id
* @returns {object} sql response
*/
static async getSearchSortCategories(req, data) {
const mysql = {}
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
mysql.where = ''
const selectQuery = []
const processAllItems = async (items) => {
const tableValue = global.configColumns[items]
if (tableValue.search && tableValue.enabled && tableValue.foreign_key) {
selectQuery.push(
`GROUP_CONCAT(DISTINCT ${tableValue.foreign_key} ORDER BY ${tableValue.foreign_key}) as sort${tableValue.ext_name}`,
)
}
}
await commonFunction.asyncForEach(Object.keys(global.configColumns), async (element) => {
await processAllItems(element)
})
const customProject = global.configColumns.custom_projects
if (req.body.market_status) {
if (Array.isArray(req.body.market_status)) {
const values = req.body.market_status.join('","')
mysql.where += ` AND p.market_status in ("${values}") `
} else if (typeof req.body.market_status === 'string') {
mysql.where += ` AND p.market_status = "${req.body.market_status}" `
}
} else {
mysql.where += ` and p.market_status = "open" and p.date_closed >= "${dateNow}" `
}
mysql.selectQuery = selectQuery.toString()
mysql.customProject = customProject.ext_name
mysql.customProjectAlis = customProject.short_name
if (customProject.foreign_key) {
mysql.customProjectJoin = `p.id = ${customProject.short_name}.${customProject.foreign_key}`
} else {
mysql.customProjectJoin = `${customProject.short_name}.id = p.item_id`
}
mysql.locationJoin = ''
if (global.configFeatures.nellis_state_city_filter) {
mysql.locationJoin = 'left join locations as l on l.id = p.location_id'
if (typeof req.body.filters.currentLocation !== 'undefined') {
mysql.where += ` and l.state = "${req.body.filters.currentLocation.state}" and l.city = "${req.body.filters.currentLocation.city}"`
}
}
if (req.body.filters) {
mysql.where += commonProduct.filterData(req)
}
const strQuery = await mysqclass.mysqli(mysql, 'ig_571')
const dataReturn = await global.mysql.query(strQuery)
return dataReturn
}
/**
* all invlice Items
* @param {number} id project id
* @param {object} data data
* @param {number} count count
* @returns {object} sql response
*/
static async allInvoiceItems(req, data, count) {
const baseTableUsed = global.configColumns.buynow
const customTableUsed = global.configColumns.projects
const mysql = {}
let row = ''
let where = ''
const order = 'p.date_closed asc'
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
where += `and b.common_invoice = ${req.body.invoice_id}`
row = 'invoice_all_item'
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = [uidc]
const ordergor = order === '' ? '' : `order by ${order}`
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
req.body.page = req.body.page || 1
req.body.limit = req.body.limit || 25
const pagen = (req.body.page - 1) * req.body.limit
const limitf = ` limit ${pagen},${req.body.limit}`
mysql.mainTable = ` ${global.configColumns.buynow.ext_name} as b `
mysql.limitf = limitf
mysql.where = where
mysql.order = ordergor
mysql.dateNow = dateNow
mysql.userid = uidc
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* all invlice Items
* @param {number} cartid cart id
* @returns {object} sql response
*/
static async getInvoiceCartDetails(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_invoice_all_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get All Transactions
* @param {number} cartID cart id
* @returns {object} sql response
*/
static async getAllTransactions(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_invoice_transactions_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get Appointment Deatails
* @param {number} cartID cart id
* @returns {object} sql response
*/
static async getAppointmentDetails(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_invoice_appointment_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get location details
* @param {number} cartID cart id
* @returns {object} sql response
*/
static async getLocationDetails(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_invoice_location_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* all return invoice times
* @param {number} cartID cart id
* @param {string} data data
* @param {number} count count
* @returns {object} sql response
*/
static async allReturnInvoiceItems(req, data, count) {
const baseTableUsed = global.configColumns.projects
const customTableUsed = global.configColumns.custom_projects
const mysql = {}
let row = ''
let where = ''
const order = 'p.date_closed asc'
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
where += `and b.return_invoice = ${req.body.invoice_id}`
row = 'returninvoice_all_item'
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = [uidc]
const ordergor = order === '' ? '' : `order by ${order}`
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
mysql.where = where
mysql.order = ordergor
mysql.dateNow = dateNow
mysql.userid = uidc
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get return invoice cart details
* @param {number} cartID cart id
* @returns {object} sql response
*/
static async getReturnInvoiceCartDetails(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_returninvoice_all_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get all return transactions
* @param {number} cartID cart id
* @returns {object} sql response
*/
static async getAllReturnTransactions(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_returninvoice_transactions_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get return appointment details
* @param {number} cartID cart id
* @returns {object} sql response
*/
static async getReturnAppointmentDetails(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_returninvoice_appointment_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get return location details
* @param {number} cartID cart id
* @returns {object} sql response
*/
static async getReturnLocationDetails(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_returninvoice_location_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* post product
* @param {object} req request object
* @returns {object} sql response
*/
static async postproduct(req, data) {
const mysqli = {}
let escapeData = []
const baseTableUsed = global.configColumns.projects
const postData = data
const acceptedObjects = baseTableUsed.array_columns
const defaultKeys = ['created_at', 'updated_at']
const defaultValues = [
dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
]
const valueInsert = commonSQL.InsertSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = valueInsert.values
mysqli.tables = baseTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'insert_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* post listing custom
* @param {object} req request object
* @param {data} data data
* @param {number} proID project id
*/
static async postlistingCustom(req, data, proID) {
const mysqli = {}
let escapeData = []
const customTableUsed = global.configColumns.custom_projects
const postData = data
postData.product_id = proID
const acceptedObjects = customTableUsed.array_columns
const defaultKeys = ['created_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const valueInsert = commonSQL.InsertSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = valueInsert.values
mysqli.tables = customTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'insert_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* update product
* @param {object} req request object
* @param {data} data data
*/
static async updateproduct(req, data) {
const mysqli = {}
let escapeData = []
const baseTableUsed = global.configColumns.projects
const postData = data
const acceptedObjects = baseTableUsed.array_columns
const defaultKeys = ['updated_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const valueInsert = commonSQL.updateSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = ` id=${req.body.id}`
mysqli.tables = baseTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* update listing custom
* @param {object} req request object
* @param {object} data data
* @param {number} proID project id
* @returns {object} sql response
*/
static async updatelistingCustom(req, data, proID) {
const mysqli = {}
let escapeData = []
const customTableUsed = global.configColumns.custom_projects
const postData = data
const acceptedObjects = customTableUsed.array_columns
const defaultKeys = ['updated_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const valueInsert = commonSQL.updateSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = `product_id =${req.body.id}`
mysqli.tables = customTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* add attachemnt
* @param {object} data data
* @param {number} proid project id
* @returns {object} sql response
*/
static async addattachement(data, proid) {
const mysqli = {}
const escapeData = [
proid,
data.file_name,
1,
data.user_id,
data.orderby,
dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
]
mysqli.keys = 'project_id,file_name,type,user_id,orderby,created_at'
mysqli.values = '?,?,?,?,?'
mysqli.tables = ' attachments '
const strQuery = await mysqclass.mysqli(mysqli, 'insert_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* common select parent table
* @param {object} data data
* @param {number} baseid base id
* @param {number} proid project id
* @param {string} baseTableUsed base table name
* @returns {object} sql response
*/
static async commonselectparenttable(data, baseid, proid, baseTableUsed) {
const mysqli = {}
const proId = proid.split(',')
const escapeData = [proId]
mysqli.keys = data
mysqli.values = `${baseid} IN (?)`
mysqli.tables = baseTableUsed.ext_name
mysqli.group_by = ''
mysqli.order_by = ''
mysqli.limit_by = ''
const strQuery = await mysqclass.mysqli(mysqli, 'select_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* add category
* @param {object} req request data
* @param {object} data data
* @returns {object} sql response
*/
static async addcategory(req, data) {
const mysqli = {}
let escapeData = []
const tableUsed = 'categories'
const postData = data
const acceptedObjects = global.configColumns[tableUsed].array_columns
const defaultKeys = ['created_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const valueInsert = commonSQL.InsertSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = valueInsert.values
mysqli.tables = tableUsed
const strQuery = await mysqclass.mysqli(mysqli, 'insert_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* update category
* @param {object} req request data
* @param {object} data data
* @returns {object} sql response
*/
static async updatecategory(req, data) {
const mysqli = {}
let escapeData = []
const tableUsed = 'categories'
const postData = data
const acceptedObjects = global.configColumns[tableUsed].array_columns
const defaultKeys = ['created_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const valueInsert = commonSQL.updateSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = ` id=${req.body.id}`
mysqli.tables = tableUsed
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* add attachment to product
* @param {object} req request data
* @param {object} data data
* @returns {object} sql response
*/
static async addattachementtoproduct(data, proid) {
const mysqli = {}
const escapeData = [data, proid]
mysqli.keys = ' avatar=?'
mysqli.values = ' id=?'
mysqli.tables = ' projects '
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* delete attachment
* @param {object} req request data
* @param {number} proid proid
* @returns {object} sql response
*/
static async deleteattachement(req, proid) {
const mysqli = {}
const escapeData = [proid]
mysqli.keys = ''
mysqli.values = ' project_id=?'
mysqli.tables = ' attachments '
const strQuery = await mysqclass.mysqli(mysqli, 'delete_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* post all type of listing
* @param {object} req request data
* @param {object} data data
* @param {string} baseTableUsed base table used
*/
static async postalltypeoflisting(req, data, baseTableUsed) {
const mysqli = {}
let escapeData = []
const postData = data
const acceptedObjects = baseTableUsed.array_columns
const defaultKeys = ['created_at', 'updated_at']
const defaultValues = [
dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
]
const valueInsert = commonSQL.InsertSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = valueInsert.values
mysqli.tables = baseTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'insert_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* update all type of product
* @param {object} req request data
* @param {object} data data
* @param {number} proid proid
* @param {string} typeoffield type of field
* @param {string} baseTableUsed base table used
* @returns {object} sql response
*/
static async updatealltypeofproduct(req, data, proid, typeoffield, baseTableUsed) {
const mysqli = {}
let escapeData = []
const postData = data
const postID = proid
const fieldType = typeoffield
const acceptedObjects = baseTableUsed.array_columns
const defaultKeys = ['updated_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const valueInsert = commonSQL.updateSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = ` ${fieldType}=${postID}`
mysqli.tables = baseTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* auction project update exist
* @param {object} req request data
* @returns {object} sql response
*/
static async auctionProjectUpdateexist(req) {
const mysqli = {}
let projectId = []
if (req.body.project_id instanceof Array) {
projectId = req.body.project_id
} else {
projectId = req.body.project_id.split(',')
}
const escapeData = [req.body.auction_id, projectId]
mysqli.keys = ' auctionid=?'
mysqli.values = ' id IN (?)'
mysqli.tables = ' projects '
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* auction project update exist rest
* @param {object} req request data
* @returns {object} sql response
*/
static async auctionProjectUpdateexistrest(req) {
const mysqli = {}
const escapeData = [0, req.body.id]
mysqli.keys = ' auctionid=?'
mysqli.values = ' auctionid=?'
mysqli.tables = ' projects '
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* auction project update exist rest
* @param {object} data data
* @param {object} proid data
* @param {string} baseTableUsed data
* @returns {object} sql response
*/
static async getlotdetails(data, proid, baseTableUsed) {
const mysqli = {}
const proId = proid.split(',')
const escapeData = [proId]
mysqli.keys = data
mysqli.values = ' id IN (?) '
mysqli.tables = baseTableUsed.ext_name
mysqli.group_by = ''
mysqli.order_by = ''
mysqli.limit_by = ''
const strQuery = await mysqclass.mysqli(mysqli, 'select_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get Common Invoice no
* @param {object} data data
* @param {number} proid project id
* @param {string} baseTableUsed base table used
* @returns {object} sql response
*/
static async getCommonInvoiceNo(data, proid, baseTableUsed) {
const mysqli = {}
const escapeData = []
mysqli.keys = data
mysqli.values = ' id>0 '
mysqli.tables = baseTableUsed.ext_name
mysqli.group_by = ''
mysqli.order_by = 'order by common_invoice desc'
mysqli.limit_by = 'limit 1'
const strQuery = await mysqclass.mysqli(mysqli, 'select_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get lot carts details
* @param {object} data data
* @param {number} proid product id
* @param {number} userid user id
* @param {string} baseTableUsed base table used
* @returns {object} sql response
*/
static async getlotcartsdetails(data, proid, userid, baseTableUsed) {
const mysqli = {}
const escapeData = [proid, userid]
mysqli.keys = data
mysqli.values = ' project_id=? and user_id=? and paid=0'
mysqli.tables = baseTableUsed.ext_name
mysqli.group_by = ''
mysqli.order_by = ''
mysqli.limit_by = ' limit 1'
const strQuery = await mysqclass.mysqli(mysqli, 'select_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get particular table details
* @param {object} data data
* @param {number} fieldType field taype
* @param {number} postID post id
* @param {string} baseTableUsed base table used
* @returns {object} sql response
*/
static async getparticulartabledetails(data, fieldType, postID, baseTableUsed) {
const mysqli = {}
const escapeData = []
mysqli.keys = data
mysqli.values = ` ${fieldType}=${postID}`
mysqli.tables = baseTableUsed
mysqli.group_by = ''
mysqli.order_by = ''
mysqli.limit_by = ''
const strQuery = await mysqclass.mysqli(mysqli, 'select_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* cart quntity
* @param {object} data data
* @param {number} fieldType field taype
* @param {number} proid product id
* @param {string} baseTableUsed base table used
* @returns {object} sql response
*/
static async cartqtyproductsub(data, proid) {
const mysqli = {}
const proId = proid.split(',')
const escapeData = [data, proId]
mysqli.keys = ' booked = booked - ?'
mysqli.values = ' id IN (?) '
mysqli.tables = ' projects '
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* produt status update
* @param {object} data data
* @param {number} proid product id
* @returns {object} sql response
*/
static async productstatusupdate(data, proid) {
const mysqli = {}
const proId = proid.split(',')
const escapeData = [data, proId]
mysqli.keys = ' market_status = ?'
mysqli.values = ' id IN (?) '
mysqli.tables = ' projects '
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
*cart qty product sold values
* @param {object} data data
* @param {number} proid product id
*/
static async cartqtyproductsoldvalue(data, proid) {
const mysqli = {}
const proId = proid.split(',')
const escapeData = [data, proId]
mysqli.keys = ' sold = sold + ?'
mysqli.values = ' id IN (?) '
mysqli.tables = ' projects '
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
*cart qty product
* @param {object} data data
* @param {number} proid product id
*/
static async cartqtyproduct(data, proid) {
const mysqli = {}
const proId = proid.split(',')
const escapeData = [data, proId]
mysqli.keys = ' booked = booked + ?'
mysqli.values = ' id IN (?) '
mysqli.tables = ' projects '
const strQuery = await mysqclass.mysqli(mysqli, 'update_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* update cart buynow
* @param {req} req request data
* @param {object} data data
* @param {number} proid product id
* @returns {object} sql response
*/
static async updatecartsbuynow(req, data, baseTableUsed) {
const mysqli = {}
let escapeData = []
const postData = data
const acceptedObjects = baseTableUsed.array_columns
const defaultKeys = ['date_added', 'paid_date']
const defaultValues = [
dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss'),
]
const valueInsert = commonSQL.InsertSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysqli.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysqli.values = valueInsert.values
mysqli.tables = baseTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'insert_tables')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* fetch auction by id
* @param {number} pid product id
*/
static async fetchAuctionbyID(pid) {
const mysql = {}
const escapeData = [pid]
const strQuery = await mysqclass.mysqli(mysql, 'get_single_auctions')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* update all close dates
* @param {string} dateAdded date added
* @param {string} dateClosed date closed
* @param {number} pid product id
* @returns {object} sql response
*/
static async updateAllCloseDates(dateAdded, dateClosed, id) {
const mysql = {}
const escapeData = [dateAdded, dateClosed, id]
const strQuery = await mysqclass.mysqli(mysql, 'update_all_auct_closedate')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get all sub lots new
* @param {number} id id
* @returns {object} sql response
*/
static async getAllSubLotsnew(id) {
const mysql = {}
const escapeData = [id]
const strQuery = await mysqclass.mysqli(mysql, 'getAllSubLots')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get all sub lots new
* @param {number} id id
* @param {string} date date
* @returns {object} sql response
*/
static async updatelofdetails(id, date) {
const mysql = {}
const closeData = commonSQL.dateTimeConvert(date)
const escapeData = [closeData, id]
const strQuery = await mysqclass.mysqli(mysql, 'updatelotnew')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get all sub lots new
* @param {number} proid product id
* @param {string} baseTableUsed base table used
* @param {number} baseid base id
* @returns {object} sql response
*/
static async commondeleteparenttable(proid, baseTableUsed, baseid) {
const mysqli = {}
const proId = proid.split(',')
const escapeData = [proId]
mysqli.values = `${baseid} IN (?)`
mysqli.tables = baseTableUsed.ext_name
const strQuery = await mysqclass.mysqli(mysqli, 'delete_tables')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get all sub lots new
* @param {object} items items
* @param {number} tax tax
* @param {string} address address
* @returns {object} sql response
*/
static async insertAvatax(items, tax, address) {
const mysqli = {}
const item = items
item.amount = item.amount ? item.amount : item.wprice
const escapeData = [
0,
item.project_id ? item.project_id : item.id,
item.buyer_id ? item.buyer_id : item.user_id,
item.invoice_address_id ? item.invoice_address_id : address.id,
(tax / item.amount) * 100,
tax,
item.zip ? item.zip : address.zip,
item.amount ? item.amount : address.amount,
item.qty,
0,
]
const strQuery = await mysqclass.mysqli(mysqli, 'third_party_tax_avalara')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* insert avatax
* @param {object} items items
* @returns {object} sql response
*/
static async getAvatax(item) {
const mysqli = {}
const escapeData = [
item.amount,
item.project_id ? item.project_id : item.id,
item.invoice_address_id,
]
const strQuery = await mysqclass.mysqli(mysqli, 'check_third_party_tax_avalara')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* update avatax
* @param {object} items items
* @returns {object} sql response
*/
static async updateAvatax(item) {
const mysqli = {}
const escapeData = [item.id, item.zip, item.amount]
const strQuery = await mysqclass.mysqli(mysqli, 'update_third_party_tax_avalara')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* delete avatax
* @param {object} items items
* @returns {object} sql response
*/
static async deleteAvatax(item) {
const mysqli = {}
const escapeData = [item.id, item.zip, item.amount]
const strQuery = await mysqclass.mysqli(mysqli, 'delete_third_party_tax_avalara')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Search all the dashboard products
* @param {object} req req object
* @param {object} data req.body object
* @param {number} count count for the pagination
* @returns {object} sql response
*/
static async ttwSearchDashboardProducts(req, data, count) {
const actionValue = data.action
const mysql = {}
let row = ''
let where = ''
let having = ''
let limitf = ''
let order = ''
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
order = ` ORDER BY p.id desc`
if (req.body.orderby || req.body.order) {
const sortReturn = commonProduct.sortOrderData(req, where)
if (sortReturn.order) {
order = sortReturn.order
}
if (sortReturn.where) {
where += sortReturn.where
}
}
if (req.body.similars) {
where += commonProduct.similarData(req)
}
if (req.body.filters) {
where += commonProduct.filterData(req)
}
if (req.body.having) {
having += commonProduct.havingData(req)
}
if (actionValue !== '') {
if (
actionValue === 'auction' ||
actionValue === 'all' ||
actionValue === 'winning' ||
actionValue === 'outbid' ||
actionValue === 'lost'
) {
row = count === 1 ? 'ttw_dash_auction_item' : 'ttw_dash_auction_item_count'
if (actionValue === 'winning') {
where += ` and p.market_status = "open"`
where += ` and p.date_closed >= "${dateNow}" `
where += `and (select count(bb.user_id) as latestbiduser_id from ttwbids AS bb where bb.project_id = p.id and bb.active != "0" and bb.user_id in ("${uidc}") order by bb.proposed_amount ) >0`
} else if (actionValue === 'outbid') {
where += ` and p.market_status = "open"`
where += ` and p.date_closed >= "${dateNow}" `
where += ` and (select count(bb.user_id) as latestbiduser_id from ttwbids AS bb where bb.project_id = p.id and bb.active != "0" and bb.user_id in ("${uidc}") order by bb.proposed_amount ) =0`
where += ` and (select count(bb.user_id) as latestbiduser_id from ttwbids AS bb where bb.project_id = p.id and bb.active = "0" and bb.user_id in ("${uidc}") order by bb.proposed_amount ) >0`
} else if (req.body.is_past_auction) {
where += ` `
} else if (actionValue === 'lost') {
where += ` and (p.market_status = "sold")`
where += ` and (select count(bb.user_id) as latestbiduser_id from ttwbids AS bb where bb.project_id = p.id and bb.active != "0" and bb.user_id in ("${uidc}") order by bb.proposed_amount ) =0`
where += ` and (select count(bb.user_id) as latestbiduser_id from ttwbids AS bb where bb.project_id = p.id and bb.active = "0" and bb.user_id in ("${uidc}") order by bb.proposed_amount ) < 0`
} else {
where += ` and (p.market_status = "open" or p.market_status = "sold")`
}
} else if (actionValue === 'watchlist') {
if (!req.body.is_custom_check)
where += ` and p.market_status = "open" and p.date_closed >= "${dateNow}" `
row = count === 1 ? 'ttw_dash_watchlist_item' : 'ttw_dash_watchlist_item_count'
} else if (actionValue === 'won') {
row = count === 1 ? 'dash_won_item' : 'dash_won_item_count'
}
}
const baseTableUsed = global.configColumns.projects
const customTableUsed = global.configColumns.custom_projects
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
mysql.mainTable = generatedData.mainTableJoin
if (actionValue === 'won') {
const additionalTable = global.configColumns.buynow
const customAdditionalTable = { enabled: 0 }
const additionalGeneratedData = commonProduct.additionalTableJoin(
additionalTable,
customAdditionalTable,
baseTableUsed,
'inner join',
'project_id',
'id',
)
mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedData.customTableJoin}`
mysql.columns = mysql.columns.concat(additionalGeneratedData.rowstoFetch)
}
const limitrg = req.body.limit
const escapeData = []
if (count === 1) {
let pagen = (req.body.page - 1) * limitrg
if (parseInt(pagen, 10) < 0) {
pagen = 0
}
limitf = ` limit ${pagen},${limitrg}`
}
mysql.order = order
mysql.where = where
mysql.having = having
mysql.limitf = limitf
mysql.dateNow = dateNow
mysql.userid = uidc
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
}
module.exports.default = productModule