UNPKG

@integration-tools/piece-2solar

Version:

2Solar integration for Activepieces

594 lines 27.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateLead = void 0; const tslib_1 = require("tslib"); const pieces_framework_1 = require("@activepieces/pieces-framework"); const index_1 = require("../../index"); const common_1 = require("../common"); exports.updateLead = (0, pieces_framework_1.createAction)({ name: 'update_lead', displayName: 'Update Lead', description: 'Updates information for an existing lead in the 2Solar system', auth: index_1.twoSolarAuth, props: { leadId: pieces_framework_1.Property.Number({ displayName: 'Lead ID', description: 'The ID of the lead to update (request_id)', required: true, }), // Request and Status Information leadGroupId: pieces_framework_1.Property.ShortText({ displayName: 'Lead Group ID', description: 'Group ID for the lead', required: false, }), requestClientStatusId: pieces_framework_1.Property.ShortText({ displayName: 'Request Client Status ID', description: 'Status ID for the client request', required: false, }), originalClientStatusId: pieces_framework_1.Property.ShortText({ displayName: 'Original Client Status ID', description: 'Original status ID for the client', required: false, }), originalStatus: pieces_framework_1.Property.ShortText({ displayName: 'Original Status', description: 'Original status of the lead', required: false, }), personId: pieces_framework_1.Property.ShortText({ displayName: 'Person ID', description: 'Unique identifier for the person', required: false, }), parentPersonId: pieces_framework_1.Property.ShortText({ displayName: 'Parent Person ID', description: 'ID of the parent person (if applicable)', required: false, }), requestDate: pieces_framework_1.Property.DateTime({ displayName: 'Request Date', description: 'Date when the request was created', required: false, }), requestTypeId: pieces_framework_1.Property.ShortText({ displayName: 'Request Type ID', description: 'ID of the request type', required: false, }), requestTypeName: pieces_framework_1.Property.ShortText({ displayName: 'Request Type Name', description: 'Name of the request type (e.g., "Zonnepanelen")', required: false, }), requestStatus: pieces_framework_1.Property.ShortText({ displayName: 'Request Status', description: 'Current status of the request', required: false, }), currentUserId: pieces_framework_1.Property.ShortText({ displayName: 'Current User ID', description: 'ID of the current assigned user', required: false, }), currentUserName: pieces_framework_1.Property.ShortText({ displayName: 'Current User Name', description: 'Name of the current assigned user', required: false, }), // Reference Information referenceNumber: pieces_framework_1.Property.ShortText({ displayName: 'Reference Number', description: 'Primary reference number', required: false, }), referenceNumber2: pieces_framework_1.Property.ShortText({ displayName: 'Reference Number 2', description: 'Secondary reference number', required: false, }), referenceNumber3: pieces_framework_1.Property.ShortText({ displayName: 'Reference Number 3', description: 'Tertiary reference number', required: false, }), // Banking and Company Information bankAccountNumber: pieces_framework_1.Property.ShortText({ displayName: 'Bank Account Number', description: 'Bank account number of the lead', required: false, }), ascription: pieces_framework_1.Property.ShortText({ displayName: 'Ascription', description: 'Ascription details', required: false, }), companyName: pieces_framework_1.Property.ShortText({ displayName: 'Company Name', description: 'Name of the company (if applicable)', required: false, }), // Personal Information gender: pieces_framework_1.Property.ShortText({ displayName: 'Gender', description: 'Gender of the lead (e.g., "m", "f", "u")', required: false, }), initials: pieces_framework_1.Property.ShortText({ displayName: 'Initials', description: 'Initials of the lead', required: false, }), firstName: pieces_framework_1.Property.ShortText({ displayName: 'First Name', description: 'First name of the lead', required: false, }), infix: pieces_framework_1.Property.ShortText({ displayName: 'Infix', description: 'Name infix (e.g., "de", "van", etc.)', required: false, }), lastName: pieces_framework_1.Property.ShortText({ displayName: 'Last Name', description: 'Last name of the lead', required: false, }), // Address Information address: pieces_framework_1.Property.ShortText({ displayName: 'Address', description: 'Street name', required: false, }), number: pieces_framework_1.Property.ShortText({ displayName: 'House Number', description: 'House or building number', required: false, }), numberAddition: pieces_framework_1.Property.ShortText({ displayName: 'House Number Addition', description: 'Additional house number information (e.g., "A", "III")', required: false, }), postcode: pieces_framework_1.Property.ShortText({ displayName: 'Postal Code', description: 'Postal code/ZIP code', required: false, }), city: pieces_framework_1.Property.ShortText({ displayName: 'City', description: 'City name', required: false, }), province: pieces_framework_1.Property.ShortText({ displayName: 'Province/State', description: 'Province or state name', required: false, }), country: pieces_framework_1.Property.ShortText({ displayName: 'Country', description: 'Country name', required: false, }), buildingProject: pieces_framework_1.Property.ShortText({ displayName: 'Building Project', description: 'Building project status', required: false, }), projectLocation: pieces_framework_1.Property.ShortText({ displayName: 'Project Location', description: 'Location of the project', required: false, }), projectLocationStatus: pieces_framework_1.Property.ShortText({ displayName: 'Project Location Status', description: 'Status of the project location', required: false, }), // Geographic Information longitude: pieces_framework_1.Property.ShortText({ displayName: 'Longitude', description: 'Longitude coordinate', required: false, }), latitude: pieces_framework_1.Property.ShortText({ displayName: 'Latitude', description: 'Latitude coordinate', required: false, }), // Contact Information telephone: pieces_framework_1.Property.ShortText({ displayName: 'Telephone', description: 'Landline telephone number', required: false, }), mobile: pieces_framework_1.Property.ShortText({ displayName: 'Mobile', description: 'Mobile phone number', required: false, }), email: pieces_framework_1.Property.ShortText({ displayName: 'Email', description: 'Email address', required: false, }), // Additional Information comments: pieces_framework_1.Property.LongText({ displayName: 'Comments', description: 'General comments', required: false, }), jaarlijksVerbruik: pieces_framework_1.Property.ShortText({ displayName: 'Annual Energy Usage', description: 'Annual energy consumption (jaarlijks verbruik)', required: false, }), clientId: pieces_framework_1.Property.ShortText({ displayName: 'Client ID', description: 'ID of the client', required: false, }), // Installation Information inspectionDate: pieces_framework_1.Property.DateTime({ displayName: 'Inspection Date', description: 'Date of inspection', required: false, }), indicationInstallationDate: pieces_framework_1.Property.DateTime({ displayName: 'Indication Installation Date', description: 'Indicated date for installation', required: false, }), installationDuration: pieces_framework_1.Property.ShortText({ displayName: 'Installation Duration', description: 'Duration of the installation', required: false, }), installationDate: pieces_framework_1.Property.DateTime({ displayName: 'Installation Date', description: 'Actual date of installation', required: false, }), // Extra Fields (Common Ones) oorsprongLead: pieces_framework_1.Property.ShortText({ displayName: 'Lead Origin', description: 'Origin of the lead (oorsprong lead)', required: false, }), monumentaalPand: pieces_framework_1.Property.ShortText({ displayName: 'Monumental Building', description: 'Whether the building is a monument (monumentaal pand)', required: false, }), asbestDak: pieces_framework_1.Property.ShortText({ displayName: 'Asbestos Roof', description: 'Whether there is asbestos under the roof (zit er asbest onder het dak)', required: false, }), typeDak: pieces_framework_1.Property.ShortText({ displayName: 'Roof Type', description: 'Type of roof (type dak)', required: false, }), dakbedekking: pieces_framework_1.Property.ShortText({ displayName: 'Roof Covering', description: 'Type of roof covering (wat voor een soort dakbedekking heeft jouw dak)', required: false, }), leeftijdSchuineDak: pieces_framework_1.Property.ShortText({ displayName: 'Age of Sloped Roof', description: 'Age of the sloped roof (wat is de leeftijd van jouw schuine dak)', required: false, }), leeftijdPlatteDak: pieces_framework_1.Property.ShortText({ displayName: 'Age of Flat Roof', description: 'Age of the flat roof (wat is de leeftijd van jouw platte dak)', required: false, }), opmerkingenIntake: pieces_framework_1.Property.LongText({ displayName: 'Intake Comments', description: 'Comments from the intake (opmerkingen uit intake)', required: false, }), yearlyKwhUsage: pieces_framework_1.Property.ShortText({ displayName: 'Yearly kWh Usage', description: 'Yearly electricity usage in kWh', required: false, }), restpunt: pieces_framework_1.Property.ShortText({ displayName: 'Rest Point', description: 'Rest point information (restpunt)', required: false, }), materialenBesteld: pieces_framework_1.Property.ShortText({ displayName: 'Materials Ordered', description: 'Whether all materials have been ordered (alle materialen besteld)', required: false, }), materialenVoorraad: pieces_framework_1.Property.ShortText({ displayName: 'Materials in Stock', description: 'Whether all materials are in stock (alle materialen op voorraad)', required: false, }), energyExpiryDate: pieces_framework_1.Property.DateTime({ displayName: 'Energy Expiry Date', description: 'Expiration date of energy contract', required: false, }), serviceOorzaak: pieces_framework_1.Property.ShortText({ displayName: 'Service Cause', description: 'Cause of service (service oorzaak)', required: false, }), // Dynamic Custom Fields customFieldsSection: pieces_framework_1.Property.MarkDown({ value: '## Dynamic Custom Fields\nAdd any number of custom fields with this builder.', }), // Dynamic Custom Fields Builder customFieldsArray: pieces_framework_1.Property.Array({ displayName: 'Custom Fields', description: 'Add any number of custom fields you need', required: false, properties: { fieldName: pieces_framework_1.Property.ShortText({ displayName: 'Field Name', description: 'Name of the custom field (how it will appear in the API)', required: true, }), fieldType: pieces_framework_1.Property.StaticDropdown({ displayName: 'Field Type', description: 'Type of the custom field', required: true, options: { options: [ { label: 'Text', value: 'text' }, { label: 'Number', value: 'number' }, { label: 'Boolean (Yes/No)', value: 'boolean' }, { label: 'Date (YYYY-MM-DD)', value: 'date' }, ], }, defaultValue: 'text', }), fieldValue: pieces_framework_1.Property.ShortText({ displayName: 'Field Value', description: 'Value for this field (for dates use YYYY-MM-DD format, for boolean use "yes" or "no")', required: true, }), }, }), }, run(context) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const props = context.propsValue; const auth = context.auth; // Create the payload with only the provided fields const updateData = {}; // Request and Status Information if (props.leadGroupId !== undefined) updateData['lead_group_id'] = props.leadGroupId; if (props.requestClientStatusId !== undefined) updateData['request_client_status_id'] = props.requestClientStatusId; if (props.originalClientStatusId !== undefined) updateData['original_client_status_id'] = props.originalClientStatusId; if (props.originalStatus !== undefined) updateData['original_status'] = props.originalStatus; if (props.personId !== undefined) updateData['person_id'] = props.personId; if (props.parentPersonId !== undefined) updateData['parent_person_id'] = props.parentPersonId; if (props.requestDate !== undefined) updateData['request_date'] = props.requestDate; if (props.requestTypeId !== undefined) updateData['request_type_id'] = props.requestTypeId; if (props.requestTypeName !== undefined) updateData['request_type_name'] = props.requestTypeName; if (props.requestStatus !== undefined) updateData['request_status'] = props.requestStatus; if (props.currentUserId !== undefined) updateData['current_user_id'] = props.currentUserId; if (props.currentUserName !== undefined) updateData['current_user_name'] = props.currentUserName; // Reference Information if (props.referenceNumber !== undefined) updateData['reference_number'] = props.referenceNumber; if (props.referenceNumber2 !== undefined) updateData['reference_number_2'] = props.referenceNumber2; if (props.referenceNumber3 !== undefined) updateData['reference_number_3'] = props.referenceNumber3; // Banking and Company Information if (props.bankAccountNumber !== undefined) updateData['bank_account_number'] = props.bankAccountNumber; if (props.ascription !== undefined) updateData['ascription'] = props.ascription; if (props.companyName !== undefined) updateData['company_name'] = props.companyName; // Personal Information if (props.gender !== undefined) updateData['gender'] = props.gender; if (props.initials !== undefined) updateData['initials'] = props.initials; if (props.firstName !== undefined) updateData['first_name'] = props.firstName; if (props.infix !== undefined) updateData['infix'] = props.infix; if (props.lastName !== undefined) updateData['last_name'] = props.lastName; // Address Information if (props.address !== undefined) updateData['address'] = props.address; if (props.number !== undefined) updateData['number'] = props.number; if (props.numberAddition !== undefined) updateData['number_addition'] = props.numberAddition; if (props.postcode !== undefined) updateData['postcode'] = props.postcode; if (props.city !== undefined) updateData['city'] = props.city; if (props.province !== undefined) updateData['province'] = props.province; if (props.country !== undefined) updateData['country'] = props.country; if (props.buildingProject !== undefined) updateData['building_project'] = props.buildingProject; if (props.projectLocation !== undefined) updateData['project_location'] = props.projectLocation; if (props.projectLocationStatus !== undefined) updateData['project_location_status'] = props.projectLocationStatus; // Geographic Information if (props.longitude !== undefined) updateData['longitude'] = props.longitude; if (props.latitude !== undefined) updateData['latitude'] = props.latitude; // Contact Information if (props.telephone !== undefined) updateData['telephone'] = props.telephone; if (props.mobile !== undefined) updateData['mobile'] = props.mobile; if (props.email !== undefined) updateData['email'] = props.email; // Additional Information if (props.comments !== undefined) updateData['comments'] = props.comments; if (props.jaarlijksVerbruik !== undefined) updateData['jaarlijks_verbruik'] = props.jaarlijksVerbruik; if (props.clientId !== undefined) updateData['client_id'] = props.clientId; // Installation Information if (props.inspectionDate !== undefined) updateData['inspection_date'] = props.inspectionDate; if (props.indicationInstallationDate !== undefined) updateData['indication_installation_date'] = props.indicationInstallationDate; if (props.installationDuration !== undefined) updateData['installation_duration'] = props.installationDuration; if (props.installationDate !== undefined) updateData['installation_date'] = props.installationDate; // Extra Fields const extraFields = {}; let hasExtraFields = false; if (props.oorsprongLead !== undefined) { extraFields['oorsprong_lead'] = props.oorsprongLead; hasExtraFields = true; } if (props.monumentaalPand !== undefined) { extraFields['monumentaal_pand'] = props.monumentaalPand; hasExtraFields = true; } if (props.asbestDak !== undefined) { extraFields['zit_er_asbest_onder_het_dak'] = props.asbestDak; hasExtraFields = true; } if (props.typeDak !== undefined) { extraFields['type_dak'] = props.typeDak; hasExtraFields = true; } if (props.dakbedekking !== undefined) { extraFields['wat_voor_een_soort_dakbedekking_heeft_jouw_dak'] = props.dakbedekking; hasExtraFields = true; } if (props.leeftijdSchuineDak !== undefined) { extraFields['wat_is_de_leeftijd_van_jouw_schuine_dak'] = props.leeftijdSchuineDak; hasExtraFields = true; } if (props.leeftijdPlatteDak !== undefined) { extraFields['wat_is_de_leeftijd_van_jouw_platte_dak'] = props.leeftijdPlatteDak; hasExtraFields = true; } if (props.opmerkingenIntake !== undefined) { extraFields['opmerkingen_uit_intake'] = props.opmerkingenIntake; hasExtraFields = true; } if (props.yearlyKwhUsage !== undefined) { extraFields['yearly_kwh_usage'] = props.yearlyKwhUsage; hasExtraFields = true; } if (props.restpunt !== undefined) { extraFields['restpunt'] = props.restpunt; hasExtraFields = true; } if (props.materialenBesteld !== undefined) { extraFields['alle_materialen_besteld'] = props.materialenBesteld; hasExtraFields = true; } if (props.materialenVoorraad !== undefined) { extraFields['alle_materialen_op_voorraad_'] = props.materialenVoorraad; hasExtraFields = true; } if (props.energyExpiryDate !== undefined) { extraFields['energy_expiry_date'] = props.energyExpiryDate; hasExtraFields = true; } if (props.serviceOorzaak !== undefined) { extraFields['service_oorzaak'] = props.serviceOorzaak; hasExtraFields = true; } // Process the dynamically added custom fields if (props.customFieldsArray && Array.isArray(props.customFieldsArray)) { // Loop through each custom field entry props.customFieldsArray.forEach((customField) => { if (customField.fieldName && customField.fieldValue !== undefined) { // Process the value based on the field type let processedValue = customField.fieldValue; // Convert value according to field type if needed switch (customField.fieldType) { case 'number': // Try to convert to number const numValue = Number(customField.fieldValue); if (!isNaN(numValue)) { processedValue = numValue; } break; case 'boolean': // Convert to yes/no format expected by API if (customField.fieldValue.toLowerCase() === 'true' || customField.fieldValue.toLowerCase() === 'yes' || customField.fieldValue === '1') { processedValue = 'yes'; } else { processedValue = 'no'; } break; case 'date': // Ensure date is in proper format (already handled by input as YYYY-MM-DD) processedValue = customField.fieldValue; break; } extraFields[customField.fieldName] = processedValue; hasExtraFields = true; } }); } // Add custom_fields to the update data if any were specified if (hasExtraFields) { updateData['custom_fields'] = extraFields; } // Ensure we have data to update if (Object.keys(updateData).length === 0) { throw new Error('No data provided for the update'); } // Prepare the API endpoint const endpoint = `${common_1.TwoSolarCommon.baseUrl}${common_1.TwoSolarCommon.endpoints.updatePerson}`.replace('{request_id}', props.leadId.toString()); console.log('Updating lead at endpoint:', endpoint); console.log('Update data:', JSON.stringify(updateData, null, 2)); // Call the 2Solar API to update the lead const response = yield fetch(endpoint, { method: 'PUT', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${auth}` }, body: JSON.stringify(updateData) }); if (!response.ok) { const errorText = yield response.text(); throw new Error(`Failed to update lead in 2Solar: ${response.status} ${response.statusText} - ${errorText}`); } // Return the updated lead data const responseData = yield response.json(); console.log('API response:', JSON.stringify(responseData, null, 2)); return responseData; }); }, }); //# sourceMappingURL=update-lead.js.map