/* ============================================================================ *\
|| ########################################################################## ||
|| # 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 FormData = require('form-data')
const fs = require('fs')
const {
createIssuer,
createOffering,
updateOffering,
getDocumentsforOffering,
addDocumentsforOffering,
deleteDocumentsforOffering,
updateDocumentforOffering,
getSubscriptionsforOffering,
addSubscriptionsforOffering,
deleteSubscriptionsforOffering,
updateSubscriptionsforOffering,
} = require('../../../../../front/controllers/payment/northcapital/common')
const northCapitalModule = require('../../../../modules/third_party/payment/northcapital').default
const schemaModule = require('./schema').default
const commonFunction = require('../../../../../common/function').default
const { jsonResponse, errorResponse } = require('../../../logger')
let NorthCapital = {
enabled: 0,
}
if (require('config').has('NorthCapital')) {
NorthCapital = require('config').get('NorthCapital')
}
const userTableAction = async (req) => {
req.body.id = commonFunction.getValidID(req.body.id)
const baseTableUsed = global.configColumns.users
const customTableUsed = global.configColumns.custom_users
const [results] = await Promise.all([
commonFunction.tableFunction(req, baseTableUsed, customTableUsed),
])
return results
}
module.exports = {
/**
* Get All Users
*
* @memberOf adminside.user
* @param {adminUserModule.fetchBuyersAll} modules
*/
allbuyers: async (req, res) => {
req.body.action = typeof req.body.action === 'undefined' ? 'open' : req.body.action
let records = []
let totalRecords = []
try {
;[records, totalRecords] = await Promise.all([
northCapitalModule.fetchBuyersAll(req, 1),
northCapitalModule.fetchBuyersAll(req, 0),
])
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
} finally {
let responseData = { records, totalRecords }
responseData = await commonFunction.getdynamicinnercontents(req, responseData)
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData,
})
}
},
/**
* getSingleActionUser
*
* @memberOf adminside.user
* @param {commonFunction.getValidID} modules
* @param {commonFunction.fetchTableFunction} modules
*/
getSingleActionUser: async (req, res) => {
let record = {}
try {
const id = typeof req.body.id === 'undefined' ? '' : req.body.id
req.body.id = commonFunction.getValidID(req.body.id)
const baseTableUsed = global.configColumns.users
const customTableUsed = global.configColumns.custom_users
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,
})
}
},
/**
* createIssuer
*
* @memberOf adminside.user
* @param {createIssuer} modules
*/
createIssuer: async (req, res) => {
try {
const [responseDataCreateIssuer] = await Promise.all([createIssuer(req)])
if (responseDataCreateIssuer.status === 'success') {
jsonResponse(res, responseDataCreateIssuer.status, {
responseType: responseDataCreateIssuer.responseType,
message: responseDataCreateIssuer.message,
responseData: responseDataCreateIssuer.responseData,
})
} else {
jsonResponse(res, responseDataCreateIssuer.status, {
responseType: responseDataCreateIssuer.responseType,
message: responseDataCreateIssuer.message,
responseData: responseDataCreateIssuer.responseData,
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* createOffering
*
* @memberOf adminside.third_party.payment.northcapital
* @param {northCapitalModule.getOfferingNorthDetails} modules
* @param {commonFunction.getValidID} modules
* @param {commonFunction.tableFunction} modules
*/
createOffering: async (req, res) => {
try {
const [userNorthDetails] = await Promise.all([
northCapitalModule.getOfferingNorthDetails(req.body.project_id),
])
req.body.issuerId = NorthCapital.issuerId
const baseTableUsed = global.configColumns.third_payment_north_offering
const customTableUsed = { enabled: 0 }
const queryResponse = {
body: {
issuerId: req.body.issuerId,
project_id: req.body.project_id,
},
}
if (userNorthDetails.length > 0) {
queryResponse.body.id = commonFunction.getValidID(userNorthDetails[0].id)
req.body.offeringId = userNorthDetails[0].offeringId
const [responseDataUpdateOffering] = await Promise.all([updateOffering(req)])
if (responseDataUpdateOffering.status === 'success') {
queryResponse.body.offeringId =
responseDataUpdateOffering.responseData.offeringDetails[1][0].offeringId
queryResponse.body.offeringStatus =
responseDataUpdateOffering.responseData.offeringDetails[1][0].offeringStatus
await Promise.all([
commonFunction.tableFunction(queryResponse, baseTableUsed, customTableUsed),
])
jsonResponse(res, responseDataUpdateOffering.status, {
responseType: responseDataUpdateOffering.responseType,
message: responseDataUpdateOffering.message,
responseData: responseDataUpdateOffering.responseData,
})
} else {
jsonResponse(res, responseDataUpdateOffering.status, {
responseType: responseDataUpdateOffering.responseType,
message: responseDataUpdateOffering.message,
responseData: responseDataUpdateOffering.responseData,
})
}
} else {
const [responseDataCreateOffering] = await Promise.all([createOffering(req)])
if (responseDataCreateOffering.status === 'success') {
queryResponse.body.offeringId =
responseDataCreateOffering.responseData.offeringDetails[1][0].offeringId
queryResponse.body.offeringStatus =
responseDataCreateOffering.responseData.offeringDetails[1][0].offeringStatus
await Promise.all([
commonFunction.tableFunction(queryResponse, baseTableUsed, customTableUsed),
])
jsonResponse(res, responseDataCreateOffering.status, {
responseType: responseDataCreateOffering.responseType,
message: responseDataCreateOffering.message,
responseData: responseDataCreateOffering.responseData,
})
} else {
jsonResponse(res, responseDataCreateOffering.status, {
responseType: responseDataCreateOffering.responseType,
message: responseDataCreateOffering.message,
responseData: responseDataCreateOffering.responseData,
})
}
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* addDocumentsforOffering
*
* @memberOf adminside.user
* @param {northCapitalModule.getOfferingNorthDetails} modules
* @param {commonFunction.getValidID} modules
* @param {commonFunction.tableFunction} modules
*/
addDocumentsforOffering: async (req, res) => {
try {
const [userNorthDetails] = await Promise.all([
northCapitalModule.getOfferingNorthDetails(req.body.project_id),
])
const fileName = req.body.userfile[0]
if (userNorthDetails.length > 0) {
const form = new FormData()
form.append('developerAPIKey', NorthCapital.developerAPIKey)
form.append('clientID', NorthCapital.clientID)
form.append('offeringId', userNorthDetails[0].offeringId)
form.append('file_name', `filename0=${fileName}`)
form.append('documentTitle', `documentTitle0=${req.body.documentTitle}`)
form.append(
'userfile0',
fs.createReadStream(`./public/uploads/${req.body.attachFolder}/${fileName}`),
fileName,
)
form.append('documentFileReferenceCode', `DOC_${new Date().getTime()}`)
const [responseDataUploadParty] = await Promise.all([addDocumentsforOffering(form)])
if (req.user)
await Promise.all([
commonFunction.eventTriggerFuction(
{
username: `Admin`,
requestername: `${req.user.first_name || ''} ${
req.user.last_name || ''
}`,
requesterid: req.user.id,
requestermail: req.user.email,
},
global.general.adminemail,
'',
'northcapital_document_submited',
0,
0,
0,
),
])
if (responseDataUploadParty.status === 'success') {
jsonResponse(res, responseDataUploadParty.status, {
responseType: responseDataUploadParty.responseType,
message: responseDataUploadParty.message,
responseData: responseDataUploadParty.responseData,
})
} else {
jsonResponse(res, responseDataUploadParty.status, {
responseType: responseDataUploadParty.responseType,
message: responseDataUploadParty.message,
responseData: responseDataUploadParty.responseData,
})
}
} else {
jsonResponse(res, 'error', {
responseType: 2,
message: 'North Capital details not available!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* updateDocumentforOffering
*
* @memberOf adminside.third_party.payment.northcapital
* @param {northCapitalModule.getOfferingNorthDetails} modules
* @param {updateDocumentforOffering} modules
* @param {commonFunction.tableFunction} modules
*/
updateDocumentforOffering: async (req, res) => {
try {
const [userNorthDetails] = await Promise.all([
northCapitalModule.getOfferingNorthDetails(req.body.project_id),
])
if (userNorthDetails.length > 0) {
const reqDoc = {
body: {
documentId: req.body.documentId,
documentTitle: req.body.documentTitle,
documentFileReferenceCode: `DOC_${new Date().getTime()}`,
},
}
const [responseDataGetDocParty] = await Promise.all([
updateDocumentforOffering(reqDoc),
])
if (responseDataGetDocParty.status === 'success') {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
} else {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
}
} else {
jsonResponse(res, 'error', {
responseType: 2,
message: 'North Capital details not available!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* deleteDocumentsforOffering
*
* @memberOf adminside.third_party.payment.northcapital
* @param {northCapitalModule.getOfferingNorthDetails} modules
* @param {deleteDocumentsforOffering} modules
*/
deleteDocumentsforOffering: async (req, res) => {
try {
const [userNorthDetails] = await Promise.all([
northCapitalModule.getOfferingNorthDetails(req.body.project_id),
])
if (userNorthDetails.length > 0) {
const reqDoc = {
body: {
documentId: req.body.documentId,
},
}
const [responseDataGetDocParty] = await Promise.all([
deleteDocumentsforOffering(reqDoc),
])
if (responseDataGetDocParty.status === 'success') {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
} else {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
}
} else {
jsonResponse(res, 'error', {
responseType: 2,
message: 'North Capital details not available!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* getDocumentsforOffering
*
* @memberOf adminside.third_party.payment.northcapital
* @param {northCapitalModule.getOfferingNorthDetails} modules
* @param {getDocumentsforOffering} modules
*/
getDocumentsforOffering: async (req, res) => {
try {
const [userNorthDetails] = await Promise.all([
northCapitalModule.getOfferingNorthDetails(req.body.project_id),
])
if (userNorthDetails.length > 0) {
const reqDoc = {
body: {
offeringId: userNorthDetails[0].offeringId,
},
}
const [responseDataGetDocParty] = await Promise.all([
getDocumentsforOffering(reqDoc),
])
if (responseDataGetDocParty.status === 'success') {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
} else if (
responseDataGetDocParty.responseData.error ===
'Party Documents does not exist..'
) {
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData: {
statusCode: '101',
statusDesc: 'Ok',
document_details: [],
},
})
} else {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
}
} else {
jsonResponse(res, 'error', {
responseType: 2,
message: 'North Capital details not available!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* addSubscriptionsforOffering
*
* @memberOf adminside.third_party.payment.northcapital
* @param {northCapitalModule.getOfferingNorthDetails} modules
* @param {addSubscriptionsforOffering} modules
*/
addSubscriptionsforOffering: async (req, res) => {
try {
const [userNorthDetails] = await Promise.all([
northCapitalModule.getOfferingNorthDetails(req.body.project_id),
])
if (userNorthDetails.length > 0) {
const reqDoc = {
body: {
templatename: req.body.templatename,
offeringId: userNorthDetails[0].offeringId,
},
}
const [responseDataGetDocParty] = await Promise.all([
addSubscriptionsforOffering(reqDoc),
])
if (responseDataGetDocParty.status === 'success') {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
} else {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
}
} else {
jsonResponse(res, 'error', {
responseType: 2,
message: 'North Capital details not available!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* addSubscriptionsforOffering
*
* @memberOf adminside.third_party.payment.northcapital
* @param {northCapitalModule.getOfferingNorthDetails} modules
* @param {updateSubscriptionsforOffering} modules
*/
updateSubscriptionsforOffering: async (req, res) => {
try {
const [userNorthDetails] = await Promise.all([
northCapitalModule.getOfferingNorthDetails(req.body.project_id),
])
if (userNorthDetails.length > 0) {
const reqDoc = {
body: {
templateId: req.body.templateId,
templatename: req.body.templatename,
offeringId: userNorthDetails[0].offeringId,
},
}
const [responseDataGetDocParty] = await Promise.all([
updateSubscriptionsforOffering(reqDoc),
])
if (responseDataGetDocParty.status === 'success') {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
} else {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
}
} else {
jsonResponse(res, 'error', {
responseType: 2,
message: 'North Capital details not available!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* deleteSubscriptionsforOffering
*
* @memberOf adminside.third_party.payment.northcapital
* @param {northCapitalModule.getOfferingNorthDetails} modules
* @param {deleteSubscriptionsforOffering} modules
*/
deleteSubscriptionsforOffering: async (req, res) => {
try {
const [userNorthDetails] = await Promise.all([
northCapitalModule.getOfferingNorthDetails(req.body.project_id),
])
if (userNorthDetails.length > 0) {
const reqDoc = {
body: {
templateId: req.body.templateId,
},
}
const [responseDataGetDocParty] = await Promise.all([
deleteSubscriptionsforOffering(reqDoc),
])
if (responseDataGetDocParty.status === 'success') {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
} else {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
}
} else {
jsonResponse(res, 'error', {
responseType: 2,
message: 'North Capital details not available!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
/**
* deleteSubscriptionsforOffering
*
* @memberOf adminside.third_party.payment.northcapital
* @param {northCapitalModule.getOfferingNorthDetails} modules
* @param {getSubscriptionsforOffering} modules
*/
getSubscriptionsforOffering: async (req, res) => {
try {
const [userNorthDetails] = await Promise.all([
northCapitalModule.getOfferingNorthDetails(req.body.project_id),
])
if (userNorthDetails.length > 0) {
const reqDoc = {
body: {
offeringId: userNorthDetails[0].offeringId,
},
}
const [responseDataGetDocParty] = await Promise.all([
getSubscriptionsforOffering(reqDoc),
])
console.log(
'responseDataGetDocParty.responseData?.document_details',
responseDataGetDocParty,
)
if (responseDataGetDocParty.status === 'success') {
jsonResponse(res, responseDataGetDocParty.status, {
responseType: responseDataGetDocParty.responseType,
message: responseDataGetDocParty.message,
responseData: responseDataGetDocParty.responseData,
})
} else if (
responseDataGetDocParty.responseData?.document_details ===
'Template details does not exist.'
) {
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData: {
statusCode: '101',
statusDesc: 'Ok',
document_details: [],
},
})
} else {
jsonResponse(res, 'success', {
responseType: 1,
message: 'Details successfully retrieved!',
responseData: {
statusCode: '101',
statusDesc: 'Ok',
document_details: [],
},
})
}
} else {
jsonResponse(res, 'error', {
responseType: 2,
message: 'North Capital details not available!',
})
}
} catch (e) {
console.error(e)
jsonResponse(res, 'error', {
responseType: 3,
message: 'Internal Server error!',
})
}
},
}