diff --git a/src/dto/manage-clients/manage-clients.dto.ts b/src/dto/manage-clients/manage-clients.dto.ts index fadc8b5..d163bae 100644 --- a/src/dto/manage-clients/manage-clients.dto.ts +++ b/src/dto/manage-clients/manage-clients.dto.ts @@ -121,7 +121,8 @@ export class GetClientDTO extends IntersectionType( ) { } export class ClientContactControlsDTO extends IntersectionType( - GetClientDTO, + SPID_DTO, + CLIENT_CONTACTID_DTO, USERID_DTO ) { } diff --git a/src/dto/manage-holders/manage-holders-property.dto.ts b/src/dto/manage-holders/manage-holders-property.dto.ts index 3391953..f54cf79 100644 --- a/src/dto/manage-holders/manage-holders-property.dto.ts +++ b/src/dto/manage-holders/manage-holders-property.dto.ts @@ -98,7 +98,7 @@ export class CONTACTSTABLE_ROW_DTO extends IntersectionType( EMAIL_ADDRESS_DTO, PHONE_NO_DTO, MOBILE_NO_DTO, - FAX_NO_DTO + PartialType(FAX_NO_DTO) ) { } export class CONTACTSTABLE_DTO { diff --git a/src/dto/manage-holders/manage-holders.dto.ts b/src/dto/manage-holders/manage-holders.dto.ts index 9258bae..2867434 100644 --- a/src/dto/manage-holders/manage-holders.dto.ts +++ b/src/dto/manage-holders/manage-holders.dto.ts @@ -89,5 +89,9 @@ export class HolderContactActivateOrInactivateDTO extends IntersectionType( SPID_DTO, HOLDERCONTACTID_DTO, USERID_DTO -) { -} \ No newline at end of file +) {} + +export class SearchHolderDTO extends IntersectionType( + SPID_DTO, + HOLDERNAME_DTO +){} \ No newline at end of file diff --git a/src/oracle/manage-clients/manage-clients.service.ts b/src/oracle/manage-clients/manage-clients.service.ts index 694d9f1..2dbb72e 100644 --- a/src/oracle/manage-clients/manage-clients.service.ts +++ b/src/oracle/manage-clients/manage-clients.service.ts @@ -403,7 +403,7 @@ export class ManageClientsService { END;`, { P_SPID: { val: body.P_SPID, type: oracledb.DB_TYPE_NUMBER }, - P_CLIENTID: { val: body.P_CLIENTID, type: oracledb.DB_TYPE_NUMBER }, + P_CLIENTID: { val: body.P_CLIENTCONTACTID, type: oracledb.DB_TYPE_NUMBER }, P_USERID: { val: body.P_USERID, type: oracledb.DB_TYPE_NVARCHAR }, P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } }, @@ -447,7 +447,7 @@ export class ManageClientsService { END;`, { P_SPID: { val: body.P_SPID, type: oracledb.DB_TYPE_NUMBER }, - P_CLIENTID: { val: body.P_CLIENTID, type: oracledb.DB_TYPE_NUMBER }, + P_CLIENTID: { val: body.P_CLIENTCONTACTID, type: oracledb.DB_TYPE_NUMBER }, P_USERID: { val: body.P_USERID, type: oracledb.DB_TYPE_NVARCHAR }, P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } }, @@ -491,7 +491,7 @@ export class ManageClientsService { END;`, { P_SPID: { val: body.P_SPID, type: oracledb.DB_TYPE_NUMBER }, - P_CLIENTID: { val: body.P_CLIENTID, type: oracledb.DB_TYPE_NUMBER }, + P_CLIENTID: { val: body.P_CLIENTCONTACTID, type: oracledb.DB_TYPE_NUMBER }, P_USERID: { val: body.P_USERID, type: oracledb.DB_TYPE_NVARCHAR }, P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } }, diff --git a/src/oracle/manage-holders/manage-holders.controller.ts b/src/oracle/manage-holders/manage-holders.controller.ts index 79d3da5..23f555c 100644 --- a/src/oracle/manage-holders/manage-holders.controller.ts +++ b/src/oracle/manage-holders/manage-holders.controller.ts @@ -14,14 +14,19 @@ import { ManageHoldersService } from './manage-holders.service'; import { CreateHoldersDTO, GetHolderDTO, HolderActivateOrInactivateDTO, - HolderContactActivateOrInactivateDTO, UpdateHolderContactDTO, UpdateHolderDTO + HolderContactActivateOrInactivateDTO, SearchHolderDTO, UpdateHolderContactDTO, UpdateHolderDTO } from 'src/dto/property.dto'; +@ApiTags('Manage Holders - Oracle') @Controller('oracle') export class ManageHoldersController { constructor(private readonly manageHoldersService: ManageHoldersService) { } - @ApiTags('Manage Holders - Oracle') + @Get('SearchHolder/:P_SPID/:P_HOLDERNAME') + SearchHolder(@Param() param: SearchHolderDTO) { + return this.manageHoldersService.SearchHolder(param) + } + @Post('/CreateHolderData') CreateHolders(@Body() body: CreateHoldersDTO) { return this.manageHoldersService.CreateHolders(body); @@ -29,49 +34,41 @@ export class ManageHoldersController { // return {message:"Request received.."} } - @ApiTags('Manage Holders - Oracle') @Put('/UpdateHolder') UpdateHolder(@Body() body: UpdateHolderDTO) { return this.manageHoldersService.UpdateHolder(body); } - @ApiTags('Manage Holders - Oracle') @Put('/UpdateHolderContact') UpdateHolderContact(@Body() body: UpdateHolderContactDTO) { return this.manageHoldersService.UpdateHolderContact(body); } - @ApiTags('Manage Holders - Oracle') @Get('/GetHolderRecord/:P_SPID/:P_HOLDERID') GetHolderMaster(@Param() body: GetHolderDTO) { return this.manageHoldersService.GetHolderRecord(body); } - @ApiTags('Manage Holders - Oracle') @Get('/GetHolderContacts/:P_SPID/:P_HOLDERID') GetHolderContacts(@Param() body: GetHolderDTO) { return this.manageHoldersService.GetHolderContacts(body); } - @ApiTags('Manage Holders - Oracle') @Patch('/InactivateHolder/:P_SPID/:P_HOLDERID/:P_USERID') InactivateHolder(@Param() body: HolderActivateOrInactivateDTO) { return this.manageHoldersService.InactivateHolder(body); } - @ApiTags('Manage Holders - Oracle') @Patch('/ReactivateHolder/:P_SPID/:P_HOLDERID/:P_USERID') ReactivateHolder(@Param() body: HolderActivateOrInactivateDTO) { return this.manageHoldersService.ReactivateHolder(body); } - @ApiTags('Manage Holders - Oracle') @Patch('/InactivateHolderContact/:P_SPID/:P_HOLDERCONTACTID/:P_USERID') InactivateHolderContact(@Param() body: HolderContactActivateOrInactivateDTO) { return this.manageHoldersService.InactivateHolderContact(body); } - @ApiTags('Manage Holders - Oracle') @Patch('/ReactivateHolderContact/:P_SPID/:P_HOLDERCONTACTID/:P_USERID') ReactivateHolderContact(@Param() body: HolderContactActivateOrInactivateDTO) { return this.manageHoldersService.ReactivateHolderContact(body); diff --git a/src/oracle/manage-holders/manage-holders.service.ts b/src/oracle/manage-holders/manage-holders.service.ts index afed486..5079783 100644 --- a/src/oracle/manage-holders/manage-holders.service.ts +++ b/src/oracle/manage-holders/manage-holders.service.ts @@ -7,7 +7,7 @@ import { closeOracleDbConnection, fetchCursor, handleError, setEmptyStringsToNul import { CreateHoldersDTO, GetHolderDTO, HolderActivateOrInactivateDTO, - HolderContactActivateOrInactivateDTO, UpdateHolderContactDTO, UpdateHolderDTO + HolderContactActivateOrInactivateDTO, SearchHolderDTO, UpdateHolderContactDTO, UpdateHolderDTO } from 'src/dto/property.dto'; import { OracleService } from '../oracle.service'; import { BadRequestException } from 'src/exceptions/badRequest.exception'; @@ -562,4 +562,49 @@ export class ManageHoldersService { await closeOracleDbConnection(connection, ManageHoldersService.name) } }; + + SearchHolder = async (body: SearchHolderDTO) => { + let connection; + + try { + connection = await this.oracleDBService.getConnection(); + + const result: Result = await connection.execute( + `BEGIN + MANAGEHOLDER_PKG.SearchHolder( + :P_SPID, :P_HOLDERNAME, :P_CURSOR + ); + END;`, + { + P_SPID: { val: body.P_SPID, type: oracledb.DB_TYPE_NUMBER }, + P_HOLDERCONTACTID: { val: body.P_HOLDERNAME, type: oracledb.DB_TYPE_NUMBER }, + P_CURSOR: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } + }, + { + outFormat: oracledb.OUT_FORMAT_OBJECT, + }, + ); + + await connection.commit(); + + const outBinds: any = result.outBinds; + if (!outBinds?.P_CURSOR) { + this.logger.error('One or more expected cursors are missing from stored procedure output.'); + throw new InternalServerException("Incomplete data received from the database."); + } + + const fres: any = await fetchCursor(outBinds.P_CURSOR, ManageHoldersService.name); + + if (fres.length > 0 && fres[0].ERRORMESG) { + this.logger.warn(fres[0].ERRORMESG); + throw new BadRequestException(fres[0].ERRORMESG) + } + + return fres; + } catch (error) { + handleError(error, ManageHoldersService.name) + } finally { + await closeOracleDbConnection(connection, ManageHoldersService.name) + } + } } diff --git a/src/oracle/oracle.service.ts b/src/oracle/oracle.service.ts index c0f4334..9cc6fd8 100644 --- a/src/oracle/oracle.service.ts +++ b/src/oracle/oracle.service.ts @@ -165,7 +165,7 @@ export class OracleService { x.P_EMAILADDRESS, x.P_PHONENO, x.P_MOBILENO, - x.P_FAXNO, + x?.P_FAXNO, ); }), ) @@ -182,6 +182,46 @@ export class OracleService { } } + async get_CONTACTS_TABLE_INSTANCEX(finalBody: any) { + + // P_CONTACTSTABLE: { val: CONTACTSTABLE_INSTANCE, type: 'CARNETSYS.CONTACTSTABLE' } + + // P_CONTACTSTABLE: { val: CONTACTSTABLE_INSTANCE, type: oracledb.DB_TYPE_OBJECT } + // this is working fine for CreateCientContact + + let connection; + try { + connection = await this.oracleDBService.getConnection(); + + const CONTACTSROW = await connection.getDbObjectClass('C##CARNETSYS.CONTACTSROW'); + const CONTACTSARRAY = await connection.getDbObjectClass('C##CARNETSYS.CONTACTSARRAY'); + const CONTACTSTABLE = await connection.getDbObjectClass('C##CARNETSYS.CONTACTSTABLE'); + + const contactRows = finalBody.P_CONTACTSTABLE?.map((x: CONTACTSTABLE_ROW_DTO) => { + return new CONTACTSROW({ + FIRSTNAME: x.P_FIRSTNAME, + LASTNAME: x.P_LASTNAME, + MIDDLEINITIAL: x.P_MIDDLEINITIAL, + TITLE: x.P_TITLE, + EMAILADDRESS: x.P_EMAILADDRESS, + PHONENO: x.P_PHONENO, + MOBILENO: x.P_MOBILENO, + FAXNO: x.P_FAXNO, + }); + }) ?? []; + + const contactsArrayInstance = new CONTACTSARRAY(contactRows); + const CONTACTSTABLE_INSTANCE = new CONTACTSTABLE({ CONTACTS: contactsArrayInstance }); + + return CONTACTSTABLE_INSTANCE; + + } catch (error) { + throw new Error("Error occured completing this process") + } finally { + await closeOracleDbConnection(connection, OracleService.name) + } + } + async get_CLIENTLOCADDRESS_TABLE_INSTANCE(finalBody: any) { // P_CLIENTLOCADDRESSTABLE: { val: CLIENTLOCADDRESSTABLE_INSTANCE, type: 'CARNETSYS.CLIENTLOCADDRESSTABLE' }