Skip to content

Commit 6c35352

Browse files
authored
Merge pull request #223 from companieshouse/feature/BI-8867_add-llp-lp-fields
BI-8867 Add LLP and LP fields to certs, orders models
2 parents 89bdb94 + 45aaedc commit 6c35352

File tree

6 files changed

+462
-21
lines changed

6 files changed

+462
-21
lines changed

src/services/order/certificates/mapping.ts

Lines changed: 109 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,24 @@ import {
44
ItemCostsResource, CertificateItemPostRequest, CertificateItemRequestResource,
55
ItemOptionsRequest, CertificateItemPatchRequest, DirectorOrSecretaryDetails, DirectorOrSecretaryDetailsResource,
66
RegisteredOfficeAddressDetailsResource, RegisteredOfficeAddressDetails, DirectorOrSecretaryDetailsRequest,
7-
RegisteredOfficeAddressDetailsRequest
7+
DesignatedMemberDetails,
8+
DesignatedMemberDetailsResource,
9+
GeneralPartnerDetails,
10+
LimitedPartnerDetailsResource,
11+
OrdinaryMemberDetailsResource,
12+
PrinciplePlaceOfBusinessDetailsResource,
13+
AddressDetailsRequest,
14+
AddressDetailsResource,
15+
GeneralPartnerDetailsResource,
16+
MemberDetails,
17+
MemberDetailsRequest,
18+
MemberDetailsResource,
19+
PartnerDetailsRequest,
20+
PartnerDetailsResource,
21+
PartnerDetails,
22+
PrinciplePlaceOfBusinessDetails,
23+
OrdinaryMemberDetails,
24+
LimitedPartnerDetails
825
} from "./types";
926

