# Smart Clone - Opportunity Cloner The purpose of the Smart Clone is to provide the user with the functionality to clone an opportunity, but with added benefits. - The ability to select only fields that need to be edited during the cloning - The ability to select fields that must be cleared of their original value - The ability to clone other child objects than just Opportunity Products - The ability to exclude certain records from the clone based on formula evaluation of record info The Project consists of the following components: | Item | Description | | ---- | ----------- | | OpportunityCloneService | Apex class that contains the Apex functionality | | OpporutnityCloneserviceTest | Code coverage and unit test class | | TestCloneUtility | Utilities used in the Code coverage and unit test class | | SmartCloneChildList custom label | Custom Label used as a setting to store semi-colon separated list of child objects to select from | | opportunityCustomClone | Lightning web component that is the visual interface | | OppCustomCloneAura | Aura Lightning Component that is used to wire to a QuickAction | | Opportunity.SmartClone QuickAction | The QuickAction button to use on the Opportunity Detail Layout | | Opportunity.ClonedFields fieldset | the fieldet used to configure displayable and cleared fields for input | | SmartCloneRecordExclusionRule__mdt | Custom Metadata Type that can hold exclusion rules to evaluate to exclude records from clone | ### Additional Notes - This application currently will not support the cloning of a hierarchy of children. This means it is only designed to support the cloning of direct children to the Opportunity, and the Opportunity itself - This application will not support RecordType as a field to be edited/updated during the clone. ### Prerequisites - You need to have the Salesforce CLI installed on your system to follow the install directions. ### Install Steps 1. Clone this repository to your local filesystem. 2. Navigate to the directory created from the clone. 3. Create a 'build' folder in the directory of this cloned repository 4. Convert the project into deployable Metadata API format using the following command `sf project convert source --root-dir ./force-app/main/default -d ./build/unpackaged/` 5. Zip the 'unpackaged' directory located in the 'build' folder. 6. Deploy the zip file into your instance using the following command `sf project deploy start --target-org --metadata-dir ./build/unpackaged.zip --wait 30 --verbose` - Optionally, you can use the `--test-level RunLocalTests` option if installing into a production instance separately. 7. Once the deployment completes successfully, the components will be installed in your instance. ## Setup 1. Setup List of Opportunity Fields to include in the Cloning process. - Create a Fieldset named 'ClonedFields'. This fieldset will need to contain the fields to clone on the Opportunity. - Place fields that need to be cloned in the 'ClonedFields' fieldset 2. Create Action for SmartClone - Navigate to the Opportunity Object and click on 'Buttons, Links, and Actions'. Click the 'New Action' button. - *Action Type*: 'Lightning Web Component', *Lightning Web Component*:'c:opportunityCustomClone', *Label*: **Your Choice**, *Name*:**Your Choice** - Save Action Button - Navigate to the proper layout and place the Action Button on the Layout. 3. Create Exclusion Rules for SmartClone - Navigate to Custom Metadata Types and location the 'SmartClone Exclusion Rule' type. - create a new Record. - select a child object of the Opportunity - write the formula as you would a validation rule. If it is true, the record is excluded. You can only use fields from the record itself. - make sure to check the 'Active' checkbox so that the rule is active.