From a38d8d36b0296591c2e9d095b677323b07f58fca Mon Sep 17 00:00:00 2001 From: kaioken Date: Tue, 9 Jul 2024 14:29:06 -0400 Subject: [PATCH 1/2] refact: allow all none process fields to custom fields --- ...nvertJsonTemplateToLeadStructureAction.php | 14 ++++ .../Integration/LeadReceiverParserTest.php | 71 +++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/src/Domains/Guild/Leads/Actions/ConvertJsonTemplateToLeadStructureAction.php b/src/Domains/Guild/Leads/Actions/ConvertJsonTemplateToLeadStructureAction.php index 8b69c18e0..d31206e13 100644 --- a/src/Domains/Guild/Leads/Actions/ConvertJsonTemplateToLeadStructureAction.php +++ b/src/Domains/Guild/Leads/Actions/ConvertJsonTemplateToLeadStructureAction.php @@ -86,6 +86,7 @@ public function parseLead(array $request, array $template): array { $parsedData = []; $customFields = []; + $processFields = []; // Initialize people structure with placeholders $peopleStructure = [ @@ -106,6 +107,19 @@ public function parseLead(array $request, array $template): array 'function' => $this->mapFunctionType($parsedData, $request, $info, $name), default => null }; + + $processFields[$name] = $value; + } + + if (! empty($request['company']) || ! empty($request['organization'])) { + $parsedData['organization'] = $request['company'] ?? $request['organization']; + } + + // Add remaining unprocessed fields to custom fields + foreach ($request as $key => $value) { + if (! array_key_exists($key, $processFields) && ! array_key_exists($key, $customFields)) { + $customFields[$key] = $value; + } } $parsedData['custom_fields'] = $customFields; diff --git a/tests/Guild/Integration/LeadReceiverParserTest.php b/tests/Guild/Integration/LeadReceiverParserTest.php index a216e9993..c8f48799c 100644 --- a/tests/Guild/Integration/LeadReceiverParserTest.php +++ b/tests/Guild/Integration/LeadReceiverParserTest.php @@ -76,6 +76,77 @@ public function testSimpleLeadParser(): void $this->assertEquals('lpr2230', $leadStructure['custom_fields']['member']); } + public function testExtraLeadParser(): void + { + $leadTemplate = ' + { + "Member": { + "name": "member", + "type": "customField" + }, + "firstname": { + "name": "firstname", + "type": "string" + }, + "lastname": { + "name": "lastname", + "type": "string" + }, + "phone": { + "name": "phone", + "type": "string" + }, + "email": { + "name": "email", + "type": "string" + } + }'; + + $name = fake()->name; + $phone = fake()->phoneNumber; + $email = fake()->email; + $lastname = fake()->lastName; + $url = fake()->url; + + $leadReceived = json_encode([ + 'firstname' => $name, + 'lastname' => $lastname, + 'phone' => $phone, + 'email' => $email, + 'Member' => 'lpr2230', + 'URL' => $url, + 'credit_score' => 'Poor', + 'SMS_Opt_Out' => '1', + 'CRE_Estimated_Property_Value' => '1', + 'CRE_Estimated_1st_Mortgage' => '1', + 'CRE_Loan_Purpose' => '1', + 'CRE_Amount_of_Loan_Request' => '1', + 'amount_requested' => '1', + 'business_name' => '1', + 'compay' => '1', + ]); + + $parseTemplate = new ConvertJsonTemplateToLeadStructureAction( + json_decode($leadTemplate, true), + json_decode($leadReceived, true) + ); + + $leadStructure = $parseTemplate->execute(); + + $this->assertIsArray($leadStructure); + $this->assertArrayHasKey('custom_fields', $leadStructure); + $this->assertArrayHasKey('people', $leadStructure); + $this->assertArrayHasKey('firstname', $leadStructure['people']); + $this->assertArrayHasKey('lastname', $leadStructure['people']); + $this->assertArrayHasKey('contacts', $leadStructure['people']); + $this->assertEquals($name, $leadStructure['people']['firstname']); + $this->assertEquals($lastname, $leadStructure['people']['lastname']); + $this->assertEquals($phone, $leadStructure['people']['contacts'][0]['value']); + $this->assertEquals($email, $leadStructure['people']['contacts'][1]['value']); + $this->assertEquals('lpr2230', $leadStructure['custom_fields']['member']); + $this->assertEquals('1', $leadStructure['custom_fields']['CRE_Estimated_1st_Mortgage']); + } + public function testComplexLearParser(): void { $leadTemplate = ' From 1c22e9b91a1ade43f61603bc3bdb5554a3b12b6c Mon Sep 17 00:00:00 2001 From: kaioken Date: Tue, 9 Jul 2024 14:32:17 -0400 Subject: [PATCH 2/2] refact: allow all none process fields to custom fields --- tests/Guild/Integration/LeadReceiverParserTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Guild/Integration/LeadReceiverParserTest.php b/tests/Guild/Integration/LeadReceiverParserTest.php index c8f48799c..53a02bef9 100644 --- a/tests/Guild/Integration/LeadReceiverParserTest.php +++ b/tests/Guild/Integration/LeadReceiverParserTest.php @@ -107,7 +107,7 @@ public function testExtraLeadParser(): void $email = fake()->email; $lastname = fake()->lastName; $url = fake()->url; - + $leadReceived = json_encode([ 'firstname' => $name, 'lastname' => $lastname,