diff --git a/src/mssql/manage-clients/manage-clients.controller.ts b/src/mssql/manage-clients/manage-clients.controller.ts index c9ee1fd..db08d30 100644 --- a/src/mssql/manage-clients/manage-clients.controller.ts +++ b/src/mssql/manage-clients/manage-clients.controller.ts @@ -1,13 +1,13 @@ -import { Body, Controller, Get, Post, Query } from '@nestjs/common'; +import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common'; import { ManageClientsService } from './manage-clients.service'; import { ApiTags } from '@nestjs/swagger'; -import { CreateClientDataDTO, GetPreparerByClientidContactsByClientidLocByClientidDTO } from 'src/oracle/manage-clients/manage-clients.dto'; +import { CreateAdditionalClientContactsDTO, CreateClientDataDTO, GetPreparerByClientidContactsByClientidLocByClientidDTO, UpdateClientContactsDTO, UpdateClientDTO } from 'src/oracle/manage-clients/manage-clients.dto'; @Controller('mssql') export class ManageClientsController { - constructor(private readonly manageClientsService: ManageClientsService) {} + constructor(private readonly manageClientsService: ManageClientsService) { } - @ApiTags('Manage Clients - Oracle') + @ApiTags('Manage Clients - Mssql') @Post('CreateNewClients') async CreateClientData(@Body() body: CreateClientDataDTO) { return this.manageClientsService.CreateClientData(body); @@ -20,4 +20,24 @@ export class ManageClientsController { ) { return this.manageClientsService.GetPreparerByClientid(body); } + + @ApiTags('Manage Clients - Mssql') + @Put('UpdateClient') + async UpdateClient(@Body() body: UpdateClientDTO) { + return this.manageClientsService.UpdateClient(body); + } + + @ApiTags('Manage Clients - Mssql') + @Post('CreateAdditionalClientContacts') + CreateClientContact(@Body() body: CreateAdditionalClientContactsDTO) { + return this.manageClientsService.CreateClientContact(body); + } + + @ApiTags('Manage Clients - Mssql') + @Put('UpdateClientContacts') + UpdateClientContacts(@Body() body: UpdateClientContactsDTO) { + return this.manageClientsService.UpdateClientContacts(body); + } + + } diff --git a/src/mssql/manage-clients/manage-clients.service.ts b/src/mssql/manage-clients/manage-clients.service.ts index 6393fdd..67941ec 100644 --- a/src/mssql/manage-clients/manage-clients.service.ts +++ b/src/mssql/manage-clients/manage-clients.service.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; import { Connection, Request } from 'mssql'; import { MssqlDBService } from 'src/db/db.service'; -import { CreateClientDataDTO, GetPreparerByClientidContactsByClientidLocByClientidDTO } from 'src/oracle/manage-clients/manage-clients.dto'; +import { CreateAdditionalClientContactsDTO, CreateClientDataDTO, GetPreparerByClientidContactsByClientidLocByClientidDTO, UpdateClientContactsDTO, UpdateClientDTO } from 'src/oracle/manage-clients/manage-clients.dto'; import * as mssql from 'mssql'; @Injectable() export class ManageClientsService { - constructor(private readonly mssqlDBService: MssqlDBService) {} + constructor(private readonly mssqlDBService: MssqlDBService) { } CreateClientData = async (body: CreateClientDataDTO) => { const newBody = { @@ -42,7 +42,7 @@ export class ManageClientsService { const finalBody: CreateClientDataDTO = { ...newBody, ...reqBody }; - let connection: Connection; +let connection: Connection; // Fixed duplicate declaration try { connection = await this.mssqlDBService.getConnection(); const request = new Request(connection); @@ -122,8 +122,7 @@ export class ManageClientsService { }; GetPreparerByClientid = async (body: GetPreparerByClientidContactsByClientidLocByClientidDTO) => { - let connection; - + let connection: Connection; try { connection = await this.mssqlDBService.getConnection(); const request = new Request(connection); @@ -139,4 +138,203 @@ export class ManageClientsService { } } }; + + UpdateClient = async (body: UpdateClientDTO) => { + const newBody = { + p_spid: null, + p_clientid: null, + p_preparername: null, + p_address1: null, + p_address2: null, + p_city: null, + p_state: null, + p_zip: null, + p_country: null, + p_revenuelocation: null, + p_userid: 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: UpdateClientDTO = { ...newBody, ...reqBody }; + + let connection: Connection; + + try { + connection = await this.mssqlDBService.getConnection(); + const request = new Request(connection); + request.input('p_spid', mssql.Int, finalBody.p_spid); + request.input('p_clientid', mssql.Int, finalBody.p_clientid); + request.input('p_preparername', mssql.VarChar(50), finalBody.p_preparername); + 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_revenuelocation', mssql.VarChar(2), finalBody.p_revenuelocation); + request.input('p_userid', mssql.VarChar(100), finalBody.p_userid); + + + const result = await request.execute('carnetsys.UpdateClient'); + return { data: result.recordset }; + } catch (error) { + console.error('Error executing stored procedure:', error); + return { error: error.message }; + } finally { + if (connection) { + connection.close(); + } + } + }; + + CreateClientContact = async (body: CreateAdditionalClientContactsDTO) => { + const newBody = { + p_spid: null, + p_clientid: null, + p_contactstable: null, + p_defcontactflag: null, + p_userid: 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: CreateAdditionalClientContactsDTO = { + ...newBody, + ...reqBody, + }; + + let connection: Connection; + try { + connection = await this.mssqlDBService.getConnection(); + const request = new Request(connection); + request.input('p_spid', mssql.Int, finalBody.p_spid); + request.input('p_clientid', mssql.Int, finalBody.p_clientid); + + 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.forEach((contact) => { + contactTable.rows.add( + contact.FirstName, + contact.LastName, + contact.MiddleInitial, + contact.Title, + contact.EmailAddress, + contact.PhoneNo, + contact.MobileNo, + contact.FaxNo, + ); + }); + + request.input('p_contactstable', contactTable); + + request.input('p_defcontactflag', mssql.VarChar(1), finalBody.p_defcontactflag); + request.input('p_userid', mssql.VarChar(100), finalBody.p_userid); + + + const result = await request.execute('carnetsys.CreateClientContact'); + return { data: result.recordset }; + } catch (error) { + console.error('Error executing stored procedure:', error); + return { error: error.message }; + } finally { + if (connection) { + connection.close(); + } + } + }; + + UpdateClientContacts = async (body: UpdateClientContactsDTO) => { + const newBody = { + p_spid: null, + p_clientcontactid: null, + p_firstname: null, + p_lastname: null, + p_middleinitial: null, + p_title: null, + p_phone: null, + p_fax: null, + p_mobileno: null, + p_emailaddress: null, + p_userid: 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: UpdateClientContactsDTO = { ...newBody, ...reqBody }; + + let connection: Connection; + try { + connection = await this.mssqlDBService.getConnection(); + const request = new Request(connection); + request.input('p_spid', mssql.Int, finalBody.p_spid); + request.input('p_clientcontactid', mssql.Int, finalBody.p_clientcontactid); + request.input('p_firstname', mssql.VarChar(50), finalBody.p_firstname); + request.input('p_lastname', mssql.VarChar(50), finalBody.p_lastname); + request.input('p_middleinitial', mssql.VarChar(3), finalBody.p_middleinitial); + request.input('p_title', mssql.VarChar(50), finalBody.p_title); + request.input('p_phone', mssql.VarChar(20), finalBody.p_phone); + request.input('p_fax', mssql.VarChar(20), finalBody.p_fax); + request.input('p_mobileno', mssql.VarChar(20), finalBody.p_mobileno); + request.input('p_emailaddress', mssql.VarChar(100), finalBody.p_emailaddress); + request.input('p_userid', mssql.VarChar(100), finalBody.p_userid); + + const result = await request.execute('carnetsys.UpdateClientContacts'); + return { data: result.recordset }; + } catch (error) { + console.error('Error executing stored procedure:', error); + return { error: error.message }; + } finally { + if (connection) { + connection.close(); + } + } + + }; + }