/* ============================================================================ *\
|| ########################################################################## ||
|| # 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 commonProduct = require('../../common/products').default
const commonSQL = require('../../common/sql').default
const mysqclass = require('./mysqli').default
/**
* @class class to handle cart functions
*/
class cartModule {
/**
* All cart items fetch
* @param {object} req req object
* @param {number} data req.body object
* @param {number} count count for the pagination
* @returns {object} sql response
*/
static async allCartItems(req, data, count) {
const baseTableUsed = global.configColumns.buynow
const customTableUsed = { enabled: 0 }
const mysql = {}
let row = ''
let where = ''
const order = 'b.id asc'
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
if (count === 1) {
if (req.body.group_id) {
where += `and b.cart_group = ${req.body.group_id} and b.in_cart = 1`
} else if (req.body.cart_id) {
where += `and b.id IN (${req.body.cart_id}) and b.in_cart = 1`
} else if (req.body.invoice_id) {
where += `and b.common_invoice IN (${req.body.invoice_id})`
} else if (req.body.invoice_address_id) {
where += `and b.invoice_address_id IN (${req.body.invoice_address_id}) and b.paid = 0`
}
} else {
where += ' and b.in_cart = 0'
}
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
row = 'cart_all_item'
let uidc = 0
if (req.body.user_id) {
uidc = req.body.user_id
}
if (req.user && uidc === 0) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = [uidc]
const ordergor = order === '' ? '' : `order by ${order}`
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
const additionalTable = global.configColumns.projects
const customAdditionalTable = global.configColumns.custom_projects
const additionalGeneratedData = commonProduct.additionalTableJoin(
additionalTable,
customAdditionalTable,
baseTableUsed,
'left join',
'id',
'project_id',
)
mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedData.customTableJoin}`
mysql.columns = mysql.columns.concat(additionalGeneratedData.rowstoFetch)
mysql.where = where
mysql.order = ordergor
mysql.dateNow = dateNow
mysql.userid = uidc
const strQuery = await mysqclass.mysqli(mysql, row)
console.log('strQuery', strQuery)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* All cart items fetch
* @param {object} req req object
* @param {number} data req.body object
* @param {number} count count for the pagination
* @returns {object} sql response
*/
static async getAllCarts(req) {
let mysql = ''
let row = ''
let where = ''
const order = 'b.id asc'
where += ``
row = 'cart_all_cartid'
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}`
mysql = {
where,
order: ordergor,
userid: uidc,
}
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Get all sort and filtered values
* @param {object} req req object
* @param {object} data req.body object
* @returns {object} sql response
*/
static async getSearchSortCategories(req, data) {
const mysql = {}
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
mysql.where = ''
mysql.where += ` and p.market_status = "open" and p.date_closed >= "${dateNow}" `
const strQuery = await mysqclass.mysqli(mysql, 'ig_571')
const dataReturn = await global.mysql.query(strQuery)
return dataReturn
}
/**
* Check Product exists for the users
* @param {object} req req object
* @param {object} id project id to check
* @returns {object} sql response
*/
static async checkUserProductExists(req, id) {
const mysql = {}
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = [uidc, id]
const strQuery = await mysqclass.mysqli(mysql, 'check_cart_user')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Check Product exists for the users
* @param {object} req req object
* @param {object} id project id to check
* @returns {object} sql response
*/
static async checkUserCartExists(req, locationID) {
const mysql = {}
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = [uidc, locationID]
const strQuery = await mysqclass.mysqli(mysql, 'check_cart_user_exists')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Check User has un paid items exists
* @param {object} req req object
* @returns {object} sql response
*/
static async checkUserUnPaidExists(req) {
const mysql = {}
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = [uidc]
const strQuery = await mysqclass.mysqli(mysql, 'check_cart_user_exists')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Get all cart details
* @param {number} cartID cart ID the details to be fetched
* @returns {object} sql response
*/
static async getCartDetails(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_all_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* cart Location Details
* @param {number} cartID cart ID the location details to be fetched
* @returns {object} sql response
*/
static async cartLocationDetails(cartID) {
const mysql = {}
const escapeData = [cartID]
const strQuery = await mysqclass.mysqli(mysql, 'get_cart_location_data')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* change cart status
* @param {number} req req object
* @param {number} cartChange cart change details
* @param {number} id cart ID which status has to be changed
* @returns {object} sql response
*/
static async changeCartStatus(req, cartChange, id) {
const mysql = {}
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = [cartChange, uidc, id]
const strQuery = await mysqclass.mysqli(mysql, 'add_cart_to_user')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* add New Cart Entry
* @param {object} req req object
* @param {object} userDetails user details object
* @param {number} locationID location ID which has to be added
* @returns {object} sql response
*/
static async addNewCartEntry(req, userDetails, locationID) {
const mysql = {}
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
const escapeData = [
req.user.id,
userDetails.first_name,
userDetails.last_name,
userDetails.address1,
userDetails.address2,
userDetails.city,
userDetails.state,
userDetails.zip,
locationID,
dateNow,
]
const strQuery = await mysqclass.mysqli(mysql, 'insert_new_cart_user')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* Update Cart Entry
* @param {object} data req.body object
* @param {number} id cart ID which has to be updated
* @returns {object} sql response
*/
static async updateCartData(data, id) {
let postData = data
const mysqli = {}
if (postData.total_amount) {
postData.balance_amount = postData.total_amount
} else {
postData.balance_amount = 0.0
}
const acceptedObjects = [
'per_total',
'total_items',
'tax_percent',
'total_tax',
'buyer_premium',
'total_premium',
'total_shipping',
'total_amount',
'balance_amount',
'bill_first_name',
'bill_last_name',
'bill_address1',
'bill_address2',
'bill_city',
'bill_state',
'bill_zipcode',
'cart_paid',
]
postData = _.omit(postData, (value, key) => {
if (
_.isNull(value) ||
_.isUndefined(value) ||
value === '' ||
!_.contains(acceptedObjects, key)
) {
return true
}
return false
})
let escapeData = []
const defaultKeys = ['updated_at']
const defaultValues = [dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')]
const keyswithescape = defaultKeys.concat(_.keys(postData))
escapeData = defaultValues.concat(_.values(postData))
mysqli.keys = _.map(keyswithescape, (val) => {
return `${val} = ?`
})
mysqli.cart_id = id
const strQuery = await mysqclass.mysqli(mysqli, 'update_cart_details')
const dataPromise = await global.mysql.query(strQuery, escapeData)
return dataPromise
}
/**
* get All Pending Cart ID
* @param {object} req req object
* @returns {object} sql response
*/
static async getAllPendingCartID(req) {
const mysql = {}
let where = ''
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
if (req.body.filters) {
where += commonProduct.filterData(req)
}
const escapeData = [uidc]
const strQuery = await mysqclass.mysqli(mysql, 'get_all_pending_carts')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* get All Pending Cart Items
* @param {object} req req object
* @param {number} cartID cart ID which items has to be fetched
* @returns {object} sql response
*/
static async getAllPendingCartItems(req, baseTableUsed) {
const mysql = {}
let where = ''
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
if (req.body.filters) {
where += commonProduct.filterData(req)
}
mysql.where = where
mysql.field = req.body.field
mysql.extraField = req.body.extraField ? req.body.extraField : ''
mysql.mainTableJoin = `${baseTableUsed.ext_name} as ${baseTableUsed.short_name}`
const escapeData = [uidc]
const strQuery = await mysqclass.mysqli(mysql, 'get_all_count_pending_cart')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* update cart
* @param {number} req req object
* @returns {object} sql response
*/
static async updateCheckout(item) {
const mysql = {}
const postData = item
const acceptedObjects = ['invoice_address_id']
let escapeData = []
const defaultKeys = []
const defaultValues = []
const valueInsert = commonSQL.updateSQLFunction(
postData,
acceptedObjects,
defaultKeys,
defaultValues,
)
mysql.keys = valueInsert.keys
escapeData = valueInsert.escapeData
mysql.invoice_id = item.invoice_id
const strQuery = await mysqclass.mysqli(mysql, 'update_buynow_checkout')
let dataPromise = ''
if (mysql.keys.length) {
dataPromise = await global.mysql.query(strQuery, escapeData)
} else {
dataPromise = Promise.resolve()
}
return dataPromise
}
/**
* update invoice
* @param {number} req req object
* @returns {object} sql response
*/
static async updateInvoice(req) {
const mysql = {}
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const escapeData = [
req.tax_percent,
req.total_tax,
req.total_premium,
req.buyer_premium_percent,
req.shipping_percent,
req.total_shipping,
req.per_total,
req.per_total,
req.total_amount,
req.invoice_address_id,
req.changed_user_id ? req.changed_user_id : req.user_id,
req.user_id,
req.id,
]
const strQuery = await mysqclass.mysqli(mysql, 'update_invoice')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* update buyer premium
* @param {object} data data
* @param {number} pid project id
*/
static async updateBuyerPremium(data, pid) {
const mysql = {}
const escapeData = [data, pid]
const strQuery = await mysqclass.mysqli(mysql, 'update_premium')
const dataReturn = await global.mysqlsingle.query(strQuery, escapeData)
return dataReturn
}
}
module.exports.default = cartModule