/* ============================================================================ *\
|| ########################################################################## ||
|| # 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 invoiceModule {
/**
*cart quantity product
* @param {object} req request object
* @param {object} data data
* @param {number} count data
* @returns {object} sql query
*/
static async allInvoiceItems(req, data, count) {
const mysql = {}
let row = ''
let where = ''
const order = ' b.common_invoice desc, b.id asc'
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
where += `and b.common_invoice = ${req.body.invoice_id}`
row = 'single_invoice_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 baseTableUsed = global.configColumns.buynow
const customTableUsed = { enabled: 0 }
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
mysql.mainTable = generatedData.mainTableJoin
if (typeof global.configFeatures.admin_fee !== 'undefined') {
if (global.configFeatures.admin_fee.enabled) {
mysql.columns[0].push('b.admin_fee')
mysql.columns[0].push('b.admin_fee_percent')
}
}
const additionalTable = global.configColumns.projects
const customAdditionalTable = global.configColumns.custom_projects
const additionalGeneratedData = commonProduct.additionalTableJoin(
additionalTable,
customAdditionalTable,
baseTableUsed,
'inner 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
mysql.limitf = ''
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
*get all transactions
* @param {number} cartID cart id
* @returns {object} sql query
*/
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
}
/**
*invoice paid user address
* @param {number} invoiceAddressId data
* @returns {object} sql query
*/
static async invoicePaidUserAddress(invoiceAddressId) {
const mysql = {}
mysql.where = ''
const baseTableUsed = global.configColumns.invoice_address
const customTableUsed = { enabled: 0 }
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.mainTable = generatedData.mainTableJoin
mysql.columns = generatedData.rowstoFetch
const escapeData = [invoiceAddressId]
const strQuery = await mysqclass.mysqli(mysql, 'get_invoice_paid_user_address')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
*invoice unpaid user address
* @param {number} invoiceAddressId data
* @returns {object} sql query
*/
static async invoiceUnpaidUserAddress(invoiceAddressId) {
const mysql = {}
mysql.where = ''
const baseTableUsed = global.configColumns.user_address_details
const customTableUsed = { enabled: 0 }
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.mainTable = generatedData.mainTableJoin
mysql.columns = generatedData.rowstoFetch
const escapeData = [invoiceAddressId]
const strQuery = await mysqclass.mysqli(mysql, 'get_invoice_unpaid_user_address')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
*invoice invoice user address
* @param {number} invoiceUserId invoice user id
* @returns {object} sql query
*/
static async invoiceUser(invoiceUserId) {
const mysql = {}
mysql.where = ''
const baseTableUsed = global.configColumns.users
const customTableUsed = global.configColumns.custom_users
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.mainTable = generatedData.mainTableJoin
mysql.columns = generatedData.rowstoFetch
const escapeData = [invoiceUserId]
const strQuery = await mysqclass.mysqli(mysql, 'get_invoice_user')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
*invoice invoice user address
* @param {number} id id
* @returns {object} sql query
*/
static async billingAddress(id) {
const mysql = {}
const escapeData = [id]
const strQuery = await mysqclass.mysqli(mysql, 'get_billing_address_details')
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* search bid deposits products
* @param {object} req request
* @param {object} data data
* @param {number} count number
*/
static async searchBidDepositsProducts(req, data, count) {
const mysql = {}
let row = ''
const where = ''
let limitf = ''
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
row = count === 1 ? 'bid_deposit_all_item' : 'bid_deposit_all_item_cnt'
const order = ' bdt.id desc'
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const baseTableUsed = global.configColumns.bid_deposit
const customTableUsed = { enabled: 0 }
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
mysql.mainTable = generatedData.mainTableJoin
const additionalTable = global.configColumns.projects
const customAdditionalTable = global.configColumns.custom_projects
const additionalGeneratedData = commonProduct.additionalTableJoin(
additionalTable,
customAdditionalTable,
baseTableUsed,
'inner join',
'id',
'type_id',
)
const additionalTableSecond = global.configColumns.auctionlot
const customAdditionalTableSecond = { enabled: 0 }
const additionalGeneratedDataSecond = commonProduct.additionalTableJoin(
additionalTableSecond,
customAdditionalTableSecond,
additionalTable,
'left join',
'id',
'auctionid',
)
mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedData.customTableJoin}`
mysql.columns = mysql.columns.concat(additionalGeneratedData.rowstoFetch)
mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedDataSecond.customTableJoin}`
mysql.columns = mysql.columns.concat(additionalGeneratedDataSecond.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}`
}
const ordergor = order === '' ? '' : `order by ${order}`
mysql.where = where
mysql.order = ordergor
mysql.dateNow = dateNow
mysql.userid = uidc
mysql.limitf = limitf
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* search invoice products
* @param {object} req request
* @param {object} data data
* @param {number} count number
*/
static async searchInvoiceProducts(req, data, count) {
const mysql = {}
let row = ''
let where = ''
let limitf = ''
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const actionValue = data.action
if (!actionValue || actionValue === '' || actionValue === 'all') {
where += `and (b.partial = 1 or b.paid = 1)`
} else if (actionValue === 'unpaid') {
where += `and b.paid = 0 and b.partial = 0`
} else if (actionValue === 'draft' || actionValue === 'partial') {
where += `and b.paid = 0 and b.partial = 1`
} else if (actionValue === 'paid') {
where += `and b.paid = 1 and b.partial = 0`
} else if (actionValue === 'allinv') {
where += ``
}
row = count === 1 ? 'invoice_all_item' : 'invoice_all_item_cnt'
const order = ' b.common_invoice desc'
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
if (req.body.filters) {
where += commonProduct.filterData(req)
}
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const baseTableUsed = global.configColumns.buynow
const customTableUsed = { enabled: 0 }
const generatedData = commonProduct.generateJoinWithColum(baseTableUsed, customTableUsed, [
'id',
])
mysql.customTableJoin = generatedData.customTableJoin
mysql.columns = generatedData.rowstoFetch
mysql.mainTable = generatedData.mainTableJoin
const additionalTable = global.configColumns.projects
const customAdditionalTable = global.configColumns.custom_projects
const additionalGeneratedData = commonProduct.additionalTableJoin(
additionalTable,
customAdditionalTable,
baseTableUsed,
'inner join',
'id',
'project_id',
)
const additionalTableSecond = global.configColumns.auctionlot
const customAdditionalTableSecond = { enabled: 0 }
const additionalGeneratedDataSecond = commonProduct.additionalTableJoin(
additionalTableSecond,
customAdditionalTableSecond,
additionalTable,
'left join',
'id',
'auctionid',
)
mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedData.customTableJoin}`
mysql.columns = mysql.columns.concat(additionalGeneratedData.rowstoFetch)
mysql.customTableJoin = `${mysql.customTableJoin} ${additionalGeneratedDataSecond.customTableJoin}`
mysql.columns = mysql.columns.concat(additionalGeneratedDataSecond.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}`
}
const ordergor = order === '' ? '' : `order by ${order}`
mysql.where = where
mysql.order = ordergor
mysql.dateNow = dateNow
mysql.userid = uidc
mysql.limitf = limitf
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
/**
* search transaction
* @param {object} req request
* @param {object} data data
* @param {number} count number
*/
static async searchTransaction(req, data, count) {
const mysql = {}
let row = ''
const where = ''
let limitf = ''
let uidc = 0
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
row = count === 1 ? 'transactions_all_item' : 'transactions_all_item_cnt'
const order = ' b.common_invoice desc'
const dateNow = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss')
if (req.user) {
uidc = typeof req.user.id === 'undefined' ? 0 : req.user.id
}
const baseTableUsed = global.configColumns.pay_records
const customTableUsed = { enabled: 0 }
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',
'common_invoice',
'cart_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}`
}
const ordergor = order === '' ? '' : `order by ${order}`
mysql.where = where
mysql.order = ordergor
mysql.dateNow = dateNow
mysql.userid = uidc
mysql.limitf = limitf
const strQuery = await mysqclass.mysqli(mysql, row)
const dataReturn = await global.mysql.query(strQuery, escapeData)
return dataReturn
}
}
module.exports.default = invoiceModule