Any CRM system requires numerous configurations to be made to adapt it to the user's business (a CRM for a consulting company is different from one for an industrial company or a bank). Currently these configurations are made on a system by system basis. It would be great, probably also for your business, if it would be possible to export in some sort such a configuration so that it could be applied to a fresh installation. From a user perspective this should work like themes in WordPress. It would also give companies an opportunity to build configurations on top of the OpenSource YetiForce CRM and sell them to customers.
Such a configuration should include:
Code modifications – there should be specific rules which parts of the code can be configured and which not. One way of doing this would be to have a mirroring file structure 'configuration' set-up in such a way that YetiForce would use the code in the 'configuration' structure if available, and use the core code if not. So if I wanted to configure the function modules/Leads/models/Records.php, I would copy it to configuration/modules/Leads/models/Records.php and the system would pick it up from.
Database content – It should be possible to export the database content that is related to configuration in such a ways that it is database independent (i.e., does not assume specific identifies). For example, this export could be SQL statements as shown below:
SELECT @tabid_services := tabid FROM vtiger_tab WHERE name ="Services";
SELECT @tabid_campaigns := tabid FROM vtiger_tab WHERE name ="Campaigns"; SELECT @rel_id := max(relation_id) FROM vtiger_relatedlists;
SELECT @rel_seq := max(sequence) FROM vtiger_relatedlists WHERE tabid = @tabid_services;
INSERT INTO vtiger_relatedlists (relation_id, tabid, related_tabid, name, sequence, label, presence, actions) VALUES (@rel_id + 1, @tabid_services, @tabid_campaigns, 'get_dependents_list', @rel_seq + 1, 'Campaigns', 0, 'SELECT');
Database fields – Field added, dropped, modified that are related to the configuration should also be in the exported configuration in a transparent manner. One way of doing this would be to generate SQL statements to ALTER the database.