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..53a02bef9 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 = '