1027
export default class CertificateMapping {
@@ -13,28 +30,48 @@ export default class CertificateMapping {
1330
const itemOptions: ItemOptionsRequest = certificateItemRequest.itemOptions;
1431

1532
const directorDetails: DirectorOrSecretaryDetailsResource =
16-
this.mapDirectorOrSecretaryDetailsRequestDirectorOrSecretaryDetailsResource(itemOptions.directorDetails);
33+
this.mapDirectorOrSecretaryDetailsRequestDirectorOrSecretaryDetailsResource(itemOptions.directorDetails);
1734

1835
const secretaryDetails: DirectorOrSecretaryDetailsResource =
19-
this.mapDirectorOrSecretaryDetailsRequestDirectorOrSecretaryDetailsResource(itemOptions.secretaryDetails);
36+
this.mapDirectorOrSecretaryDetailsRequestDirectorOrSecretaryDetailsResource(itemOptions.secretaryDetails);
2037

2138
const registeredOfficeAddressDetails: RegisteredOfficeAddressDetailsResource =
22-
this.mapRegisteredOfficeRequestToRegisteredOfficeDetails(itemOptions.registeredOfficeAddressDetails);
39+
this.mapAddressDetailsRequestToAddressDetailsResource(itemOptions.registeredOfficeAddressDetails);
2340

41+
const principlePlaceOfBusinessDetails: PrinciplePlaceOfBusinessDetailsResource =
42+
this.mapAddressDetailsRequestToAddressDetailsResource(itemOptions.principlePlaceOfBusinessDetails);
43+
44+
const designatedMemberDetails: DesignatedMemberDetailsResource =
45+
this.mapMemberDetailsRequestToMemberDetailsResource(itemOptions.designatedMemberDetails);
46+
47+
const ordinaryMemberDetails: OrdinaryMemberDetailsResource =
48+
this.mapMemberDetailsRequestToMemberDetailsResource(itemOptions.memberDetails);
49+
50+
const generalPartnerDetails: GeneralPartnerDetailsResource =
51+
this.mapPartnerDetailsRequestToPartnerDetailsResource(itemOptions.generalPartnerDetails);
52+
53+
const limitedPartnerDetails: LimitedPartnerDetailsResource =
54+
this.mapPartnerDetailsRequestToPartnerDetailsResource(itemOptions.limitedPartnerDetails);
2455
return {
2556
customer_reference: certificateItemRequest.customerReference,
2657
company_number: certificateItemRequest.companyNumber,
2758
item_options: {
59+
company_type: itemOptions.companyType,
2860
certificate_type: itemOptions.certificateType,
2961
collection_location: itemOptions.collectionLocation,
3062
contact_number: itemOptions.contactNumber,
3163
delivery_method: itemOptions.deliveryMethod,
3264
delivery_timescale: itemOptions.deliveryTimescale,
65+
designated_member_details: designatedMemberDetails,
3366
director_details: directorDetails,
3467
forename: itemOptions.forename,
68+
general_partner_details: generalPartnerDetails,
3569
include_company_objects_information: itemOptions.includeCompanyObjectsInformation,
3670
include_email_copy: itemOptions.includeEmailCopy,
3771
include_good_standing_information: itemOptions.includeGoodStandingInformation,
72+
limited_partner_details: limitedPartnerDetails,
73+
member_details: ordinaryMemberDetails,
74+
principle_place_of_business_details: principlePlaceOfBusinessDetails,
3875
registered_office_address_details: registeredOfficeAddressDetails,
3976
secretary_details: secretaryDetails,
4077
surname: itemOptions.surname
@@ -47,13 +84,28 @@ export default class CertificateMapping {
4784
const io = body.item_options as ItemOptionsResource;
4885

4986
const directorDetails: DirectorOrSecretaryDetails =
50-
this.mapDirectorOrSecretaryDetailsResourceToDirectorOrSecretaryDetails(io.director_details);
87+
this.mapDirectorOrSecretaryDetailsResourceToDirectorOrSecretaryDetails(io.director_details);
5188

5289
const secretaryDetails: DirectorOrSecretaryDetails =
53-
this.mapDirectorOrSecretaryDetailsResourceToDirectorOrSecretaryDetails(io.secretary_details);
90+
this.mapDirectorOrSecretaryDetailsResourceToDirectorOrSecretaryDetails(io.secretary_details);
5491

5592
const registeredOfficeAddressDetails: RegisteredOfficeAddressDetails =
56-
this.mapRegisteredOfficeResourceToRegisteredOffice(io.registered_office_address_details);
93+
this.mapAddressDetailsResourceToAddressDetails(io.registered_office_address_details);
94+
95+
const principlePlaceOfBusinessDetails: PrinciplePlaceOfBusinessDetails =
96+
this.mapAddressDetailsResourceToAddressDetails(io.principle_place_of_business_details);
97+
98+
const designatedMemberDetails: DesignatedMemberDetails =
99+
this.mapMemberDetailsResourceToMemberDetails(io.designated_member_details);
100+
101+
const ordinaryMemberDetails: OrdinaryMemberDetails =
102+
this.mapMemberDetailsResourceToMemberDetails(io.member_details);
103+
104+
const generalPartnerDetails: GeneralPartnerDetails =
105+
this.mapPartnerDetailsResourceToPartnerDetails(io.general_partner_details);
106+
107+
const limitedPartnerDetails: LimitedPartnerDetails =
108+
this.mapPartnerDetailsResourceToPartnerDetails(io.limited_partner_details);
57109

58110
const certificateItem: CertificateItem = {
59111
companyName: body.company_name,
@@ -73,14 +125,20 @@ export default class CertificateMapping {
73125
itemOptions: {
74126
certificateType: io.certificate_type,
75127
collectionLocation: io.collection_location,
128+
companyType: io.company_type,
76129
contactNumber: io.contact_number,
77130
deliveryMethod: io.delivery_method,
78131
deliveryTimescale: io.delivery_timescale,
132+
designatedMemberDetails,
79133
directorDetails,
80134
forename: io.forename,
135+
generalPartnerDetails,
81136
includeCompanyObjectsInformation: io.include_company_objects_information,
82137
includeEmailCopy: io.include_email_copy,
83138
includeGoodStandingInformation: io.include_good_standing_information,
139+
limitedPartnerDetails,
140+
memberDetails: ordinaryMemberDetails,
141+
principlePlaceOfBusinessDetails,
84142
registeredOfficeAddressDetails,
85143
secretaryDetails,
86144
surname: io.surname
@@ -115,9 +173,9 @@ export default class CertificateMapping {
115173
: undefined;
116174
}
117175

118-
private static mapRegisteredOfficeRequestToRegisteredOfficeDetails (
119-
request: RegisteredOfficeAddressDetailsRequest): RegisteredOfficeAddressDetailsResource {
120-
const registeredOfficeAddressDetails: RegisteredOfficeAddressDetailsResource = {
176+
private static mapAddressDetailsRequestToAddressDetailsResource (
177+
request: AddressDetailsRequest): AddressDetailsResource {
178+
const registeredOfficeAddressDetails: AddressDetailsResource = {
121179
include_address_records_type: request?.includeAddressRecordsType,
122180
include_dates: request?.includeDates
123181
};
@@ -144,7 +202,7 @@ export default class CertificateMapping {
144202
: undefined;
145203
}
146204

147-
private static mapRegisteredOfficeResourceToRegisteredOffice (
205+
private static mapAddressDetailsResourceToAddressDetails (
148206
resource: RegisteredOfficeAddressDetailsResource): RegisteredOfficeAddressDetails {
149207
const registeredOfficeAddressDetails: RegisteredOfficeAddressDetails = {
150208
includeAddressRecordsType: resource?.include_address_records_type,
@@ -155,4 +213,44 @@ export default class CertificateMapping {
155213
? registeredOfficeAddressDetails
156214
: undefined;
157215
}
216+
217+
private static mapMemberDetailsRequestToMemberDetailsResource (request: MemberDetailsRequest): MemberDetailsResource {
218+
const memberDetailsResource: MemberDetailsResource = {
219+
include_address: request?.includeAddress,
220+
include_appointment_date: request?.includeAppointmentDate,
221+
include_basic_information: request?.includeBasicInformation,
222+
include_country_of_residence: request?.includeCountryOfResidence,
223+
include_dob_type: request?.includeDobType
224+
};
225+
return Object.values(memberDetailsResource).some((value) => value !== undefined)
226+
? memberDetailsResource
227+
: undefined;
228+
}
229+
230+
private static mapMemberDetailsResourceToMemberDetails (resource: MemberDetailsResource): MemberDetails {
231+
const memberDetails: MemberDetails = {
232+
includeAddress: resource?.include_address,
233+
includeAppointmentDate: resource?.include_appointment_date,
234+
includeBasicInformation: resource?.include_basic_information,
235+
includeCountryOfResidence: resource?.include_country_of_residence,
236+
includeDobType: resource?.include_dob_type
237+
};
238+
return Object.values(memberDetails).some((value) => value !== undefined)
239+
? memberDetails
240+
: undefined;
241+
}
242+
243+
private static mapPartnerDetailsRequestToPartnerDetailsResource (request: PartnerDetailsRequest): PartnerDetailsResource {
244+
const partnerDetailsResource: PartnerDetailsResource = {
245+
include_basic_information: request?.includeBasicInformation
246+
};
247+
return Object.values(partnerDetailsResource).some((value) => value !== undefined) ? partnerDetailsResource : undefined;
248+
}
249+
250+
private static mapPartnerDetailsResourceToPartnerDetails (resource: PartnerDetailsResource): PartnerDetails {
251+
const partnerDetails: PartnerDetails = {
252+
includeBasicInformation: resource?.include_basic_information
253+
};
254+
return Object.values(partnerDetails).some((value) => value !== undefined) ? partnerDetails : undefined;
255+
}
158256
}

src/services/order/certificates/types.ts

Lines changed: 118 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,20 @@ export interface ItemCostsResource {
3131
export interface ItemOptionsResource {
3232
certificate_type: string;
3333
collection_location: string;
34+
company_type: string;
3435
contact_number: string;
3536
delivery_method: string;
3637
delivery_timescale: string;
38+
designated_member_details: DesignatedMemberDetailsResource;
3739
director_details: DirectorOrSecretaryDetailsResource;
3840
forename: string;
41+
general_partner_details: GeneralPartnerDetailsResource;
3942
include_company_objects_information: boolean;
4043
include_email_copy: boolean;
4144
include_good_standing_information: boolean;
45+
limited_partner_details: LimitedPartnerDetailsResource;
46+
member_details: OrdinaryMemberDetailsResource;
47+
principle_place_of_business_details: PrinciplePlaceOfBusinessDetailsResource;
4248
registered_office_address_details: RegisteredOfficeAddressDetailsResource;
4349
secretary_details: DirectorOrSecretaryDetailsResource;
4450
surname: string;
@@ -54,9 +60,39 @@ export interface DirectorOrSecretaryDetailsResource {
5460
include_occupation?: boolean;
5561
}
5662

57-
export interface RegisteredOfficeAddressDetailsResource {
58-
include_address_records_type: string;
59-
include_dates: boolean;
63+
export interface AddressDetailsResource {
64+
include_address_records_type?: string;
65+
include_dates?: boolean;
66+
}
67+
68+
export interface RegisteredOfficeAddressDetailsResource extends AddressDetailsResource {
69+
}
70+
71+
export interface PrinciplePlaceOfBusinessDetailsResource extends AddressDetailsResource {
72+
}
73+
74+
export interface MemberDetailsResource {
75+
include_address?: boolean;
76+
include_appointment_date?: boolean;
77+
include_basic_information?: boolean;
78+
include_country_of_residence?: boolean;
79+
include_dob_type?: string;
80+
}
81+
82+
export interface OrdinaryMemberDetailsResource extends MemberDetailsResource {
83+
}
84+
85+
export interface DesignatedMemberDetailsResource extends MemberDetailsResource {
86+
}
87+
88+
export interface PartnerDetailsResource {
89+
include_basic_information?: boolean;
90+
}
91+
92+
export interface GeneralPartnerDetailsResource extends PartnerDetailsResource {
93+
}
94+
95+
export interface LimitedPartnerDetailsResource extends PartnerDetailsResource {
6096
}
6197

6298
export interface LinksResource {
@@ -96,16 +132,22 @@ export interface ItemCosts {
96132
export interface ItemOptions {
97133
certificateType: string;
98134
collectionLocation: string;
135+
companyType: string;
99136
contactNumber: string;
100137
deliveryMethod: string;
101138
deliveryTimescale: string;
102-
directorDetails: DirectorOrSecretaryDetails;
139+
designatedMemberDetails?: DesignatedMemberDetails;
140+
directorDetails?: DirectorOrSecretaryDetails;
103141
forename: string;
142+
generalPartnerDetails?: GeneralPartnerDetails;
104143
includeCompanyObjectsInformation: boolean;
105144
includeEmailCopy: boolean;
106145
includeGoodStandingInformation: boolean;
107-
registeredOfficeAddressDetails: RegisteredOfficeAddressDetails;
108-
secretaryDetails: DirectorOrSecretaryDetails;
146+
limitedPartnerDetails?: LimitedPartnerDetails;
147+
memberDetails?: OrdinaryMemberDetails;
148+
principlePlaceOfBusinessDetails?: PrinciplePlaceOfBusinessDetails;
149+
registeredOfficeAddressDetails?: RegisteredOfficeAddressDetails;
150+
secretaryDetails?: DirectorOrSecretaryDetails;
109151
surname: string;
110152
}
111153

@@ -119,9 +161,39 @@ export interface DirectorOrSecretaryDetails {
119161
includeOccupation?: boolean;
120162
}
121163

122-
export interface RegisteredOfficeAddressDetails {
123-
includeAddressRecordsType: string;
124-
includeDates: boolean;
164+
export interface AddressDetails {
165+
includeAddressRecordsType?: string;
166+
includeDates?: boolean;
167+
}
168+
169+
export interface RegisteredOfficeAddressDetails extends AddressDetails {
170+
}
171+
172+
export interface PrinciplePlaceOfBusinessDetails extends AddressDetails {
173+
}
174+
175+
export interface MemberDetails {
176+
includeAddress?: boolean;
177+
includeAppointmentDate?: boolean;
178+
includeBasicInformation?: boolean;
179+
includeCountryOfResidence?: boolean;
180+
includeDobType?: string;
181+
}
182+
183+
export interface OrdinaryMemberDetails extends MemberDetails {
184+
}
185+
186+
export interface DesignatedMemberDetails extends MemberDetails {
187+
}
188+
189+
export interface PartnerDetails {
190+
includeBasicInformation?: boolean;
191+
}
192+
193+
export interface GeneralPartnerDetails extends PartnerDetails {
194+
}
195+
196+
export interface LimitedPartnerDetails extends PartnerDetails {
125197
}
126198

127199
export interface Links {
@@ -147,14 +219,20 @@ export interface CertificateItemPatchRequest {
147219
export interface ItemOptionsRequest {
148220
certificateType?: string;
149221
collectionLocation?: string;
222+
companyType?: string;
150223
contactNumber?: string;
151224
deliveryMethod?: string;
152225
deliveryTimescale?: string;
226+
designatedMemberDetails?: DesignatedMemberDetailsRequest;
153227
directorDetails?: DirectorOrSecretaryDetailsRequest;
154228
forename?: string;
229+
generalPartnerDetails?: GeneralPartnerDetailsRequest;
155230
includeCompanyObjectsInformation?: boolean | null;
156231
includeEmailCopy?: boolean;
157232
includeGoodStandingInformation?: boolean | null;
233+
limitedPartnerDetails?: LimitedPartnerDetailsRequest;
234+
memberDetails?: OrdinaryMemberDetailsRequest;
235+
principlePlaceOfBusinessDetails?: PrinciplePlaceOfBusinessDetailsRequest;
158236
registeredOfficeAddressDetails?: RegisteredOfficeAddressDetailsRequest;
159237
secretaryDetails?: DirectorOrSecretaryDetailsRequest;
160238
surname?: string;
@@ -170,11 +248,41 @@ export interface DirectorOrSecretaryDetailsRequest {
170248
includeOccupation?: boolean | null;
171249
}
172250

173-
export interface RegisteredOfficeAddressDetailsRequest {
251+
export interface AddressDetailsRequest {
174252
includeAddressRecordsType?: string | null;
175253
includeDates?: boolean;
176254
}
177255

256+
export interface RegisteredOfficeAddressDetailsRequest extends AddressDetailsRequest {
257+
}
258+
259+
export interface PrinciplePlaceOfBusinessDetailsRequest extends AddressDetailsRequest {
260+
}
261+
262+
export interface MemberDetailsRequest {
263+
includeAddress?: boolean | null;
264+
includeAppointmentDate?: boolean | null;
265+
includeBasicInformation?: boolean | null;
266+
includeCountryOfResidence?: boolean | null;
267+
includeDobType?: string | null;
268+
}
269+
270+
export interface OrdinaryMemberDetailsRequest extends MemberDetailsRequest {
271+
}
272+
273+
export interface DesignatedMemberDetailsRequest extends MemberDetailsRequest {
274+
}
275+
276+
export interface PartnerDetailsRequest {
277+
includeBasicInformation?: boolean | null;
278+
}
279+
280+
export interface GeneralPartnerDetailsRequest extends PartnerDetailsRequest {
281+
}
282+
283+
export interface LimitedPartnerDetailsRequest extends PartnerDetailsRequest {
284+
}
285+
178286
// CertificateItemRequestResource
179287
export interface CertificateItemRequestResource {
180288
company_number?: string;

0 commit comments

Comments
 (0)