import { Injectable } from '@nestjs/common'; import { Connection, Request } from 'mssql'; import { MssqlDBService } from 'src/db/db.service'; import * as mssql from 'mssql'; import { CreateHoldersDTO, GetHolderDTO, HolderActivateOrInactivateDTO, HolderContactActivateOrInactivateDTO, UpdateHolderContactDTO, UpdateHolderDTO } from 'src/dto/manage-holders/manage-holders.dto'; @Injectable() export class ManageHoldersService { constructor(private readonly mssqlDBService: MssqlDBService) { } CreateHolders = async (body: CreateHoldersDTO) => { const newBody = { p_spid: null, p_clientlocationid: null, p_holderno: null, p_holdertype: null, p_uscibmemberflag: null, p_govagencyflag: null, p_holdername: null, p_namequalifier: null, p_addlname: null, p_address1: null, p_address2: null, p_city: null, p_state: null, p_zip: null, p_country: null, p_userid: null, p_contactstable: null, }; const reqBody = JSON.parse(JSON.stringify(body)); function setEmptyStringsToNull(obj) { Object.keys(obj).forEach((key) => { if (typeof obj[key] === 'object' && obj[key] !== null) { setEmptyStringsToNull(obj[key]); } else if (obj[key] === '') { obj[key] = null; } }); } setEmptyStringsToNull(reqBody); const finalBody: CreateHoldersDTO = { ...newBody, ...reqBody }; let connection: mssql.ConnectionPool; try { connection = await this.mssqlDBService.getConnection(); const request: Request = new Request(connection); request.input('P_SPID', mssql.Int, finalBody.P_SPID); request.input('P_CLIENTLOCATIONID', mssql.Int, finalBody.P_CLIENTLOCATIONID); request.input('P_HOLDERNO', mssql.VarChar(15), finalBody.P_HOLDERNO); request.input('P_HOLDERTYPE', mssql.VarChar(3), finalBody.P_HOLDERTYPE); request.input('P_USCIBMEMBERFLAG', mssql.VarChar(1), finalBody.P_USCIBMEMBERFLAG); request.input('P_GOVAGENCYFLAG', mssql.VarChar(1), finalBody.P_GOVAGENCYFLAG); request.input('P_HOLDERNAME', mssql.VarChar(50), finalBody.P_HOLDERNAME); request.input('P_NAMEQUALIFIER', mssql.VarChar(10), finalBody.P_NAMEQUALIFIER); request.input('P_ADDLNAME', mssql.VarChar(50), finalBody.P_ADDLNAME); request.input('P_ADDRESS1', mssql.VarChar(50), finalBody.P_ADDRESS1); request.input('P_ADDRESS2', mssql.VarChar(50), finalBody.P_ADDRESS2); request.input('P_CITY', mssql.VarChar(30), finalBody.P_CITY); request.input('P_STATE', mssql.VarChar(2), finalBody.P_STATE); request.input('P_ZIP', mssql.VarChar(10), finalBody.P_ZIP); request.input('P_COUNTRY', mssql.VarChar(2), finalBody.P_COUNTRY); request.input('P_USERID', mssql.VarChar(50), finalBody.P_USERID); const contactTable = new mssql.Table('carnetsys.ContactsTable'); contactTable.create = true; contactTable.columns.add('FirstName', mssql.VarChar(50)); contactTable.columns.add('LastName', mssql.VarChar(50)); contactTable.columns.add('MiddleInitial', mssql.VarChar(3)); contactTable.columns.add('Title', mssql.VarChar(50)); contactTable.columns.add('EmailAddress', mssql.VarChar(100)); contactTable.columns.add('PhoneNo', mssql.VarChar(20)); contactTable.columns.add('MobileNo', mssql.VarChar(20)); contactTable.columns.add('FaxNo', mssql.VarChar(20)); // finalBody.P_CONTACTSTABLE && finalBody.P_CONTACTSTABLE.forEach((contact) => { // contactTable.rows.add( // contact.P_FIRSTNAME, // contact.P_LASTNAME, // contact.P_MIDDLEINITIAL, // contact.P_TITLE, // contact.P_EMAILADDRESS, // contact.P_PHONENO, // contact.P_MOBILENO, // contact.P_FAXNO, // ); // }); // request.input('p_contactstable', contactTable); const result = await request.execute('carnetsys.CreateHolderData'); return { data: result.recordset }; } catch (error) { return { error: error.message }; } }; GetHolderRecord = async (body: GetHolderDTO) => { let connection: mssql.ConnectionPool; try { connection = await this.mssqlDBService.getConnection(); const request: Request = new Request(connection); request.input('P_SPID', mssql.Int, body.P_SPID); request.input('P_HOLDERID', mssql.Int, body.P_HOLDERID); const result = await request.execute('carnetsys.GetHolderMaster'); return { data: result.recordset }; } catch (error) { return { error: error.message }; } }; UpdateHolder = async (body: UpdateHolderDTO) => { let connection: mssql.ConnectionPool; try { connection = await this.mssqlDBService.getConnection(); const request: Request = new mssql.Request(connection); request.input('P_HOLDERID', mssql.Int, body.P_HOLDERID); request.input('P_SPID', mssql.Int, body.P_SPID); request.input('P_LOCATIONID', mssql.Int, body.P_LOCATIONID); request.input('P_HOLDERNO', mssql.VarChar(15), body.P_HOLDERNO); request.input('P_HOLDERTYPE', mssql.VarChar(3), body.P_HOLDERTYPE); request.input('P_USCIBMEMBERFLAG', mssql.VarChar(1), body.P_USCIBMEMBERFLAG); request.input('P_GOVAGENCYFLAG', mssql.VarChar(1), body.P_GOVAGENCYFLAG); request.input('P_HOLDERNAME', mssql.VarChar(50), body.P_HOLDERNAME); request.input('P_NAMEQUALIFIER', mssql.VarChar(10), body.P_NAMEQUALIFIER); request.input('P_ADDLNAME', mssql.VarChar(50), body.P_ADDLNAME); request.input('P_ADDRESS1', mssql.VarChar(50), body.P_ADDRESS1); request.input('P_ADDRESS2', mssql.VarChar(50), body.P_ADDRESS2); request.input('P_CITY', mssql.VarChar(30), body.P_CITY); request.input('P_STATE', mssql.VarChar(2), body.P_STATE); request.input('P_ZIP', mssql.VarChar(10), body.P_ZIP); request.input('P_COUNTRY', mssql.VarChar(2), body.P_COUNTRY); request.input('P_USERID', mssql.VarChar(100), body.P_USERID); const result = await request.execute('carnetsys.UpdateHolders'); return { data: result.recordset }; } catch (error) { return { error: error.message }; } }; UpdateHolderContact = async (body: UpdateHolderContactDTO) => { let connection: mssql.ConnectionPool; try { connection = await this.mssqlDBService.getConnection(); const request: Request = new mssql.Request(connection); request.input('P_HOLDERCONTACTID', mssql.Int, body.P_HOLDERCONTACTID); request.input('P_SPID', mssql.Int, body.P_SPID); request.input('P_FIRSTNAME', mssql.VarChar(50), body.P_FIRSTNAME); request.input('P_LASTNAME', mssql.VarChar(50), body.P_LASTNAME); request.input('P_MIDDLEINITIAL', mssql.VarChar(3), body.P_MIDDLEINITIAL); request.input('P_TITLE', mssql.VarChar(50), body.P_TITLE); request.input('P_PHONENO', mssql.VarChar(20), body.P_PHONENO); request.input('P_MOBILENO', mssql.VarChar(20), body.P_MOBILENO); request.input('P_FAXNO', mssql.VarChar(20), body.P_FAXNO); request.input('P_EMAILADDRESS', mssql.VarChar(100), body.P_EMAILADDRESS); request.input('P_USERID', mssql.VarChar(100), body.P_USERID); const result = await request.execute('carnetsys.UpdateHolderContacts'); return { data: result.recordset }; } catch (error) { return { error: error.message }; } }; GetHolderContacts = async (body: GetHolderDTO) => { let connection: mssql.ConnectionPool; try { connection = await this.mssqlDBService.getConnection(); const request: Request = new Request(connection); request.input('P_SPID', mssql.Int, body.P_SPID); request.input('P_HOLDERID', mssql.Int, body.P_HOLDERID); const result = await request.execute('carnetsys.GetHolderContacts'); return { data: result.recordset }; } catch (error) { return { error: error.message }; } }; InactivateHolder = async (body: HolderActivateOrInactivateDTO) => { console.log(body); let connection: mssql.ConnectionPool; try { connection = await this.mssqlDBService.getConnection(); const request: Request = new Request(connection); request.input('P_SPID', mssql.Int, body.P_SPID); request.input('P_HOLDERID', mssql.Int, body.P_HOLDERID); request.input('P_USERID', mssql.VarChar(100), body.P_USERID); const result = await request.execute('carnetsys.InactivateHolder'); return { data: result.recordset }; } catch (error) { return { error: error.message }; } }; ReactivateHolder = async (body: HolderActivateOrInactivateDTO) => { let connection: mssql.ConnectionPool; try { connection = await this.mssqlDBService.getConnection(); const request: Request = new Request(connection); request.input('P_SPID', mssql.Int, body.P_SPID); request.input('P_HOLDERID', mssql.Int, body.P_HOLDERID); request.input('P_USERID', mssql.VarChar(100), body.P_USERID); const result = await request.execute('carnetsys.ReactivateHolder'); return { data: result.recordset }; } catch (error) { return { error: error.message }; } }; InactivateHolderContact = async (body: HolderContactActivateOrInactivateDTO) => { let connection: mssql.ConnectionPool; try { connection = await this.mssqlDBService.getConnection(); const request: Request = new Request(connection); request.input('P_SPID', mssql.Int, body.P_SPID); request.input('P_HOLDERCONTACTID', mssql.Int, body.P_HOLDERCONTACTID); request.input('P_USERID', mssql.VarChar(100), body.P_USERID); const result = await request.execute('carnetsys.InactivateHolderContact'); return { data: result.recordset }; } catch (error) { return { error: error.message }; } }; ReactivateHolderContact = async (body: HolderContactActivateOrInactivateDTO) => { let connection: mssql.ConnectionPool; try { connection = await this.mssqlDBService.getConnection(); const request: Request = new Request(connection); request.input('P_SPID', mssql.Int, body.P_SPID); request.input('P_HOLDERCONTACTID', mssql.Int, body.P_HOLDERCONTACTID); request.input('P_USERID', mssql.VarChar(100), body.P_USERID); const result = await request.execute('carnetsys.ReactivateHolderContact'); return { data: result.recordset }; } catch (error) { return { error: error.message }; } }; }