diff --git a/README.md b/README.md
index 5fbe1aa6103..58ba7c2b83d 100755
--- a/README.md
+++ b/README.md
@@ -2,8 +2,9 @@
-# SinergiaCRM 1.1.0
+# SinergiaCRM
+![Version (latest by date)](https://img.shields.io/github/v/release/SinergiaTIC/SinergiaCRM?label=Version)
[![Wiki](https://img.shields.io/badge/Information-Wiki-lightgray)](https://wikisuite.sinergiacrm.org)
[![LICENSE](https://img.shields.io/badge/License-AGPL_v3-orange.svg)](./LICENSE.txt)
[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5)](https://twitter.com/SinergiaCRM)
diff --git a/SticInclude/SinergiaDA.php b/SticInclude/SinergiaDA.php
index a911ea83b2d..10274eb2ac3 100644
--- a/SticInclude/SinergiaDA.php
+++ b/SticInclude/SinergiaDA.php
@@ -465,12 +465,14 @@ public function createViews($callUpdateModel = true, $rebuildFilter = 'all')
// add column to index list
$indexesToCreate[] = "{$fieldV['id_name']}";
- //Add relate record name
- if (in_array($fieldV['module'], ['Contacts', 'Leads'])) {
+ //Add relate record name
+ if (in_array($fieldV['module'], ['Contacts', 'Leads']) || (Beanfactory::newBean($fieldV['module'])->field_defs['last_name']) && $fieldV['module'] != 'Users') {
$relatedName = " concat_ws(' ', {$leftJoinAlias}.first_name, {$leftJoinAlias}.last_name) ";
} elseif ($fieldV['module'] == 'Users') {
$relatedName = "{$leftJoinAlias}.user_name";
- } else { $relatedName = "{$leftJoinAlias}.name";}
+ } else {
+ $relatedName = "{$leftJoinAlias}.name";
+ }
$fieldSrc .= " IFNULL($relatedName,'') AS {$fieldV['name']}";
@@ -1727,9 +1729,8 @@ public function getAndSaveUserACL($modules)
// Get list of active users
$res = $db->query("SELECT id,user_name, is_admin FROM users join users_cstm on users.id = users_cstm.id_c WHERE status='Active' AND deleted=0 AND sda_allowed_c=1;");
-
- while ($u = $db->fetchByAssoc($res, false)) {
+ while ($u = $db->fetchByAssoc($res, false)) {
$allModulesACL = array_intersect_key(ACLAction::getUserActions($u['id'], true), $modules);
foreach ($allModulesACL as $key => $value) {
unset($aclSource);
@@ -1771,11 +1772,11 @@ public function getAndSaveUserACL($modules)
$userGroupsRes = $db->query("SELECT distinct(name) as 'group' FROM sda_def_user_groups ug WHERE user_name='{$u['user_name']}';");
while ($userGroups = $db->fetchByAssoc($userGroupsRes, false)) {
-
+
$crmGroupName = explode('SDA_', $userGroups['group'])[1];
- // Verify whether or not the group has access to the module for their roles
- $groupHasAccessToModule = groupHasAccess($crmGroupName, $key, 'view');
+ // Verify whether or not the group or user has access to the module for their roles
+ $groupHasAccessToModule = groupHasAccess($crmGroupName, $u['id'], $key, 'view');
if ($groupHasAccessToModule) {
@@ -1788,7 +1789,7 @@ public function getAndSaveUserACL($modules)
'global' => 0,
];
- // Additionally we insert a record that allows each user's access to the records in which coinicide
+ // Additionally we insert a record that allows each user's access to the records in which match
// the user_name with the assigned_user_name field content in each module in which the user has group permission
$userModuleAccessMode["{$u['user_name']}_{$aclSource}_{$userGroups['group']}_private_{$currentTable}"] = [
'user_name' => $u['user_name'],
@@ -1946,13 +1947,14 @@ public function checkSdaTablesInViews()
}
/**
- * Checks if a security group has access to a specific action in a given module.
+ * Checks if a security group or user has access to a specific action in a given module.
*
- * This function determines whether a security group, identified by its name, has the necessary
+ * This function determines whether a security group, identified by its name, or an user, identified by its id has the necessary
* permissions to perform a specific action in a given module. It looks up the roles associated
- * with the group and checks the highest access levels available for those roles.
+ * with the group or user and checks the highest access levels available for those roles.
*
* @param string $group_name The name of the security group to check.
+ * @param string $userId The id of the user to check.
* @param string $category The name of the module or category (e.g., 'Accounts', 'Contacts').
* @param string $action The specific action to check (e.g., 'view', 'edit', 'delete').
* @param string $type The type of ACL, defaults to 'module'.
@@ -1963,7 +1965,7 @@ public function checkSdaTablesInViews()
*
* @throws SQLException If there's an error in executing the SQL queries.
*/
-function groupHasAccess($group_name, $category, $action, $type = 'module')
+function groupHasAccess($group_name, $userId, $category, $action, $type = 'module')
{
global $db;
@@ -1981,9 +1983,14 @@ function groupHasAccess($group_name, $category, $action, $type = 'module')
$group_id = $row['id'];
- // Get the roles associated with this security group
- $query = "SELECT role_id FROM securitygroups_acl_roles
- WHERE securitygroup_id = '$group_id' AND deleted = 0";
+ // Get the roles associated with this security group or user
+ $query = "SELECT role_id FROM (
+ SELECT role_id FROM securitygroups_acl_roles
+ WHERE securitygroup_id = '$group_id' AND deleted = 0
+ UNION SELECT role_id from acl_roles_users aru
+ WHERE aru.user_id='$userId' AND deleted=false ) m
+ LIMIT 1
+ ";
$result = $db->query($query);
$roles = array();
diff --git a/SticInclude/js/Utils.js b/SticInclude/js/Utils.js
index e7369bb199a..94cf82b85fa 100644
--- a/SticInclude/js/Utils.js
+++ b/SticInclude/js/Utils.js
@@ -281,6 +281,10 @@ function setEnabledStatus(elementId, clearField) {
} else {
$("#" + elementId, $form)
.prop("readonly", false);
+ $("#" + elementId, $form)
+ .prop("disabled", false);
+ $("#" + elementId, $form).parent().find("button")
+ .prop("disabled", false);
}
$("#" + elementId, $form)
.closest(".edit-view-row-item")
@@ -313,6 +317,10 @@ function setDisabledStatus(elementId, clearField) {
} else {
$("#" + elementId, $form)
.prop("readonly", true);
+ $("#" + elementId, $form)
+ .prop("disabled", true);
+ $("#" + elementId, $form).parent().find("button")
+ .prop("disabled", true);
}
$("#" + elementId, $form)
.closest(".edit-view-row-item")
diff --git a/SticInstall/sql/ca/EmailTemplates.sql b/SticInstall/sql/ca/EmailTemplates.sql
index 31178fc7ee7..ebb53a4ab2a 100644
--- a/SticInstall/sql/ca/EmailTemplates.sql
+++ b/SticInstall/sql/ca/EmailTemplates.sql
@@ -4,7 +4,10 @@ DELETE FROM email_templates;
INSERT INTO `email_templates` (`id`, `date_entered`, `date_modified`, `modified_user_id`, `created_by`, `published`, `name`, `description`, `subject`, `body`, `body_html`, `deleted`, `assigned_user_id`, `text_only`, `type`) VALUES
('d3b49c38-eeba-b910-2590-5b4069caaac1', NOW(), NOW(), '1', '1', NULL, 'Exemple - Donació', 'Exemple de plantilla de correu electrònic per confirmar i agrair una donació', 'Gràcies per la teva donació!', 'Benvolgut/da $contact_first_name $contact_last_name:\r\n\r\nHem rebut la teva donació de $stic_payments_amount €.\r\n\r\nMoltes gràcies pel teu suport!\r\n\r\n', '
Benvolgut/da $contact_first_name $contact_last_name:
\nHem rebut la teva donació de $stic_payments_amount €.
\nMoltes gràcies pel teu suport!
', 0, '1', 0, 'email'),
-('dba65685-d26f-6ecd-802c-5b406983c9b5', NOW(), NOW(), '1', '1', NULL, 'Exemple - Inscripció', 'Exemple de plantilla de correu electrònic per confirmar la inscripció a un esdeveniment', '$stic_events_name: Inscripció confirmada', 'Benvolgut/da $contact_first_name $contact_last_name:\r\n\r\nHem rebut la teva inscripció a $stic_events_name.\r\n\r\nA dia $stic_registrations_registration_date la teva inscripció consta com a $stic_registrations_status.\r\n\r\nEns veiem el $stic_events_start_date!', 'Benvolgut/da $contact_first_name $contact_last_name:
\nHem rebut la teva inscripció a $stic_events_name.
\nA dia $stic_registrations_registration_date la teva tu inscripció consta com a $stic_registrations_status.
\nEns veiem el $stic_events_start_date!
', 0, '1', 0, 'email');
+('dba65685-d26f-6ecd-802c-5b406983c9b5', NOW(), NOW(), '1', '1', NULL, 'Exemple - Inscripció', 'Exemple de plantilla de correu electrònic per confirmar la inscripció a un esdeveniment', '$stic_events_name: Inscripció confirmada', 'Benvolgut/da $contact_first_name $contact_last_name:\r\n\r\nHem rebut la teva inscripció a $stic_events_name.\r\n\r\nA dia $stic_registrations_registration_date la teva inscripció consta com a $stic_registrations_status.\r\n\r\nEns veiem el $stic_events_start_date!', 'Benvolgut/da $contact_first_name $contact_last_name:
\nHem rebut la teva inscripció a $stic_events_name.
\nA dia $stic_registrations_registration_date la teva tu inscripció consta com a $stic_registrations_status.
\nEns veiem el $stic_events_start_date!
', 0, '1', 0, 'email'),
+('52cdc554-bd90-f8f9-e2e0-66d718ae8fe9', NOW(), NOW(), '1', '1', NULL, 'Exemple - Nova subvenció', 'Exemple de plantilla de correu electrònic per notificar la convocatòria d''una nova subvenció', 'Nova convocatòria de subvenció: $opportunity_name', 'Nova convocatòria de subvenció: $opportunity_name\r\n\r\n$opportunity_stic_additional_information_c\r\nPodeu trobar més informació a: $opportunity_stic_opportunity_url_c', 'Nova convocatòria de subvenció: $opportunity_name
$opportunity_stic_additional_information_c
Podeu trobar més informació a: $opportunity_stic_opportunity_url_c
', 0, '1', 0, 'notification'),
+('9f118e85-13f2-baa9-4ee3-66d80c674dea', NOW(), NOW(), '1', '1', NULL, 'Exemple - Nou esdeveniment', 'Exemple de plantilla de correu electrònic per notificar un nou esdeveniment', 'Nou esdeveniment: $stic_events_name', '$stic_events_name\r\n\r\nData d''inici: $stic_events_start_date\r\nData de finalització: $stic_events_end_date\r\nUbicació: $stic_events_stic_events_fp_event_locations_name', '$stic_events_name
Data d''inici: $stic_events_start_date
Data de finalització: $stic_events_end_date
Ubicació: $stic_events_stic_events_fp_event_locations_name
', 0, '1', 0, 'notification');
+
-- SuiteCRM Base: Exemples de plantilles de correu electrònic
diff --git a/SticInstall/sql/common/FieldsMetadata.sql b/SticInstall/sql/common/FieldsMetadata.sql
index db267730d58..2543ffb79a5 100644
--- a/SticInstall/sql/common/FieldsMetadata.sql
+++ b/SticInstall/sql/common/FieldsMetadata.sql
@@ -74,6 +74,11 @@ INSERT INTO `fields_meta_data` (`id`, `custom_module`, `name`) VALUES
('Accountsinc_state_c', 'Accounts', 'inc_state_c'),
('Accountsinc_municipality_c', 'Accounts', 'inc_municipality_c'),
('Accountsinc_town_c', 'Accounts', 'inc_town_c'),
+-- Campaigns
+('Campaignsparent_id', 'Campaigns', 'parent_id'),
+('Campaignsparent_name', 'Campaigns', 'parent_name'),
+('Campaignsparent_type', 'Campaigns', 'parent_type'),
+('Campaignsstic_notification_prospect_list_names_c', 'Campaigns', 'stic_notification_prospect_list_names_c'),
-- Contacts
('Contactsstic_acquisition_channel_c', 'Contacts', 'stic_acquisition_channel_c'),
('Contactsstic_age_c', 'Contacts', 'stic_age_c'),
@@ -187,6 +192,8 @@ INSERT INTO `fields_meta_data` (`id`, `custom_module`, `name`) VALUES
('Opportunitiesstic_resolution_date_c', 'Opportunities', 'stic_resolution_date_c'),
('Opportunitiesstic_status_c', 'Opportunities', 'stic_status_c'),
('Opportunitiesstic_type_c', 'Opportunities', 'stic_type_c'),
+('Opportunitiesstic_opportunity_url_c', 'Opportunities', 'stic_opportunity_url_c'),
+('Opportunitiesstic_additional_information_c', 'Opportunities', 'stic_additional_information_c'),
-- FP_Event_Locations
('FP_Event_Locationsstic_address_county_c','FP_Event_Locations','stic_address_county_c'),
('FP_Event_Locationsstic_address_region_c','FP_Event_Locations','stic_address_region_c'),
diff --git a/SticInstall/sql/en/EmailTemplates.sql b/SticInstall/sql/en/EmailTemplates.sql
index b4a13e8c7a1..643b6d0b723 100644
--- a/SticInstall/sql/en/EmailTemplates.sql
+++ b/SticInstall/sql/en/EmailTemplates.sql
@@ -3,8 +3,10 @@ DELETE FROM email_templates;
-- SinergiaCRM: example email templates
INSERT INTO `email_templates` (`id`, `date_entered`, `date_modified`, `modified_user_id`, `created_by`, `published`, `name`, `description`, `subject`, `body`, `body_html`, `deleted`, `assigned_user_id`, `text_only`, `type`) VALUES
-('d3b49c38-eeba-b910-2590-5b4069caaac1', NOW(), NOW(), '1', '1', NULL, 'Example - Donation', 'Example email template for donation confirmation and acknowledgement', 'Thank you for your donation!', 'Dear $contact_first_name $contact_last_name,\r\n\r\nWe have successfully received your donation of $stic_payments_amount €.\r\n\r\nThank you very much for your support!\r\n\r\n', 'Dear $contact_first_name $contact_last_name,
\nWe have successfully received your donation of $stic_payments_amount €.
\nThank you for your support!
', 0, '1', 0, 'email'),
-('dba65685-d26f-6ecd-802c-5b406983c9b5', NOW(), NOW(), '1', '1', NULL, 'Example - Registration', 'Example email template for registration confirmation', 'Registration confirmation to $stic_events_name', 'Dear $contact_first_name $contact_last_name,\r\n\r\nWe have successfully received your registration to $stic_events_name.\r\n\r\nOn $stic_registrations_registration_date your registration is $stic_registrations_status.\r\n\r\nSee you on $stic_events_start_date!', 'Dear $contact_first_name $contact_last_name,
\nWe have successfully received your registration to $stic_events_name.
\nOn $stic_registrations_registration_date your registration is $stic_registrations_status.
\nSee you on $stic_events_start_date!
', 0, '1', 0, 'email');
+('d3b49c38-eeba-b910-2590-5b4069caaac1', NOW(), NOW(), '1', '1', NULL, 'Example - Donation', 'Email template example for donation confirmation and acknowledgement', 'Thank you for your donation!', 'Dear $contact_first_name $contact_last_name,\r\n\r\nWe have successfully received your donation of $stic_payments_amount €.\r\n\r\nThank you very much for your support!\r\n\r\n', 'Dear $contact_first_name $contact_last_name,
\nWe have successfully received your donation of $stic_payments_amount €.
\nThank you for your support!
', 0, '1', 0, 'email'),
+('dba65685-d26f-6ecd-802c-5b406983c9b5', NOW(), NOW(), '1', '1', NULL, 'Example - Registration', 'Email template example for registration confirmation', 'Registration confirmation to $stic_events_name', 'Dear $contact_first_name $contact_last_name,\r\n\r\nWe have successfully received your registration to $stic_events_name.\r\n\r\nOn $stic_registrations_registration_date your registration is $stic_registrations_status.\r\n\r\nSee you on $stic_events_start_date!', 'Dear $contact_first_name $contact_last_name,
\nWe have successfully received your registration to $stic_events_name.
\nOn $stic_registrations_registration_date your registration is $stic_registrations_status.
\nSee you on $stic_events_start_date!
', 0, '1', 0, 'email'),
+('52cdc554-bd90-f8f9-e2e0-66d718ae8fe9', NOW(), NOW(), '1', '1', NULL, 'Example - New opportunity', 'Email template example for new opportunity notification', 'New opportunity: $opportunity_name', 'New opportunity: $opportunity_name\r\n\r\n$opportunity_stic_additional_information_c\r\nYou may find more information at: $opportunity_stic_opportunity_url_c', 'New opportunity: $opportunity_name
$opportunity_stic_additional_information_c
You may find more information at: $opportunity_stic_opportunity_url_c
', 0, '1', 0, 'notification'),
+('9f118e85-13f2-baa9-4ee3-66d80c674dea', NOW(), NOW(), '1', '1', NULL, 'Example - New event', 'Email template example for new event notification', 'New event: $stic_events_name', '$stic_events_name\r\n\r\nStart date: $stic_events_start_date\r\nEnd date: $stic_events_end_date\r\nLocation: $stic_events_stic_events_fp_event_locations_name', '$stic_events_name
Start date: $stic_events_start_date
End date: $stic_events_end_date
Location: $stic_events_stic_events_fp_event_locations_name
', 0, '1', 0, 'notification');
-- SuiteCRM Base: example email templates
-- These are the same templates added in the SuiteCRMBase.sql file, but we add them here for symmetry with the other language files
@@ -19,4 +21,4 @@ INSERT INTO `email_templates` (`id`, `date_entered`, `date_modified`, `modified_
('c6c4093f-0a1a-30d8-5e33-5e830d6ddd51', NOW(), NOW(), '1', '1', 'off', 'Contact Case Update', 'Template to send to a contact when their case is updated.', '$acase_name update [CASE:$acase_case_number]', 'Hi $user_first_name $user_last_name,\n\n You''ve had an update to your case $acase_name (# $acase_case_number) on $aop_case_updates_date_entered:\n $contact_first_name $contact_last_name, said:\n $aop_case_updates_description', 'Hi $contact_first_name $contact_last_name,
\n
\n You''ve had an update to your case $acase_name (# $acase_case_number) on $aop_case_updates_date_entered:
\n $user_first_name $user_last_name said:
\n $aop_case_updates_description
', 0, NULL, NULL, 'system'),
('e61c85c2-e6cb-6dda-3760-5e830d31fbdc', NOW(), NOW(), '1', '1', 'off', 'Case Closure', 'Template for informing a contact that their case has been closed.', '$acase_name [CASE:$acase_case_number] closed', 'Hi $contact_first_name $contact_last_name,\n\n Your case $acase_name (# $acase_case_number) has been closed on $acase_date_entered\n Status: $acase_status\n Reference: $acase_case_number\n Resolution: $acase_resolution', ' Hi $contact_first_name $contact_last_name,
\n Your case $acase_name (# $acase_case_number) has been closed on $acase_date_entered
\n Status $acase_status Reference $acase_case_number Resolution $acase_resolution
', 0, NULL, NULL, 'system'),
('e9e00ea2-ac1b-a635-9671-5e830d66a582', NOW(), NOW(), '1', '1', 'off', 'Case Creation', 'Template to send to a contact when a case is received from them.', '$acase_name [CASE:$acase_case_number]', 'Hi $contact_first_name $contact_last_name,\n\n We''ve received your case $acase_name (# $acase_case_number) on $acase_date_entered\n Status: $acase_status\n Reference: $acase_case_number\n Description: $acase_description', ' Hi $contact_first_name $contact_last_name,
\n We''ve received your case $acase_name (# $acase_case_number) on $acase_date_entered
\n Status $acase_status Reference $acase_case_number Description $acase_description
', 0, NULL, NULL, 'system'),
-('ed9867a2-1f56-b684-4bc6-5e830d215b5d', NOW(), NOW(), '1', '1', 'off', 'Joomla Account Creation', 'Template used when informing a contact that they''ve been given an account on the joomla portal.', 'Support Portal Account Created', 'Hi $contact_name,\n An account has been created for you at $portal_address.\n You may login using this email address and the password $joomla_pass', 'Hi $contact_name,
\n An account has been created for you at $portal_address .
\n You may login using this email address and the password $joomla_pass
', 0, NULL, NULL, 'system');
\ No newline at end of file
+('ed9867a2-1f56-b684-4bc6-5e830d215b5d', NOW(), NOW(), '1', '1', 'off', 'Joomla Account Creation', 'Template used when informing a contact that they''ve been given an account on the joomla portal.', 'Support Portal Account Created', 'Hi $contact_name,\n An account has been created for you at $portal_address.\n You may login using this email address and the password $joomla_pass', 'Hi $contact_name,
\n An account has been created for you at $portal_address .
\n You may login using this email address and the password $joomla_pass
', 0, NULL, NULL, 'system');
diff --git a/SticInstall/sql/es/EmailTemplates.sql b/SticInstall/sql/es/EmailTemplates.sql
index fe7d6dadd1c..b3b9ac46d9c 100644
--- a/SticInstall/sql/es/EmailTemplates.sql
+++ b/SticInstall/sql/es/EmailTemplates.sql
@@ -4,7 +4,9 @@ DELETE FROM email_templates;
INSERT INTO `email_templates` (`id`, `date_entered`, `date_modified`, `modified_user_id`, `created_by`, `published`, `name`, `description`, `subject`, `body`, `body_html`, `deleted`, `assigned_user_id`, `text_only`, `type`) VALUES
('d3b49c38-eeba-b910-2590-5b4069caaac1', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Donación', 'Ejemplo de plantilla de correo electrónico para confirmar y agradecer una donación', '¡Gracias por tu donación!', 'Apreciado/a $contact_first_name $contact_last_name:\r\n\r\nHemos recibido tu donación de $stic_payments_amount €.\r\n\r\n¡Muchas gracias por tu apoyo!\r\n\r\n', 'Apreciado/a $contact_first_name $contact_last_name:
\nHemos recibido tu donación de $stic_payments_amount €.
\n¡Muchas gracias por tu apoyo!
', 0, '1', 0, 'email'),
-('dba65685-d26f-6ecd-802c-5b406983c9b5', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Inscripción', 'Ejemplo de plantilla de correo electrónico para confirmar la inscripción a un evento', '$stic_events_name: Inscripción confirmada', 'Apreciado/a $contact_first_name $contact_last_name:\r\n\r\nHemos recibido tu inscripción a $stic_events_name.\r\n\r\nA día $stic_registrations_registration_date tu inscripción consta como $stic_registrations_status.\r\n\r\n¡Nos vemos el $stic_events_start_date!', 'Apreciado/a $contact_first_name $contact_last_name:
\nHemos recibido tu inscripción a $stic_events_name.
\nA día $stic_registrations_registration_date tu inscripción consta como $stic_registrations_status.
\n¡Nos vemos el $stic_events_start_date!
', 0, '1', 0, 'email');
+('dba65685-d26f-6ecd-802c-5b406983c9b5', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Inscripción', 'Ejemplo de plantilla de correo electrónico para confirmar la inscripción a un evento', '$stic_events_name: Inscripción confirmada', 'Apreciado/a $contact_first_name $contact_last_name:\r\n\r\nHemos recibido tu inscripción a $stic_events_name.\r\n\r\nA día $stic_registrations_registration_date tu inscripción consta como $stic_registrations_status.\r\n\r\n¡Nos vemos el $stic_events_start_date!', 'Apreciado/a $contact_first_name $contact_last_name:
\nHemos recibido tu inscripción a $stic_events_name.
\nA día $stic_registrations_registration_date tu inscripción consta como $stic_registrations_status.
\n¡Nos vemos el $stic_events_start_date!
', 0, '1', 0, 'email'),
+('52cdc554-bd90-f8f9-e2e0-66d718ae8fe9', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Nueva subvención', 'Ejemplo de plantilla de correo electrónico para notificar una nueva convocatoria de subvención', 'Nueva convocatoria de subvención: $opportunity_name', 'Nueva convocatoria de subvención: $opportunity_name\r\n\r\n$opportunity_stic_additional_information_c\r\nPuede encontrar más información en: $opportunity_stic_opportunity_url_c', 'Nueva convocatoria de subvención: $opportunity_name
$opportunity_stic_additional_information_c
Puede encontrar más información en: $opportunity_stic_opportunity_url_c
', 0, '1', 0, 'notification'),
+('9f118e85-13f2-baa9-4ee3-66d80c674dea', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Nuevo evento', 'Ejemplo de plantilla de correo electrónico para notificar un nuevo evento', 'Nuevo evento: $stic_events_name', '$stic_events_type: $stic_events_name\r\n\r\nFecha de inicio: $stic_events_start_date\r\nFecha de finalización: $stic_events_end_date\r\nUbicación: $stic_events_stic_events_fp_event_locations_name', '$stic_events_type: $stic_events_name
Fecha de inicio: $stic_events_start_date
Fecha de finalización: $stic_events_end_date
Ubicación: $stic_events_stic_events_fp_event_locations_name
', 0, '1', 0, 'notification');
-- SuiteCRM Base: Ejemplos de plantillas de correo electrónico
diff --git a/SticInstall/sql/gl/EmailTemplates.sql b/SticInstall/sql/gl/EmailTemplates.sql
index fe7d6dadd1c..b3b9ac46d9c 100644
--- a/SticInstall/sql/gl/EmailTemplates.sql
+++ b/SticInstall/sql/gl/EmailTemplates.sql
@@ -4,7 +4,9 @@ DELETE FROM email_templates;
INSERT INTO `email_templates` (`id`, `date_entered`, `date_modified`, `modified_user_id`, `created_by`, `published`, `name`, `description`, `subject`, `body`, `body_html`, `deleted`, `assigned_user_id`, `text_only`, `type`) VALUES
('d3b49c38-eeba-b910-2590-5b4069caaac1', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Donación', 'Ejemplo de plantilla de correo electrónico para confirmar y agradecer una donación', '¡Gracias por tu donación!', 'Apreciado/a $contact_first_name $contact_last_name:\r\n\r\nHemos recibido tu donación de $stic_payments_amount €.\r\n\r\n¡Muchas gracias por tu apoyo!\r\n\r\n', 'Apreciado/a $contact_first_name $contact_last_name:
\nHemos recibido tu donación de $stic_payments_amount €.
\n¡Muchas gracias por tu apoyo!
', 0, '1', 0, 'email'),
-('dba65685-d26f-6ecd-802c-5b406983c9b5', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Inscripción', 'Ejemplo de plantilla de correo electrónico para confirmar la inscripción a un evento', '$stic_events_name: Inscripción confirmada', 'Apreciado/a $contact_first_name $contact_last_name:\r\n\r\nHemos recibido tu inscripción a $stic_events_name.\r\n\r\nA día $stic_registrations_registration_date tu inscripción consta como $stic_registrations_status.\r\n\r\n¡Nos vemos el $stic_events_start_date!', 'Apreciado/a $contact_first_name $contact_last_name:
\nHemos recibido tu inscripción a $stic_events_name.
\nA día $stic_registrations_registration_date tu inscripción consta como $stic_registrations_status.
\n¡Nos vemos el $stic_events_start_date!
', 0, '1', 0, 'email');
+('dba65685-d26f-6ecd-802c-5b406983c9b5', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Inscripción', 'Ejemplo de plantilla de correo electrónico para confirmar la inscripción a un evento', '$stic_events_name: Inscripción confirmada', 'Apreciado/a $contact_first_name $contact_last_name:\r\n\r\nHemos recibido tu inscripción a $stic_events_name.\r\n\r\nA día $stic_registrations_registration_date tu inscripción consta como $stic_registrations_status.\r\n\r\n¡Nos vemos el $stic_events_start_date!', 'Apreciado/a $contact_first_name $contact_last_name:
\nHemos recibido tu inscripción a $stic_events_name.
\nA día $stic_registrations_registration_date tu inscripción consta como $stic_registrations_status.
\n¡Nos vemos el $stic_events_start_date!
', 0, '1', 0, 'email'),
+('52cdc554-bd90-f8f9-e2e0-66d718ae8fe9', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Nueva subvención', 'Ejemplo de plantilla de correo electrónico para notificar una nueva convocatoria de subvención', 'Nueva convocatoria de subvención: $opportunity_name', 'Nueva convocatoria de subvención: $opportunity_name\r\n\r\n$opportunity_stic_additional_information_c\r\nPuede encontrar más información en: $opportunity_stic_opportunity_url_c', 'Nueva convocatoria de subvención: $opportunity_name
$opportunity_stic_additional_information_c
Puede encontrar más información en: $opportunity_stic_opportunity_url_c
', 0, '1', 0, 'notification'),
+('9f118e85-13f2-baa9-4ee3-66d80c674dea', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Nuevo evento', 'Ejemplo de plantilla de correo electrónico para notificar un nuevo evento', 'Nuevo evento: $stic_events_name', '$stic_events_type: $stic_events_name\r\n\r\nFecha de inicio: $stic_events_start_date\r\nFecha de finalización: $stic_events_end_date\r\nUbicación: $stic_events_stic_events_fp_event_locations_name', '$stic_events_type: $stic_events_name
Fecha de inicio: $stic_events_start_date
Fecha de finalización: $stic_events_end_date
Ubicación: $stic_events_stic_events_fp_event_locations_name
', 0, '1', 0, 'notification');
-- SuiteCRM Base: Ejemplos de plantillas de correo electrónico
diff --git a/SticUpdates/Migrations/20240705_feature_44_alertOpportunities.sql b/SticUpdates/Migrations/20240705_feature_44_alertOpportunities.sql
new file mode 100644
index 00000000000..a13004c86f9
--- /dev/null
+++ b/SticUpdates/Migrations/20240705_feature_44_alertOpportunities.sql
@@ -0,0 +1,7 @@
+INSERT IGNORE INTO `fields_meta_data` (`id`, `custom_module`, `name`) VALUES
+('Campaignsparent_id', 'Campaigns', 'parent_id'),
+('Campaignsparent_name', 'Campaigns', 'parent_name'),
+('Campaignsparent_type', 'Campaigns', 'parent_type'),
+('Campaignsstic_notification_prospect_list_names_c', 'Campaigns', 'stic_notification_prospect_list_names_c'),
+('Opportunitiesstic_opportunity_url_c', 'Opportunities', 'stic_opportunity_url_c'),
+('Opportunitiesstic_additional_information_c', 'Opportunities', 'stic_additional_information_c');
\ No newline at end of file
diff --git a/SticUpdates/Migrations/ca/20240904_feature_44_alertOpportunities.sql b/SticUpdates/Migrations/ca/20240904_feature_44_alertOpportunities.sql
new file mode 100644
index 00000000000..dadb26bf534
--- /dev/null
+++ b/SticUpdates/Migrations/ca/20240904_feature_44_alertOpportunities.sql
@@ -0,0 +1,3 @@
+INSERT IGNORE INTO `email_templates` (`id`, `date_entered`, `date_modified`, `modified_user_id`, `created_by`, `published`, `name`, `description`, `subject`, `body`, `body_html`, `deleted`, `assigned_user_id`, `text_only`, `type`) VALUES
+('52cdc554-bd90-f8f9-e2e0-66d718ae8fe9', NOW(), NOW(), '1', '1', NULL, 'Exemple - Nova subvenció', 'Exemple de plantilla de correu electrònic per notificar la convocatòria d''una nova subvenció', 'Nova convocatòria de subvenció: $opportunity_name', 'Nova convocatòria de subvenció: $opportunity_name\r\n\r\n$opportunity_stic_additional_information_c\r\nPodeu trobar més informació a: $opportunity_stic_opportunity_url_c', 'Nova convocatòria de subvenció: $opportunity_name
$opportunity_stic_additional_information_c
Podeu trobar més informació a: $opportunity_stic_opportunity_url_c
', 0, '1', 0, 'notification'),
+('9f118e85-13f2-baa9-4ee3-66d80c674dea', NOW(), NOW(), '1', '1', NULL, 'Exemple - Nou esdeveniment', 'Exemple de plantilla de correu electrònic per notificar un nou esdeveniment', 'Nou esdeveniment: $stic_events_name', '$stic_events_name\r\n\r\nData d''inici: $stic_events_start_date\r\nData de finalització: $stic_events_end_date\r\nUbicació: $stic_events_stic_events_fp_event_locations_name', '$stic_events_name
Data d''inici: $stic_events_start_date
Data de finalització: $stic_events_end_date
Ubicació: $stic_events_stic_events_fp_event_locations_name
', 0, '1', 0, 'notification');
diff --git a/SticUpdates/Migrations/en/20240904_feature_44_alertOpportunities.sql b/SticUpdates/Migrations/en/20240904_feature_44_alertOpportunities.sql
new file mode 100644
index 00000000000..f239f93490c
--- /dev/null
+++ b/SticUpdates/Migrations/en/20240904_feature_44_alertOpportunities.sql
@@ -0,0 +1,3 @@
+INSERT IGNORE INTO `email_templates` (`id`, `date_entered`, `date_modified`, `modified_user_id`, `created_by`, `published`, `name`, `description`, `subject`, `body`, `body_html`, `deleted`, `assigned_user_id`, `text_only`, `type`) VALUES
+('52cdc554-bd90-f8f9-e2e0-66d718ae8fe9', NOW(), NOW(), '1', '1', NULL, 'Example - New opportunity', 'Email template example for new opportunity notification', 'New opportunity: $opportunity_name', 'New opportunity: $opportunity_name\r\n\r\n$opportunity_stic_additional_information_c\r\nYou may find more information at: $opportunity_stic_opportunity_url_c', 'New opportunity: $opportunity_name
$opportunity_stic_additional_information_c
You may find more information at: $opportunity_stic_opportunity_url_c
', 0, '1', 0, 'notification'),
+('9f118e85-13f2-baa9-4ee3-66d80c674dea', NOW(), NOW(), '1', '1', NULL, 'Example - New event', 'Email template example for new event notification', 'New event: $stic_events_name', '$stic_events_name\r\n\r\nStart date: $stic_events_start_date\r\nEnd date: $stic_events_end_date\r\nLocation: $stic_events_stic_events_fp_event_locations_name', '$stic_events_name
Start date: $stic_events_start_date
End date: $stic_events_end_date
Location: $stic_events_stic_events_fp_event_locations_name
', 0, '1', 0, 'notification');
diff --git a/SticUpdates/Migrations/es/20240904_feature_44_alertOpportunities.sql b/SticUpdates/Migrations/es/20240904_feature_44_alertOpportunities.sql
new file mode 100644
index 00000000000..859b5b1e56b
--- /dev/null
+++ b/SticUpdates/Migrations/es/20240904_feature_44_alertOpportunities.sql
@@ -0,0 +1,3 @@
+INSERT IGNORE INTO `email_templates` (`id`, `date_entered`, `date_modified`, `modified_user_id`, `created_by`, `published`, `name`, `description`, `subject`, `body`, `body_html`, `deleted`, `assigned_user_id`, `text_only`, `type`) VALUES
+('52cdc554-bd90-f8f9-e2e0-66d718ae8fe9', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Nueva subvención', 'Ejemplo de plantilla de correo electrónico para notificar una nueva convocatoria de subvención', 'Nueva convocatoria de subvención: $opportunity_name', 'Nueva convocatoria de subvención: $opportunity_name\r\n\r\n$opportunity_stic_additional_information_c\r\nPuede encontrar más información en: $opportunity_stic_opportunity_url_c', 'Nueva convocatoria de subvención: $opportunity_name
$opportunity_stic_additional_information_c
Puede encontrar más información en: $opportunity_stic_opportunity_url_c
', 0, '1', 0, 'notification'),
+('9f118e85-13f2-baa9-4ee3-66d80c674dea', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Nuevo evento', 'Ejemplo de plantilla de correo electrónico para notificar un nuevo evento', 'Nuevo evento: $stic_events_name', '$stic_events_type: $stic_events_name\r\n\r\nFecha de inicio: $stic_events_start_date\r\nFecha de finalización: $stic_events_end_date\r\nUbicación: $stic_events_stic_events_fp_event_locations_name', '$stic_events_type: $stic_events_name
Fecha de inicio: $stic_events_start_date
Fecha de finalización: $stic_events_end_date
Ubicación: $stic_events_stic_events_fp_event_locations_name
', 0, '1', 0, 'notification');
diff --git a/SticUpdates/Migrations/gl/20240904_feature_44_alertOpportunities.sql b/SticUpdates/Migrations/gl/20240904_feature_44_alertOpportunities.sql
new file mode 100644
index 00000000000..859b5b1e56b
--- /dev/null
+++ b/SticUpdates/Migrations/gl/20240904_feature_44_alertOpportunities.sql
@@ -0,0 +1,3 @@
+INSERT IGNORE INTO `email_templates` (`id`, `date_entered`, `date_modified`, `modified_user_id`, `created_by`, `published`, `name`, `description`, `subject`, `body`, `body_html`, `deleted`, `assigned_user_id`, `text_only`, `type`) VALUES
+('52cdc554-bd90-f8f9-e2e0-66d718ae8fe9', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Nueva subvención', 'Ejemplo de plantilla de correo electrónico para notificar una nueva convocatoria de subvención', 'Nueva convocatoria de subvención: $opportunity_name', 'Nueva convocatoria de subvención: $opportunity_name\r\n\r\n$opportunity_stic_additional_information_c\r\nPuede encontrar más información en: $opportunity_stic_opportunity_url_c', 'Nueva convocatoria de subvención: $opportunity_name
$opportunity_stic_additional_information_c
Puede encontrar más información en: $opportunity_stic_opportunity_url_c
', 0, '1', 0, 'notification'),
+('9f118e85-13f2-baa9-4ee3-66d80c674dea', NOW(), NOW(), '1', '1', NULL, 'Ejemplo - Nuevo evento', 'Ejemplo de plantilla de correo electrónico para notificar un nuevo evento', 'Nuevo evento: $stic_events_name', '$stic_events_type: $stic_events_name\r\n\r\nFecha de inicio: $stic_events_start_date\r\nFecha de finalización: $stic_events_end_date\r\nUbicación: $stic_events_stic_events_fp_event_locations_name', '$stic_events_type: $stic_events_name
Fecha de inicio: $stic_events_start_date
Fecha de finalización: $stic_events_end_date
Ubicación: $stic_events_stic_events_fp_event_locations_name
', 0, '1', 0, 'notification');
diff --git a/SticUpdates/Scripts/HideGroupOpportunitiesSubpanels.php b/SticUpdates/Scripts/HideGroupOpportunitiesSubpanels.php
new file mode 100644
index 00000000000..c7acc27354b
--- /dev/null
+++ b/SticUpdates/Scripts/HideGroupOpportunitiesSubpanels.php
@@ -0,0 +1,72 @@
+debug(__METHOD__.'('.__LINE__.') hide stic_Group_Opportunities subpanel starting');
+
+// HIDE MODULES FROM SUBPANELS IF MODULE IS NOT ENABLED ON THE MENU
+
+// Set modules to hide
+$modulesToHide = array(
+ 0 => 'stic_Group_Opportunities',
+);
+
+require_once 'modules/MySettings/TabController.php';
+$controller = new TabController();
+$currentTabs = $controller->get_system_tabs();
+
+$GLOBALS['log']->debug(__METHOD__.'('.__LINE__.') hide stic_Group_Opportunities subpanel', $currentTabs);
+
+$modulesToHideNotEnabled = array_diff($modulesToHide, $currentTabs);
+$GLOBALS['log']->debug(__METHOD__.'('.__LINE__.') hide stic_Group_Opportunities subpanel', $modulesToHideNotEnabled);
+if (count($modulesToHideNotEnabled)> 0){
+ // This function needs to be customized if the file is copied.
+ function sticGroupOpportunitiesPrepareElementToHide(&$item, $key)
+ {
+ $item = strtolower($item);
+ }
+
+ array_walk($modulesToHideNotEnabled, 'sticGroupOpportunitiesPrepareElementToHide');
+
+ $GLOBALS['log']->debug(__METHOD__.'('.__LINE__.') hide stic_Group_Opportunities subpanel', $modulesToHideNotEnabled);
+
+ $administration = new Administration();
+ $currentSettings = $administration->retrieveSettings('MySettings');
+ $unserialized = unserialize(base64_decode($currentSettings->settings['MySettings_hide_subpanels']));
+
+ $GLOBALS['log']->debug(__METHOD__.'('.__LINE__.') hide stic_Group_Opportunities subpanel', $unserialized);
+
+ foreach($modulesToHideNotEnabled as $module) {
+ $unserialized[$module] = $module;
+ }
+
+ $serialized = base64_encode(serialize($unserialized));
+ $administration->saveSetting('MySettings', 'hide_subpanels', $serialized);
+
+}
+
+
+
+// Repairing and rebuilding
+global $current_user;
+$current_user = new User();
+$current_user->getSystemUser();
+
+// Reparación de roles para garantizar que los usuarios no administradores pueden acceder a los módulos
+echo 'Repairing roles ';
+require_once 'modules/ACL/install_actions.php';
+$GLOBALS['log']->fatal('Line ' . __LINE__ . ': ' . __METHOD__ . ': Repairing roles');
+
+// Reparamos también relaciones e índices para evitar incidencias con los nuevos módulos
+echo 'Rebuilding relationships ';
+require_once 'modules/Administration/RebuildRelationship.php';
+$GLOBALS['log']->fatal('Line ' . __LINE__ . ': ' . __METHOD__ . ': Rebuilding relationships');
+
+echo 'Repairing indexes ';
+require_once "modules/Administration/RepairIndex.php";
+$GLOBALS['log']->fatal('Line ' . __LINE__ . ': ' . __METHOD__ . ': Repairing indexes');
+
diff --git a/config.php b/config.php
index 6d8f1f0ad2c..9b4613157d1 100644
--- a/config.php
+++ b/config.php
@@ -576,9 +576,9 @@
// STIC Custom 20231124 JBL - SemVer in SinergiaCRM
// STIC#1319
- 'sinergiacrm_version' => '1.6.5',
- 'js_custom_version' => 9,
- 'stic_show_update_alert' => 0,
+ 'sinergiacrm_version' => '1.7.0',
+ 'js_custom_version' => 10,
+ 'stic_show_update_alert' => 1,
// END STIC
// STIC-Custom 20240117 JCH - Security Groups Module Rules activation config
diff --git a/custom/Extension/application/Ext/Include/SticModules.php b/custom/Extension/application/Ext/Include/SticModules.php
index 17e413a8d72..e9b74af2481 100644
--- a/custom/Extension/application/Ext/Include/SticModules.php
+++ b/custom/Extension/application/Ext/Include/SticModules.php
@@ -65,6 +65,7 @@
$moduleList[] = 'stic_Custom_View_Customizations';
$moduleList[] = 'stic_Custom_View_Conditions';
$moduleList[] = 'stic_Custom_View_Actions';
+$moduleList[] = 'stic_Group_Opportunities';
// Bean names for custom modules
// Although they should be singular ModuleBuilder outputs them in plural and we keep them this way
@@ -111,6 +112,7 @@
$beanList['stic_Custom_View_Customizations'] = 'stic_Custom_View_Customizations';
$beanList['stic_Custom_View_Conditions'] = 'stic_Custom_View_Conditions';
$beanList['stic_Custom_View_Actions'] = 'stic_Custom_View_Actions';
+$beanList['stic_Group_Opportunities'] = 'stic_Group_Opportunities';
// Location of custom modules main class files
$beanFiles['stic_Accounts_Relationships'] = 'modules/stic_Accounts_Relationships/stic_Accounts_Relationships.php';
@@ -156,6 +158,8 @@
$beanFiles['stic_Custom_View_Customizations'] = 'modules/stic_Custom_View_Customizations/stic_Custom_View_Customizations.php';
$beanFiles['stic_Custom_View_Conditions'] = 'modules/stic_Custom_View_Conditions/stic_Custom_View_Conditions.php';
$beanFiles['stic_Custom_View_Actions'] = 'modules/stic_Custom_View_Actions/stic_Custom_View_Actions.php';
+$beanFiles['stic_Group_Opportunities'] = 'modules/stic_Group_Opportunities/stic_Group_Opportunities.php';
+
// Modules in $modInvisList are hidden in the main menu, in reporting and as subpanels
$modInvisList[] = 'stic_Settings';
diff --git a/custom/Extension/application/Ext/Language/ca_ES.SticLang.php b/custom/Extension/application/Ext/Language/ca_ES.SticLang.php
index a9b609777a0..1cbf179e25c 100644
--- a/custom/Extension/application/Ext/Language/ca_ES.SticLang.php
+++ b/custom/Extension/application/Ext/Language/ca_ES.SticLang.php
@@ -132,7 +132,7 @@
$app_list_strings['moduleList']['stic_Custom_View_Actions'] = 'Accions';
$app_list_strings['moduleList']['stic_Custom_View_Customizations'] = 'Personalitzacions';
$app_list_strings['moduleList']['stic_Custom_View_Conditions'] = 'Condicions';
-
+$app_list_strings['moduleList']['stic_Group_Opportunities'] = 'Organitzacions subvencionades';
$app_list_strings['moduleListSingular']['Accounts'] = 'Organització';
$app_list_strings['moduleListSingular']['Contacts'] = 'Persona';
$app_list_strings['moduleListSingular']['Leads'] = 'Interessat';
@@ -178,7 +178,7 @@
$app_list_strings['moduleListSingular']['stic_Custom_View_Actions'] = 'Acció';
$app_list_strings['moduleListSingular']['stic_Custom_View_Customizations'] = 'Personalització';
$app_list_strings['moduleListSingular']['stic_Custom_View_Conditions'] = 'Condició';
-
+$app_list_strings['moduleListSingular']['stic_Group_Opportunities'] = 'Organització subvencionada';
$app_list_strings['parent_type_display']['Accounts'] = 'Organitzacions';
$app_list_strings['parent_type_display']['Contacts'] = 'Persones';
$app_list_strings['parent_type_display']['Leads'] = 'Interessats';
@@ -216,6 +216,7 @@
$app_list_strings['parent_type_display']['stic_Training'] = 'Formació';
$app_list_strings['parent_type_display']['stic_Work_Experience'] = 'Experiència laboral';
$app_list_strings['parent_type_display']['stic_Skills'] = 'Competències';
+$app_list_strings['parent_type_display']['stic_Group_Opportunities'] = 'Organitzacions subvencionades';
$app_list_strings['record_type_display']['Accounts'] = 'Organitzacions';
$app_list_strings['record_type_display']['Contacts'] = 'Persones';
@@ -254,6 +255,7 @@
$app_list_strings['record_type_display']['stic_Training'] = 'Formació';
$app_list_strings['record_type_display']['stic_Work_Experience'] = 'Experiència laboral';
$app_list_strings['record_type_display']['stic_Skills'] = 'Competències';
+$app_list_strings['record_type_display']['stic_Group_Opportunities'] = 'Organitzacions subvencionades';
$app_list_strings['record_type_display_notes']['Accounts'] = 'Organitzacions';
$app_list_strings['record_type_display_notes']['Contacts'] = 'Persones';
@@ -292,6 +294,10 @@
$app_list_strings['record_type_display_notes']['stic_Training'] = 'Formació';
$app_list_strings['record_type_display_notes']['stic_Work_Experience'] = 'Experiència laboral';
$app_list_strings['record_type_display_notes']['stic_Skills'] = 'Competències';
+$app_list_strings['record_type_display_notes']['stic_Group_Opportunities'] = 'Organitzacions subvencionades';
+
+$app_list_strings['parent_type_display_notifications']['Opportunities'] = 'Subvencions';
+$app_list_strings['parent_type_display_notifications']['stic_Events'] = 'Esdeveniments';
// Percentatges d'IVA vigents
$app_list_strings['vat_list']['21'] = '21%';
@@ -3516,6 +3522,19 @@
$app_list_strings['stic_custom_views_condition_values_list']['anniversary'] = 'Aniversari';
$app_list_strings['stic_custom_views_condition_values_list']['current_user'] = 'Usuari actual';
+// Organitzacions subvencionades: Estat
+$app_list_strings['stic_group_opportunities_status_list']['guest'] = 'Convidada';
+$app_list_strings['stic_group_opportunities_status_list']['participating'] = 'Participant';
+$app_list_strings['stic_group_opportunities_status_list']['rejected'] = 'Rebutjada';
+$app_list_strings['stic_group_opportunities_status_list']['granted'] = 'Concedida';
+$app_list_strings['stic_group_opportunities_status_list']['not_granted'] = 'No concedida';
+
+// Organitzacions subvencionades: Estat de la documentació
+$app_list_strings['stic_group_opportunities_doc_status_list']['not_required'] = 'No necessària';
+$app_list_strings['stic_group_opportunities_doc_status_list']['requested'] = 'Sol·licitada';
+$app_list_strings['stic_group_opportunities_doc_status_list']['delivered'] = 'Lliurada';
+$app_list_strings['stic_group_opportunities_doc_status_list']['validated'] = 'Validada';
+
// Modificacions del core de SuiteCRM
@@ -3593,3 +3612,24 @@
$app_list_strings['map_relate_type_list']['Opportunities'] = 'Subvencions';
$app_list_strings['map_relate_type_list']['Project'] = 'Projectes';
$app_list_strings['map_relate_type_list']['Prospects'] = 'Públic Objectiu';
+
+// Campanyes: Tipus de campanya
+$app_list_strings['campaign_type_dom'][''] = '';
+$app_list_strings['campaign_type_dom']['Telesales'] = 'Televenda';
+$app_list_strings['campaign_type_dom']['Mail'] = 'Correu';
+$app_list_strings['campaign_type_dom']['Email'] = 'Correu electrònic';
+$app_list_strings['campaign_type_dom']['Print'] = 'Impressió';
+$app_list_strings['campaign_type_dom']['Web'] = 'Web';
+$app_list_strings['campaign_type_dom']['Radio'] = 'Ràdio';
+$app_list_strings['campaign_type_dom']['Television'] = 'Televisió';
+$app_list_strings['campaign_type_dom']['NewsLetter'] = 'Butlletí de notícies';
+$app_list_strings['campaign_type_dom']['Survey'] = 'Enquesta';
+$app_list_strings['campaign_type_dom']['Notification'] = 'Notificació';
+
+// Plantilles de Correu electrònic: Tipus de plantilla
+$app_list_strings['emailTemplates_type_list_no_workflow'][''] = '';
+$app_list_strings['emailTemplates_type_list_no_workflow']['campaign'] = 'Campanya';
+$app_list_strings['emailTemplates_type_list_no_workflow']['notification'] = 'Notificació';
+$app_list_strings['emailTemplates_type_list_no_workflow']['email'] = 'Correu electrònic';
+$app_list_strings['emailTemplates_type_list_no_workflow']['event'] = 'Esdeveniment';
+$app_list_strings['emailTemplates_type_list_no_workflow']['system'] = 'Sistema';
diff --git a/custom/Extension/application/Ext/Language/en_us.SticLang.php b/custom/Extension/application/Ext/Language/en_us.SticLang.php
index 70e80ec4fae..991ab607c84 100644
--- a/custom/Extension/application/Ext/Language/en_us.SticLang.php
+++ b/custom/Extension/application/Ext/Language/en_us.SticLang.php
@@ -133,7 +133,7 @@
$app_list_strings['moduleList']['stic_Custom_View_Actions'] = 'Actions';
$app_list_strings['moduleList']['stic_Custom_View_Customizations'] = 'Customizations';
$app_list_strings['moduleList']['stic_Custom_View_Conditions'] = 'Conditions';
-
+$app_list_strings['moduleList']['stic_Group_Opportunities'] = 'Granted accounts';
$app_list_strings['moduleListSingular']['Accounts'] = 'Account';
$app_list_strings['moduleListSingular']['Contacts'] = 'Contact';
$app_list_strings['moduleListSingular']['Leads'] = 'Lead';
@@ -177,7 +177,7 @@
$app_list_strings['moduleListSingular']['stic_Custom_View_Actions'] = 'Action';
$app_list_strings['moduleListSingular']['stic_Custom_View_Customizations'] = 'Customization';
$app_list_strings['moduleListSingular']['stic_Custom_View_Conditions'] = 'Condition';
-
+$app_list_strings['moduleListSingular']['stic_Group_Opportunities'] = 'Granted account';
$app_list_strings['parent_type_display']['Accounts'] = 'Accounts';
$app_list_strings['parent_type_display']['Contacts'] = 'Contacts';
$app_list_strings['parent_type_display']['Leads'] = 'Leads';
@@ -215,6 +215,7 @@
$app_list_strings['parent_type_display']['stic_Training'] = 'Training';
$app_list_strings['parent_type_display']['stic_Work_Experience'] = 'Work experience';
$app_list_strings['parent_type_display']['stic_Skills'] = 'Skills';
+$app_list_strings['parent_type_display']['stic_Group_Opportunities'] = 'Granted accounts';
$app_list_strings['record_type_display']['Accounts'] = 'Accounts';
$app_list_strings['record_type_display']['Contacts'] = 'Contacts';
@@ -253,6 +254,7 @@
$app_list_strings['record_type_display']['stic_Training'] = 'Training';
$app_list_strings['record_type_display']['stic_Work_Experience'] = 'Work experience';
$app_list_strings['record_type_display']['stic_Skills'] = 'Skills';
+$app_list_strings['record_type_display']['stic_Group_Opportunities'] = 'Granted accounts';
$app_list_strings['record_type_display_notes']['Accounts'] = 'Accounts';
$app_list_strings['record_type_display_notes']['Contacts'] = 'Contacts';
@@ -291,6 +293,10 @@
$app_list_strings['record_type_display_notes']['stic_Training'] = 'Training';
$app_list_strings['record_type_display_notes']['stic_Work_Experience'] = 'Work experience';
$app_list_strings['record_type_display_notes']['stic_Skills'] = 'Skills';
+$app_list_strings['record_type_display_notes']['stic_Group_Opportunities'] = 'Granted accounts';
+
+$app_list_strings['parent_type_display_notifications']['Opportunities'] = 'Opportunities';
+$app_list_strings['parent_type_display_notifications']['stic_Events'] = 'Events';
// Current VAT percentages (IVA)
$app_list_strings['vat_list']['21'] = '21%';
@@ -3515,6 +3521,19 @@
$app_list_strings['stic_custom_views_condition_values_list']['anniversary'] = 'Anniversary';
$app_list_strings['stic_custom_views_condition_values_list']['current_user'] = 'Current user';
+// Granted accounts: Status
+$app_list_strings['stic_group_opportunities_status_list']['guest'] = 'Guest';
+$app_list_strings['stic_group_opportunities_status_list']['participating'] = 'Participating';
+$app_list_strings['stic_group_opportunities_status_list']['rejected'] = 'Rejected';
+$app_list_strings['stic_group_opportunities_status_list']['granted'] = 'Granted';
+$app_list_strings['stic_group_opportunities_status_list']['not_granted'] = 'Not granted';
+
+// Granted accounts: Documentation Status
+$app_list_strings['stic_group_opportunities_doc_status_list']['not_required'] = 'Not required';
+$app_list_strings['stic_group_opportunities_doc_status_list']['requested'] = 'Requested';
+$app_list_strings['stic_group_opportunities_doc_status_list']['delivered'] = 'Delivered';
+$app_list_strings['stic_group_opportunities_doc_status_list']['validated'] = 'Validated';
+
// SuiteCRM Core modifications
@@ -3560,3 +3579,23 @@
$app_list_strings['aow_date_type_list']['year'] = 'Years'; // New STIC item
$app_list_strings['aow_date_type_list']['business_hours'] = 'Business hours';
+// Campaigns: Campaign types
+$app_list_strings['campaign_type_dom'][''] = '';
+$app_list_strings['campaign_type_dom']['Telesales'] = 'Telesales';
+$app_list_strings['campaign_type_dom']['Mail'] = 'Mail';
+$app_list_strings['campaign_type_dom']['Email'] = 'Email';
+$app_list_strings['campaign_type_dom']['Print'] = 'Print';
+$app_list_strings['campaign_type_dom']['Web'] = 'Web';
+$app_list_strings['campaign_type_dom']['Radio'] = 'Radio';
+$app_list_strings['campaign_type_dom']['Television'] = 'Television';
+$app_list_strings['campaign_type_dom']['NewsLetter'] = 'Newsletter';
+$app_list_strings['campaign_type_dom']['Survey'] = 'Survey';
+$app_list_strings['campaign_type_dom']['Notification'] = 'Notification';
+
+// Email Templates: Template types
+$app_list_strings['emailTemplates_type_list_no_workflow'][''] = '';
+$app_list_strings['emailTemplates_type_list_no_workflow']['campaign'] = 'Campaign';
+$app_list_strings['emailTemplates_type_list_no_workflow']['notification'] = 'Notification';
+$app_list_strings['emailTemplates_type_list_no_workflow']['email'] = 'Email';
+$app_list_strings['emailTemplates_type_list_no_workflow']['event'] = 'Event';
+$app_list_strings['emailTemplates_type_list_no_workflow']['system'] = 'System';
diff --git a/custom/Extension/application/Ext/Language/es_ES.SticLang.php b/custom/Extension/application/Ext/Language/es_ES.SticLang.php
index 1c9745ab119..826aa96dddb 100644
--- a/custom/Extension/application/Ext/Language/es_ES.SticLang.php
+++ b/custom/Extension/application/Ext/Language/es_ES.SticLang.php
@@ -132,7 +132,7 @@
$app_list_strings['moduleList']['stic_Custom_View_Actions'] = 'Acciones';
$app_list_strings['moduleList']['stic_Custom_View_Customizations'] = 'Personalizaciones';
$app_list_strings['moduleList']['stic_Custom_View_Conditions'] = 'Condiciones';
-
+$app_list_strings['moduleList']['stic_Group_Opportunities'] = 'Organizaciones subvencionadas';
$app_list_strings['moduleListSingular']['Accounts'] = 'Organización';
$app_list_strings['moduleListSingular']['Contacts'] = 'Persona';
$app_list_strings['moduleListSingular']['Leads'] = 'Interesado';
@@ -178,7 +178,7 @@
$app_list_strings['moduleListSingular']['stic_Custom_View_Actions'] = 'Acción';
$app_list_strings['moduleListSingular']['stic_Custom_View_Customizations'] = 'Personalización';
$app_list_strings['moduleListSingular']['stic_Custom_View_Conditions'] = 'Condición';
-
+$app_list_strings['moduleListSingular']['stic_Group_Opportunities'] = 'Organización subvencionada';
$app_list_strings['parent_type_display']['Accounts'] = 'Organizaciones';
$app_list_strings['parent_type_display']['Contacts'] = 'Personas';
$app_list_strings['parent_type_display']['Leads'] = 'Interesados';
@@ -216,6 +216,7 @@
$app_list_strings['parent_type_display']['stic_Training'] = 'Formación';
$app_list_strings['parent_type_display']['stic_Work_Experience'] = 'Experiencia laboral';
$app_list_strings['parent_type_display']['stic_Skills'] = 'Competencias';
+$app_list_strings['parent_type_display']['stic_Group_Opportunities'] = 'Organizaciones subvencionadas';
$app_list_strings['record_type_display']['Accounts'] = 'Organizaciones';
$app_list_strings['record_type_display']['Contacts'] = 'Personas';
@@ -254,6 +255,7 @@
$app_list_strings['record_type_display']['stic_Training'] = 'Formación';
$app_list_strings['record_type_display']['stic_Work_Experience'] = 'Experiencia laboral';
$app_list_strings['record_type_display']['stic_Skills'] = 'Competencias';
+$app_list_strings['record_type_display']['stic_Group_Opportunities'] = 'Organizaciones subvencionadas';
$app_list_strings['record_type_display_notes']['Accounts'] = 'Organizaciones';
$app_list_strings['record_type_display_notes']['Contacts'] = 'Personas';
@@ -292,6 +294,10 @@
$app_list_strings['record_type_display_notes']['stic_Training'] = 'Formación';
$app_list_strings['record_type_display_notes']['stic_Work_Experience'] = 'Experiencia laboral';
$app_list_strings['record_type_display_notes']['stic_Skills'] = 'Competencias';
+$app_list_strings['record_type_display_notes']['stic_Group_Opportunities'] = 'Organizaciones subvencionadas';
+
+$app_list_strings['parent_type_display_notifications']['Opportunities'] = 'Subvenciones';
+$app_list_strings['parent_type_display_notifications']['stic_Events'] = 'Eventos';
// Porcentajes de IVA vigentes
$app_list_strings['vat_list']['21'] = '21%';
@@ -3516,6 +3522,19 @@
$app_list_strings['stic_custom_views_condition_values_list']['anniversary'] = 'Aniversario';
$app_list_strings['stic_custom_views_condition_values_list']['current_user'] = 'Usuario actual';
+// Organizaciones subvencionadas: Estado
+$app_list_strings['stic_group_opportunities_status_list']['guest'] = 'Invitada';
+$app_list_strings['stic_group_opportunities_status_list']['participating'] = 'Participante';
+$app_list_strings['stic_group_opportunities_status_list']['rejected'] = 'Rechazada';
+$app_list_strings['stic_group_opportunities_status_list']['granted'] = 'Concedida';
+$app_list_strings['stic_group_opportunities_status_list']['not_granted'] = 'No concedida';
+
+// Organizaciones subvencionadas: Estado de la documentación
+$app_list_strings['stic_group_opportunities_doc_status_list']['not_required'] = 'No necesaria';
+$app_list_strings['stic_group_opportunities_doc_status_list']['requested'] = 'Solicitada';
+$app_list_strings['stic_group_opportunities_doc_status_list']['delivered'] = 'Entregada';
+$app_list_strings['stic_group_opportunities_doc_status_list']['validated'] = 'Validada';
+
// Modificaciones del core de SuiteCRM
@@ -3593,3 +3612,24 @@
$app_list_strings['map_relate_type_list']['Opportunities'] = 'Subvenciones';
$app_list_strings['map_relate_type_list']['Project'] = 'Proyectos';
$app_list_strings['map_relate_type_list']['Prospects'] = 'Público Objetivo';
+
+// Campañas: Tipos de campaña
+$app_list_strings['campaign_type_dom'][''] = '';
+$app_list_strings['campaign_type_dom']['Telesales'] = 'Televenta';
+$app_list_strings['campaign_type_dom']['Mail'] = 'Correo';
+$app_list_strings['campaign_type_dom']['Email'] = 'Email';
+$app_list_strings['campaign_type_dom']['Print'] = 'Imprenta';
+$app_list_strings['campaign_type_dom']['Web'] = 'Web';
+$app_list_strings['campaign_type_dom']['Radio'] = 'Radio';
+$app_list_strings['campaign_type_dom']['Television'] = 'Televisión';
+$app_list_strings['campaign_type_dom']['NewsLetter'] = 'Boletín de noticias';
+$app_list_strings['campaign_type_dom']['Survey'] = 'Encuesta';
+$app_list_strings['campaign_type_dom']['Notification'] = 'Notificación';
+
+// Plantillas de email: Tipos de plantilla
+$app_list_strings['emailTemplates_type_list_no_workflow'][''] = '';
+$app_list_strings['emailTemplates_type_list_no_workflow']['campaign'] = 'Campaña';
+$app_list_strings['emailTemplates_type_list_no_workflow']['notification'] = 'Notificación';
+$app_list_strings['emailTemplates_type_list_no_workflow']['email'] = 'Email';
+$app_list_strings['emailTemplates_type_list_no_workflow']['event'] = 'Evento';
+$app_list_strings['emailTemplates_type_list_no_workflow']['system'] = 'Sistema';
diff --git a/custom/Extension/application/Ext/Language/gl_ES.SticLang.php b/custom/Extension/application/Ext/Language/gl_ES.SticLang.php
index fac49e8e996..662a2016932 100644
--- a/custom/Extension/application/Ext/Language/gl_ES.SticLang.php
+++ b/custom/Extension/application/Ext/Language/gl_ES.SticLang.php
@@ -39,14 +39,14 @@
$app_strings['LBL_SINERGIACRM_NONPROFITIZED_DESC2'] = 'Este programa é software libre. Permítese a súa redistribución e/ou modificación baixo os termos da Licenza Pública Xeral Affero de GNU versión 3, publicada pola Free Software Foundation, incluíndo calquera permiso adicional indicado no encabezamento do código fonte.';
$app_strings['LBL_SINERGIACRM_NONPROFITIZED_DESC3'] = 'Todos os nomes de outras empresas e produtos mencionados aquí poden ser marcas rexistradas das súas respectivas compañías asociadas.';
-// Creación de registro horario vía cabecera
-$app_strings['LBL_TIMETRACKER_POPUP_BOX_CREATE'] = 'Se creará un registro horario con la siguiente información:';
-$app_strings['LBL_TIMETRACKER_POPUP_BOX_UPDATE_1'] = 'Se cerrará el último registro horario abierto de hoy:';
-$app_strings['LBL_TIMETRACKER_POPUP_BOX_UPDATE_2'] = 'con la siguiente información:';
-$app_strings['LBL_TIMETRACKER_POPUP_BOX_NAME'] = 'Nombre: ';
-$app_strings['LBL_TIMETRACKER_POPUP_BOX_START_DATE'] = 'Fecha y hora de inicio: ';
-$app_strings['LBL_TIMETRACKER_POPUP_BOX_END_DATE'] = 'Fecha y hora de finalización: ';
-$app_strings['LBL_TIMETRACKER_POPUP_BOX_EMPLOYEE'] = 'Empleado: ';
+// Creación de rexistro horario vía cabeceira
+$app_strings['LBL_TIMETRACKER_POPUP_BOX_CREATE'] = 'Crearase un rexistro horario coa seguinte información:';
+$app_strings['LBL_TIMETRACKER_POPUP_BOX_UPDATE_1'] = 'Cerrarase o último rexistro horario aberto de hoxe:';
+$app_strings['LBL_TIMETRACKER_POPUP_BOX_UPDATE_2'] = 'coa seguinte información:';
+$app_strings['LBL_TIMETRACKER_POPUP_BOX_NAME'] = 'Nome: ';
+$app_strings['LBL_TIMETRACKER_POPUP_BOX_START_DATE'] = 'Data e hora de inicio: ';
+$app_strings['LBL_TIMETRACKER_POPUP_BOX_END_DATE'] = 'Data e hora de finalización: ';
+$app_strings['LBL_TIMETRACKER_POPUP_BOX_EMPLOYEE'] = 'Empregado: ';
$app_strings['LBL_TIMETRACKER_POPUP_BOX_QUESTION'] = 'Comentarios (opcional): ';
$app_strings['LBL_TIMETRACKER_POPUP_BOX_OK'] = 'Aceptar';
$app_strings['LBL_TIMETRACKER_POPUP_BOX_CANCEL'] = 'Cancelar';
@@ -122,7 +122,7 @@
$app_list_strings['moduleList']['stic_Security_Groups_Rules'] = 'Grupos de Seguridade - Regras por módulos';
$app_list_strings['moduleList']['stic_Grants'] = 'Axudas';
$app_list_strings['moduleList']['stic_Centers'] = 'Centros';
-$app_list_strings['moduleList']['stic_Time_Tracker'] = 'Registro horario';
+$app_list_strings['moduleList']['stic_Time_Tracker'] = 'Rexistro horario';
$app_list_strings['moduleList']['stic_Work_Calendar'] = 'Calendario laboral';
$app_list_strings['moduleList']['stic_Journal'] = 'Diario';
$app_list_strings['moduleList']['stic_Training'] = 'Formación';
@@ -132,7 +132,7 @@
$app_list_strings['moduleList']['stic_Custom_View_Actions'] = 'Accións';
$app_list_strings['moduleList']['stic_Custom_View_Customizations'] = 'Personalizacións';
$app_list_strings['moduleList']['stic_Custom_View_Conditions'] = 'Condicións';
-
+$app_list_strings['moduleList']['stic_Group_Opportunities'] = 'Organizaciones subvencionadas';
$app_list_strings['moduleListSingular']['Accounts'] = 'Organización';
$app_list_strings['moduleListSingular']['Contacts'] = 'Persoa';
$app_list_strings['moduleListSingular']['Leads'] = 'Interesado';
@@ -168,7 +168,7 @@
$app_list_strings['moduleListSingular']['stic_Security_Groups_Rules'] = 'Grupos de Seguridade - Regra por módulo';
$app_list_strings['moduleListSingular']['stic_Grants'] = 'Axuda';
$app_list_strings['moduleListSingular']['stic_Centers'] = 'Centro';
-$app_list_strings['moduleListSingular']['stic_Time_Tracker'] = 'Registro horario';
+$app_list_strings['moduleListSingular']['stic_Time_Tracker'] = 'Rexistro horario';
$app_list_strings['moduleListSingular']['stic_Work_Calendar'] = 'Calendario laboral';
$app_list_strings['moduleListSingular']['stic_Journal'] = 'Diario';
$app_list_strings['moduleListSingular']['stic_Training'] = 'Formación';
@@ -179,6 +179,7 @@
$app_list_strings['moduleListSingular']['stic_Custom_View_Customizations'] = 'Personalización';
$app_list_strings['moduleListSingular']['stic_Custom_View_Conditions'] = 'Condición';
+$app_list_strings['moduleListSingular']['stic_Group_Opportunities'] = 'Organización subvencionada';
$app_list_strings['parent_type_display']['Accounts'] = 'Organizacións';
$app_list_strings['parent_type_display']['Contacts'] = 'Persoas';
$app_list_strings['parent_type_display']['Leads'] = 'Interesados';
@@ -209,13 +210,14 @@
$app_list_strings['parent_type_display']['stic_Medication'] = 'Medicamentos';
$app_list_strings['parent_type_display']['stic_Prescription'] = 'Prescriciónes médicas';
$app_list_strings['parent_type_display']['stic_Centers'] = 'Centros';
-$app_list_strings['parent_type_display']['stic_Time_Tracker'] = 'Registro horario';
+$app_list_strings['parent_type_display']['stic_Time_Tracker'] = 'Rexistro horario';
$app_list_strings['parent_type_display']['stic_Work_Calendar'] = 'Calendario laboral';
-$app_list_strings['parent_type_display']['stic_Grants'] = 'Ayudas';
+$app_list_strings['parent_type_display']['stic_Grants'] = 'Axudas';
$app_list_strings['parent_type_display']['stic_Journal'] = 'Diario';
$app_list_strings['parent_type_display']['stic_Training'] = 'Formación';
$app_list_strings['parent_type_display']['stic_Work_Experience'] = 'Experiencia laboral';
$app_list_strings['parent_type_display']['stic_Skills'] = 'Competencias';
+$app_list_strings['parent_type_display']['stic_Group_Opportunities'] = 'Organizaciones subvencionadas';
$app_list_strings['record_type_display']['Accounts'] = 'Organizacións';
$app_list_strings['record_type_display']['Contacts'] = 'Persoas';
@@ -254,6 +256,7 @@
$app_list_strings['record_type_display']['stic_Training'] = 'Formación';
$app_list_strings['record_type_display']['stic_Work_Experience'] = 'Experiencia laboral';
$app_list_strings['record_type_display']['stic_Skills'] = 'Competencias';
+$app_list_strings['record_type_display']['stic_Group_Opportunities'] = 'Organizaciones subvencionadas';
$app_list_strings['record_type_display_notes']['Accounts'] = 'Organizacións';
$app_list_strings['record_type_display_notes']['Contacts'] = 'Persoas';
@@ -286,12 +289,16 @@
$app_list_strings['record_type_display_notes']['stic_Prescription'] = 'Prescricións médicas';
$app_list_strings['record_type_display_notes']['stic_Grants'] = 'Axudas';
$app_list_strings['record_type_display_notes']['stic_Centers'] = 'Centros';
-$app_list_strings['record_type_display_notes']['stic_Time_Tracker'] = 'Registro horario';
+$app_list_strings['record_type_display_notes']['stic_Time_Tracker'] = 'Rexistro horario';
$app_list_strings['record_type_display_notes']['stic_Work_Calendar'] = 'Calendario laboral';
$app_list_strings['record_type_display_notes']['stic_Journal'] = 'Diario';
$app_list_strings['record_type_display_notes']['stic_Training'] = 'Formación';
$app_list_strings['record_type_display_notes']['stic_Work_Experience'] = 'Experiencia laboral';
$app_list_strings['record_type_display_notes']['stic_Skills'] = 'Competencias';
+$app_list_strings['record_type_display_notes']['stic_Group_Opportunities'] = 'Organizaciones subvencionadas';
+
+$app_list_strings['parent_type_display_notifications']['Opportunities'] = 'Subvencións';
+$app_list_strings['parent_type_display_notifications']['stic_Events'] = 'Eventos';
// Porcentajes de IVA vigentes
$app_list_strings['vat_list']['21'] = '21%';
@@ -3232,12 +3239,12 @@
// Calendario laboral: Tipo
$app_list_strings['stic_work_calendar_types_list'][''] = '';
$app_list_strings['stic_work_calendar_types_list']['working'] = 'Laborable';
-$app_list_strings['stic_work_calendar_types_list']['vacation'] = 'Vacaciones';
+$app_list_strings['stic_work_calendar_types_list']['vacation'] = 'Vacacións';
$app_list_strings['stic_work_calendar_types_list']['holiday'] = 'Festivo';
-$app_list_strings['stic_work_calendar_types_list']['personal'] = 'Personal';
-$app_list_strings['stic_work_calendar_types_list']['sick'] = 'Baja';
+$app_list_strings['stic_work_calendar_types_list']['personal'] = 'Persoal';
+$app_list_strings['stic_work_calendar_types_list']['sick'] = 'Baixa';
$app_list_strings['stic_work_calendar_types_list']['leave'] = 'Permiso/Excedencia';
-$app_list_strings['stic_work_calendar_types_list']['other'] = 'Otros';
+$app_list_strings['stic_work_calendar_types_list']['other'] = 'Outros';
// Diario: Tipo de diario
$app_list_strings['stic_journal_types_list'][''] = '';
@@ -3288,69 +3295,69 @@
$app_list_strings['stic_training_levels_list'][''] = '';
$app_list_strings['stic_training_levels_list']['childhood'] = 'EI - Educación Infantil';
$app_list_strings['stic_training_levels_list']['primary'] = 'EP - Educación Primaria';
-$app_list_strings['stic_training_levels_list']['secondary'] = 'ESO - Educación Secundaria Obligatoria';
-$app_list_strings['stic_training_levels_list']['upper_secondary'] = 'BACH - Bachillerato';
+$app_list_strings['stic_training_levels_list']['secondary'] = 'ESO - Educación Secundaria Obrigatoria';
+$app_list_strings['stic_training_levels_list']['upper_secondary'] = 'BACH - Bacharelato';
$app_list_strings['stic_training_levels_list']['basic_vocational'] = 'PFI - Programa de Formación e Inserción';
-$app_list_strings['stic_training_levels_list']['intermediate_vocational'] = 'CFGM - Ciclo Formativo de Grado Medio';
-$app_list_strings['stic_training_levels_list']['advanced_vocational'] = 'CFGS - Ciclo Formativo de Grado Superior ';
-$app_list_strings['stic_training_levels_list']['university'] = 'Grado universitario';
-$app_list_strings['stic_training_levels_list']['postgraduate'] = 'Posgrado, máster, doctorado, etc.';
-$app_list_strings['stic_training_levels_list']['other'] = 'Otros';
+$app_list_strings['stic_training_levels_list']['intermediate_vocational'] = 'CFGM - Ciclo Formativo de Grao Medio';
+$app_list_strings['stic_training_levels_list']['advanced_vocational'] = 'CFGS - Ciclo Formativo de Grao Superior ';
+$app_list_strings['stic_training_levels_list']['university'] = 'Grao universitario';
+$app_list_strings['stic_training_levels_list']['postgraduate'] = 'Posgrao, máster, doutoramento, etc.';
+$app_list_strings['stic_training_levels_list']['other'] = 'Outros';
// Formación: Ámbito
$app_list_strings['stic_training_scopes_list'][''] = '';
$app_list_strings['stic_training_scopes_list']['physical_and_sports_activities'] = 'Actividades físicas deportivas';
-$app_list_strings['stic_training_scopes_list']['administration_and_management'] = 'Administración y gestión';
+$app_list_strings['stic_training_scopes_list']['administration_and_management'] = 'Administración e xestión';
$app_list_strings['stic_training_scopes_list']['agrarian'] = 'Agraria';
$app_list_strings['stic_training_scopes_list']['graphic_arts'] = 'Artes gráficas';
-$app_list_strings['stic_training_scopes_list']['arts_and_crafts'] = 'Artes y artesanías';
-$app_list_strings['stic_training_scopes_list']['commerce_and_marketing'] = 'Comercio y marketing';
+$app_list_strings['stic_training_scopes_list']['arts_and_crafts'] = 'Artes e artesanías';
+$app_list_strings['stic_training_scopes_list']['commerce_and_marketing'] = 'Comercio e marketing';
$app_list_strings['stic_training_scopes_list']['building_and_civil_works'] = 'Edificación y obra civil';
-$app_list_strings['stic_training_scopes_list']['electricity_and_electronics'] = 'Electricidad y electrónica';
-$app_list_strings['stic_training_scopes_list']['energy_and_water'] = 'Energía y agua';
+$app_list_strings['stic_training_scopes_list']['electricity_and_electronics'] = 'Electricidade e electrónica';
+$app_list_strings['stic_training_scopes_list']['energy_and_water'] = 'Enerxía e auga';
$app_list_strings['stic_training_scopes_list']['mechanical_manufacturing'] = 'Fabricación mecánica';
-$app_list_strings['stic_training_scopes_list']['hospitality_and_tourism'] = 'Hostelería y turismo';
-$app_list_strings['stic_training_scopes_list']['personal_image'] = 'Imagen personal';
-$app_list_strings['stic_training_scopes_list']['image_and_sound'] = 'Imagen y sonido ';
+$app_list_strings['stic_training_scopes_list']['hospitality_and_tourism'] = 'Hostalería e turismo';
+$app_list_strings['stic_training_scopes_list']['personal_image'] = 'Imaxe persoal';
+$app_list_strings['stic_training_scopes_list']['image_and_sound'] = 'Imaxe e sonido ';
$app_list_strings['stic_training_scopes_list']['food_industries'] = 'Industrias alimentarias';
$app_list_strings['stic_training_scopes_list']['extractive_industries'] = 'Industrias extractivas';
-$app_list_strings['stic_training_scopes_list']['information_technology_and_communications'] = 'Informática y comunicaciones';
-$app_list_strings['stic_training_scopes_list']['installation_and_maintenance'] = 'Instalación y mantenimiento';
-$app_list_strings['stic_training_scopes_list']['wood_furniture_and_cork'] = 'Madera, mueble y corcho';
-$app_list_strings['stic_training_scopes_list']['maritime_fishing'] = 'Marítimo pesquera';
+$app_list_strings['stic_training_scopes_list']['information_technology_and_communications'] = 'Informática e comunicacións';
+$app_list_strings['stic_training_scopes_list']['installation_and_maintenance'] = 'Instalación e mantemento';
+$app_list_strings['stic_training_scopes_list']['wood_furniture_and_cork'] = 'Madeira, moble e cortiza';
+$app_list_strings['stic_training_scopes_list']['maritime_fishing'] = 'Marítimo pesqueira';
$app_list_strings['stic_training_scopes_list']['chemistry'] = 'Química';
-$app_list_strings['stic_training_scopes_list']['health'] = 'Sanidad';
-$app_list_strings['stic_training_scopes_list']['security_and_environment'] = 'Seguridad y medioambiente';
-$app_list_strings['stic_training_scopes_list']['socio_cultural_and_community_services'] = 'Servicios socioculturales y a la comunidad ';
-$app_list_strings['stic_training_scopes_list']['textile_clothing_and_leather'] = 'Textil, confección y piel';
-$app_list_strings['stic_training_scopes_list']['transport_and_maintenance'] = 'Transporte y mantenimiento';
-$app_list_strings['stic_training_scopes_list']['glass_and_ceramics'] = 'Vidrio y cerámica';
-$app_list_strings['stic_training_scopes_list']['other'] = 'Otros';
+$app_list_strings['stic_training_scopes_list']['health'] = 'Sanidade';
+$app_list_strings['stic_training_scopes_list']['security_and_environment'] = 'Seguridade e medioambiente';
+$app_list_strings['stic_training_scopes_list']['socio_cultural_and_community_services'] = 'Servizos socioculturais e á comunidade ';
+$app_list_strings['stic_training_scopes_list']['textile_clothing_and_leather'] = 'Textil, confección e pel';
+$app_list_strings['stic_training_scopes_list']['transport_and_maintenance'] = 'Transporte e mantemento';
+$app_list_strings['stic_training_scopes_list']['glass_and_ceramics'] = 'Vidro e cerámica';
+$app_list_strings['stic_training_scopes_list']['other'] = 'Outros';
// Formación: Curso
$app_list_strings['stic_training_courses_list'][''] = '';
-$app_list_strings['stic_training_courses_list']['childhood_first'] = 'Primero';
+$app_list_strings['stic_training_courses_list']['childhood_first'] = 'Primeiro';
$app_list_strings['stic_training_courses_list']['childhood_second'] = 'Segundo';
-$app_list_strings['stic_training_courses_list']['childhood_third'] = 'Tercero';
-$app_list_strings['stic_training_courses_list']['primary_first'] = 'Primero';
+$app_list_strings['stic_training_courses_list']['childhood_third'] = 'Terceiro';
+$app_list_strings['stic_training_courses_list']['primary_first'] = 'Primeiro';
$app_list_strings['stic_training_courses_list']['primary_second'] = 'Segundo';
-$app_list_strings['stic_training_courses_list']['primary_third'] = 'Tercero';
+$app_list_strings['stic_training_courses_list']['primary_third'] = 'Terceiro';
$app_list_strings['stic_training_courses_list']['primary_fourth'] = 'Cuarto';
$app_list_strings['stic_training_courses_list']['primary_fifth'] = 'Quinto';
$app_list_strings['stic_training_courses_list']['primary_sixth'] = 'Sexto';
-$app_list_strings['stic_training_courses_list']['secondary_first'] = 'Primero';
+$app_list_strings['stic_training_courses_list']['secondary_first'] = 'Primeiro';
$app_list_strings['stic_training_courses_list']['secondary_second'] = 'Segundo';
-$app_list_strings['stic_training_courses_list']['secondary_third'] = 'Tercero';
+$app_list_strings['stic_training_courses_list']['secondary_third'] = 'Terceiro';
$app_list_strings['stic_training_courses_list']['secondary_fourth'] = 'Cuarto';
-$app_list_strings['stic_training_courses_list']['upper_secondary_first'] = 'Primero';
+$app_list_strings['stic_training_courses_list']['upper_secondary_first'] = 'Primeiro';
$app_list_strings['stic_training_courses_list']['upper_secondary_second'] = 'Segundo';
-$app_list_strings['stic_training_courses_list']['intermediate_vocational_first'] = 'Primero';
+$app_list_strings['stic_training_courses_list']['intermediate_vocational_first'] = 'Primeiro';
$app_list_strings['stic_training_courses_list']['intermediate_vocational_second'] = 'Segundo';
-$app_list_strings['stic_training_courses_list']['advanced_vocational_first'] = 'Primero';
+$app_list_strings['stic_training_courses_list']['advanced_vocational_first'] = 'Primeiro';
$app_list_strings['stic_training_courses_list']['advanced_vocational_second'] = 'Segundo';
-$app_list_strings['stic_training_courses_list']['university_first'] = 'Primero';
+$app_list_strings['stic_training_courses_list']['university_first'] = 'Primeiro';
$app_list_strings['stic_training_courses_list']['university_second'] = 'Segundo';
-$app_list_strings['stic_training_courses_list']['university_third'] = 'Tercero';
+$app_list_strings['stic_training_courses_list']['university_third'] = 'Terceiro';
$app_list_strings['stic_training_courses_list']['university_fourth'] = 'Cuarto';
// Formación: Estado
@@ -3359,15 +3366,15 @@
$app_list_strings['stic_training_status_list']['enrolled'] = 'Matriculada';
$app_list_strings['stic_training_status_list']['in_progress'] = 'En curso';
$app_list_strings['stic_training_status_list']['finished'] = 'Finalizada';
-$app_list_strings['stic_training_status_list']['dropped'] = 'Baja';
+$app_list_strings['stic_training_status_list']['dropped'] = 'Baixa';
-// Formación: Disponible al entrar en contacto con la organización
+// Formación: Dispoñible ao entrar en contacto coa organización
$app_list_strings['stic_training_previous_list'][''] = '';
$app_list_strings['stic_training_previous_list']['yes'] = 'Sí';
-$app_list_strings['stic_training_previous_list']['no'] = 'No';
+$app_list_strings['stic_training_previous_list']['no'] = 'Non';
$app_list_strings['stic_training_previous_list']['in_progress'] = 'En curso';
-// Formación: Origen de la beca
+// Formación: Orixe da beca
$app_list_strings['stic_training_grant_origins_list'][''] = '';
$app_list_strings['stic_training_grant_origins_list']['private'] = 'Privada';
$app_list_strings['stic_training_grant_origins_list']['public'] = 'Pública';
@@ -3378,44 +3385,44 @@
$app_list_strings['stic_work_experience_contract_types_list']['permanent'] = 'Indefinido';
$app_list_strings['stic_work_experience_contract_types_list']['internship'] = 'Prácticas';
$app_list_strings['stic_work_experience_contract_types_list']['self_employed'] = 'Autónomo';
-$app_list_strings['stic_work_experience_contract_types_list']['without_contract'] = 'Sin contrato';
+$app_list_strings['stic_work_experience_contract_types_list']['without_contract'] = 'Sen contrato';
-// Experiencia laboral: Tipo de jornada
+// Experiencia laboral: Tipo de xornada
$app_list_strings['stic_work_experience_workday_types_list'][''] = '';
-$app_list_strings['stic_work_experience_workday_types_list']['full_time'] = 'Jornada completa';
-$app_list_strings['stic_work_experience_workday_types_list']['splitted_full_time'] = 'Jornada completa partida';
+$app_list_strings['stic_work_experience_workday_types_list']['full_time'] = 'Xornada completa';
+$app_list_strings['stic_work_experience_workday_types_list']['splitted_full_time'] = 'Xornada completa partida';
$app_list_strings['stic_work_experience_workday_types_list']['weekend'] = 'Fin de semana';
-$app_list_strings['stic_work_experience_workday_types_list']['part_time'] = 'Jornada parcial / Media jornada';
-$app_list_strings['stic_work_experience_workday_types_list']['by_hours'] = 'Jornada parcial por horas';
+$app_list_strings['stic_work_experience_workday_types_list']['part_time'] = 'Xornada parcial / Media xornada';
+$app_list_strings['stic_work_experience_workday_types_list']['by_hours'] = 'Xornada parcial por horas';
// Competencias: Tipo
$app_list_strings['stic_skills_types_list'][''] = '';
$app_list_strings['stic_skills_types_list']['language'] = 'Idiomas';
$app_list_strings['stic_skills_types_list']['technical'] = 'Técnicas';
-$app_list_strings['stic_skills_types_list']['transversal'] = 'Transversales';
-$app_list_strings['stic_skills_types_list']['entrepreneurship'] = 'Autoempleo';
-$app_list_strings['stic_skills_types_list']['other'] = 'Otras';
+$app_list_strings['stic_skills_types_list']['transversal'] = 'Transversais';
+$app_list_strings['stic_skills_types_list']['entrepreneurship'] = 'Autoemprego';
+$app_list_strings['stic_skills_types_list']['other'] = 'Outras';
// Competencias: Nivel
$app_list_strings['stic_skills_levels_list'][''] = '';
$app_list_strings['stic_skills_levels_list']['high'] = 'Alto';
$app_list_strings['stic_skills_levels_list']['medium'] = 'Medio';
-$app_list_strings['stic_skills_levels_list']['low'] = 'Bajo';
+$app_list_strings['stic_skills_levels_list']['low'] = 'Baixo';
// Competencias: Idioma
$app_list_strings['stic_skills_languages_list'][''] = '';
$app_list_strings['stic_skills_languages_list']['catalan'] = 'Catalán';
$app_list_strings['stic_skills_languages_list']['spanish'] = 'Español';
-$app_list_strings['stic_skills_languages_list']['galician'] = 'Gallego';
+$app_list_strings['stic_skills_languages_list']['galician'] = 'Galego';
$app_list_strings['stic_skills_languages_list']['basque'] = 'Vasco';
$app_list_strings['stic_skills_languages_list']['english'] = 'Inglés';
$app_list_strings['stic_skills_languages_list']['french'] = 'Francés';
$app_list_strings['stic_skills_languages_list']['german'] = 'Alemán';
$app_list_strings['stic_skills_languages_list']['chinese'] = 'Chino';
$app_list_strings['stic_skills_languages_list']['arabic'] = 'Árabe';
-$app_list_strings['stic_skills_languages_list']['other'] = 'Otros';
+$app_list_strings['stic_skills_languages_list']['other'] = 'Outros';
-// Competencias: Nivel del idioma
+// Competencias: Nivel do idioma
$app_list_strings['stic_skills_language_levels_list'][''] = '';
$app_list_strings['stic_skills_language_levels_list']['a1'] = 'A1';
$app_list_strings['stic_skills_language_levels_list']['a2'] = 'A2';
@@ -3428,8 +3435,8 @@
$app_list_strings['stic_skills_language_certificates_list'][''] = '';
$app_list_strings['stic_skills_language_certificates_list']['catalan_cifalc'] = 'CIFALC - Comissió Interuniversitària de Formació i Acreditació Lingüístiques de Catalunya';
$app_list_strings['stic_skills_language_certificates_list']['catalan_spl'] = 'SPL - Secretaria de Política Lingüística ';
-$app_list_strings['stic_skills_language_certificates_list']['spanish_dele'] = 'DELE - Diplomas de Español como Lengua Extranjera ';
-$app_list_strings['stic_skills_language_certificates_list']['spanish_siele'] = 'SIELE - Servicio Internacional de Evaluación de la Lengua Española';
+$app_list_strings['stic_skills_language_certificates_list']['spanish_dele'] = 'DELE - Diplomas de Español como Lingua Extranxeira ';
+$app_list_strings['stic_skills_language_certificates_list']['spanish_siele'] = 'SIELE - Servizo Internacional de Evaluación da Lingua Española';
$app_list_strings['stic_skills_language_certificates_list']['english_pet'] = 'PET - Preliminary English Test';
$app_list_strings['stic_skills_language_certificates_list']['english_fce'] = 'FCE - First Certificate in English ';
$app_list_strings['stic_skills_language_certificates_list']['english_cae'] = 'CAE - Certificate in Advanced English';
@@ -3452,35 +3459,35 @@
$app_list_strings['stic_custom_views_views_list']['editview'] = 'Vista de edición';
$app_list_strings['stic_custom_views_views_list']['quickcreate'] = 'Vista de creación rápida';
-// Vistas personalizadas: Tipos de Acciones
+// Vistas personalizadas: Tipos de Accións
$app_list_strings['stic_custom_views_action_type_list']['field_modification'] = 'Campo';
$app_list_strings['stic_custom_views_action_type_list']['panel_modification'] = 'Panel';
-$app_list_strings['stic_custom_views_action_type_list']['tab_modification'] = 'Pestaña';
+$app_list_strings['stic_custom_views_action_type_list']['tab_modification'] = 'Pestana';
-// Vistas personalizadas: Acciones
+// Vistas personalizadas: Accións
$app_list_strings['stic_custom_views_action_list']['visible'] = 'Visible';
-$app_list_strings['stic_custom_views_action_list']['readonly'] = 'Solo lectura';
-$app_list_strings['stic_custom_views_action_list']['required'] = 'Obligado';
-$app_list_strings['stic_custom_views_action_list']['inline'] = 'Edición en línea';
+$app_list_strings['stic_custom_views_action_list']['readonly'] = 'Só lectura';
+$app_list_strings['stic_custom_views_action_list']['required'] = 'Obrigado';
+$app_list_strings['stic_custom_views_action_list']['inline'] = 'Edición en liña';
$app_list_strings['stic_custom_views_action_list']['fixed_value'] = 'Valor por defecto';
-$app_list_strings['stic_custom_views_action_list']['color'] = 'Color del texto';
-$app_list_strings['stic_custom_views_action_list']['background'] = 'Color del fondo';
+$app_list_strings['stic_custom_views_action_list']['color'] = 'Color do texto';
+$app_list_strings['stic_custom_views_action_list']['background'] = 'Color do fondo';
$app_list_strings['stic_custom_views_action_list']['bold'] = 'Negrita';
$app_list_strings['stic_custom_views_action_list']['italic'] = 'Cursiva';
-$app_list_strings['stic_custom_views_action_list']['underline'] = 'Subrayado';
+$app_list_strings['stic_custom_views_action_list']['underline'] = 'Subliñado';
$app_list_strings['stic_custom_views_action_list']['css_style'] = 'Estilo CSS';
-$app_list_strings['stic_custom_views_action_list']['fixed_text'] = 'Texto de la etiqueta';
-
-// Vistas personalizadas: Secciones de elementos
-$app_list_strings['stic_custom_views_element_list']['field'] = 'Todo el campo';
-$app_list_strings['stic_custom_views_element_list']['field_label'] = 'Solo la etiqueta';
-$app_list_strings['stic_custom_views_element_list']['field_input'] = 'Solo la casilla';
-$app_list_strings['stic_custom_views_element_list']['panel'] = 'Todo el panel';
-$app_list_strings['stic_custom_views_element_list']['panel_header'] = 'Solo la cabecera del panel';
-$app_list_strings['stic_custom_views_element_list']['panel_content'] = 'Solo el contenido del panel';
-$app_list_strings['stic_custom_views_element_list']['tab'] = 'Toda la pestaña';
-$app_list_strings['stic_custom_views_element_list']['tab_header'] = 'Solo la cabecera de la pestaña';
-$app_list_strings['stic_custom_views_element_list']['tab_content'] = 'Solo el contenido de la pestaña';
+$app_list_strings['stic_custom_views_action_list']['fixed_text'] = 'Texto da etiqueta';
+
+// Vistas personalizadas: Seccións de elementos
+$app_list_strings['stic_custom_views_element_list']['field'] = 'Todo o campo';
+$app_list_strings['stic_custom_views_element_list']['field_label'] = 'Só a etiqueta';
+$app_list_strings['stic_custom_views_element_list']['field_input'] = 'Só a casilla';
+$app_list_strings['stic_custom_views_element_list']['panel'] = 'Todo o panel';
+$app_list_strings['stic_custom_views_element_list']['panel_header'] = 'Só a cabeceira do panel';
+$app_list_strings['stic_custom_views_element_list']['panel_content'] = 'Só o contido do panel';
+$app_list_strings['stic_custom_views_element_list']['tab'] = 'Toda a pestana';
+$app_list_strings['stic_custom_views_element_list']['tab_header'] = 'Só a cabeceira da pestana';
+$app_list_strings['stic_custom_views_element_list']['tab_content'] = 'Só o contido da pestana';
// Vistas personalizadas: Estado
$app_list_strings['stic_custom_views_status_list']['active'] = 'Activo';
@@ -3504,18 +3511,31 @@
// Vistas personalizadas: Tipos de condiciones
$app_list_strings['stic_custom_views_condition_type_list']['value'] = 'Valor';
-$app_list_strings['stic_custom_views_condition_type_list']['date'] = 'Fecha';
+$app_list_strings['stic_custom_views_condition_type_list']['date'] = 'Data';
$app_list_strings['stic_custom_views_condition_type_list']['user'] = 'Usuario';
$app_list_strings['stic_custom_views_condition_type_list']['field'] = 'Campo';
// Vistas personalizadas: Valores definidos
-$app_list_strings['stic_custom_views_condition_values_list']['now'] = 'Ahora';
-$app_list_strings['stic_custom_views_condition_values_list']['today'] = 'Hoy';
-$app_list_strings['stic_custom_views_condition_values_list']['tomorrow'] = 'Mañana';
-$app_list_strings['stic_custom_views_condition_values_list']['yesterday'] = 'Ayer';
+$app_list_strings['stic_custom_views_condition_values_list']['now'] = 'Agora';
+$app_list_strings['stic_custom_views_condition_values_list']['today'] = 'Hoxe';
+$app_list_strings['stic_custom_views_condition_values_list']['tomorrow'] = 'Mañá';
+$app_list_strings['stic_custom_views_condition_values_list']['yesterday'] = 'Onte';
$app_list_strings['stic_custom_views_condition_values_list']['anniversary'] = 'Aniversario';
$app_list_strings['stic_custom_views_condition_values_list']['current_user'] = 'Usuario actual';
+// Organizaciones subvencionadas: Estado
+$app_list_strings['stic_group_opportunities_status_list']['guest'] = 'Invitada';
+$app_list_strings['stic_group_opportunities_status_list']['participating'] = 'Participante';
+$app_list_strings['stic_group_opportunities_status_list']['rejected'] = 'Rexeitada';
+$app_list_strings['stic_group_opportunities_status_list']['granted'] = 'Concedida';
+$app_list_strings['stic_group_opportunities_status_list']['not_granted'] = 'Non concedida';
+
+// Organizaciones subvencionadas: Estado de la documentación
+$app_list_strings['stic_group_opportunities_doc_status_list']['not_required'] = 'No necesaria';
+$app_list_strings['stic_group_opportunities_doc_status_list']['requested'] = 'Solicitada';
+$app_list_strings['stic_group_opportunities_doc_status_list']['delivered'] = 'Entregada';
+$app_list_strings['stic_group_opportunities_doc_status_list']['validated'] = 'Validada';
+
// Modificaciones del core de SuiteCRM
@@ -3593,3 +3613,24 @@
$app_list_strings['map_relate_type_list']['Opportunities'] = 'Subvencións';
$app_list_strings['map_relate_type_list']['Project'] = 'Proxectos';
$app_list_strings['map_relate_type_list']['Prospects'] = 'Público Obxectivo';
+
+// Campañas: Tipos de campaña
+$app_list_strings['campaign_type_dom'][''] = '';
+$app_list_strings['campaign_type_dom']['Telesales'] = 'Televenta';
+$app_list_strings['campaign_type_dom']['Mail'] = 'Correo';
+$app_list_strings['campaign_type_dom']['Email'] = 'Email';
+$app_list_strings['campaign_type_dom']['Print'] = 'Imprenta';
+$app_list_strings['campaign_type_dom']['Web'] = 'Web';
+$app_list_strings['campaign_type_dom']['Radio'] = 'Radio';
+$app_list_strings['campaign_type_dom']['Television'] = 'Televisión';
+$app_list_strings['campaign_type_dom']['NewsLetter'] = 'Boletín de noticias';
+$app_list_strings['campaign_type_dom']['Survey'] = 'Encuesta';
+$app_list_strings['campaign_type_dom']['Notification'] = 'Notificación';
+
+// Plantillas de email: Tipos de plantilla
+$app_list_strings['emailTemplates_type_list_no_workflow'][''] = '';
+$app_list_strings['emailTemplates_type_list_no_workflow']['campaign'] = 'Campaña';
+$app_list_strings['emailTemplates_type_list_no_workflow']['notification'] = 'Notificación';
+$app_list_strings['emailTemplates_type_list_no_workflow']['email'] = 'Email';
+$app_list_strings['emailTemplates_type_list_no_workflow']['event'] = 'Evento';
+$app_list_strings['emailTemplates_type_list_no_workflow']['system'] = 'Sistema';
diff --git a/custom/Extension/modules/Accounts/Ext/Language/ca_ES.SticLang.php b/custom/Extension/modules/Accounts/Ext/Language/ca_ES.SticLang.php
index a1046c878a3..1a0a8ccdc25 100644
--- a/custom/Extension/modules/Accounts/Ext/Language/ca_ES.SticLang.php
+++ b/custom/Extension/modules/Accounts/Ext/Language/ca_ES.SticLang.php
@@ -142,6 +142,9 @@
// Cadenes Recursos i Reserves
$mod_strings['LBL_STIC_BOOKINGS_ACCOUNTS_FROM_STIC_BOOKINGS_TITLE'] = 'Reserves';
+// Cadenes Organitzacions subvencionades
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_ACCOUNTS_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Participació en subvencions';
+
// Virtual Field Kreporter
$mod_strings['LBL_KREPORTER_EMAILS_LIST'] = "Llista d'adreces de correu";
diff --git a/custom/Extension/modules/Accounts/Ext/Language/en_us.SticLang.php b/custom/Extension/modules/Accounts/Ext/Language/en_us.SticLang.php
index 6d457040b86..52b393e3cd7 100644
--- a/custom/Extension/modules/Accounts/Ext/Language/en_us.SticLang.php
+++ b/custom/Extension/modules/Accounts/Ext/Language/en_us.SticLang.php
@@ -142,8 +142,11 @@
// Resources and Bookings strings
$mod_strings['LBL_STIC_BOOKINGS_ACCOUNTS_FROM_STIC_BOOKINGS_TITLE'] = 'Bookings';
+// Group opportunities Strings
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_ACCOUNTS_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Participation in Opportunities';
+
// Virtual Field Kreporter
-$mod_strings['LBL_KREPORTER_EMAILS_LIST'] = "Email addresses list";
+$mod_strings['LBL_KREPORTER_EMAILS_LIST'] = 'Email addresses list';
// Grants strings
$mod_strings['LBL_STIC_GRANTS_ACCOUNTS_FROM_STIC_GRANTS_TITLE'] = 'Grants';
diff --git a/custom/Extension/modules/Accounts/Ext/Language/es_ES.SticLang.php b/custom/Extension/modules/Accounts/Ext/Language/es_ES.SticLang.php
index 96e9f14aa3b..c4b07b15eaa 100644
--- a/custom/Extension/modules/Accounts/Ext/Language/es_ES.SticLang.php
+++ b/custom/Extension/modules/Accounts/Ext/Language/es_ES.SticLang.php
@@ -142,6 +142,9 @@
// Cadenas Recursos y Reservas
$mod_strings['LBL_STIC_BOOKINGS_ACCOUNTS_FROM_STIC_BOOKINGS_TITLE'] = 'Reservas';
+// Cadenas Organizaciones subvencionadas
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_ACCOUNTS_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Participación en subvenciones';
+
// Virtual Field Kreporter
$mod_strings['LBL_KREPORTER_EMAILS_LIST'] = "Lista de direcciones de correo";
diff --git a/custom/Extension/modules/Accounts/Ext/Language/gl_ES.SticLang.php b/custom/Extension/modules/Accounts/Ext/Language/gl_ES.SticLang.php
index c26cb9f9837..ed3ae298427 100644
--- a/custom/Extension/modules/Accounts/Ext/Language/gl_ES.SticLang.php
+++ b/custom/Extension/modules/Accounts/Ext/Language/gl_ES.SticLang.php
@@ -142,6 +142,9 @@
// Cadenas Recursos y Reservas
$mod_strings['LBL_STIC_BOOKINGS_ACCOUNTS_FROM_STIC_BOOKINGS_TITLE'] = 'Reservas';
+// Cadenas Organizaciones subvencionadas
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_ACCOUNTS_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Participación en subvencións';
+
// Virtual Field Kreporter
$mod_strings['LBL_KREPORTER_EMAILS_LIST'] = "Lista de direccións de correo";
@@ -171,7 +174,7 @@
$mod_strings['MSG_SHOW_DUPLICATES'] = 'O rexistro que está a punto de crear podería ser un duplicado doutra organización existente. Os rexistros de organización con nomes similares lístanse a continuación. Para confirmar a creación desta organización faga clic en Gardar. En caso contrario, pulse Cancelar.';
$mod_strings['LBL_ACCOUNTS_SUBPANEL_TITLE'] = 'Organizacións';
-// Cadeas Ayudas
+// Cadeas Axudas
$mod_strings['LBL_STIC_GRANTS_ACCOUNTS_FROM_STIC_GRANTS_TITLE'] = 'Axudas';
// Cadeas Formación
diff --git a/custom/Extension/modules/Accounts/Ext/Layoutdefs/SticLayoutdefs.php b/custom/Extension/modules/Accounts/Ext/Layoutdefs/SticLayoutdefs.php
index 9cb75ab5274..2857364f307 100644
--- a/custom/Extension/modules/Accounts/Ext/Layoutdefs/SticLayoutdefs.php
+++ b/custom/Extension/modules/Accounts/Ext/Layoutdefs/SticLayoutdefs.php
@@ -241,6 +241,29 @@
),
);
+// Participants subpanel
+$layout_defs["Accounts"]["subpanel_setup"]['stic_group_opportunities_accounts'] = array (
+ 'order' => 100,
+ 'module' => 'stic_Group_Opportunities',
+ 'subpanel_name' => 'ForAccounts',
+ 'sort_order' => 'asc',
+ 'sort_by' => 'id',
+ 'title_key' => 'LBL_STIC_GROUP_OPPORTUNITIES_ACCOUNTS_FROM_STIC_GROUP_OPPORTUNITIES_TITLE',
+ 'get_subpanel_data' => 'stic_group_opportunities_accounts',
+ 'top_buttons' =>
+ array (
+ 0 =>
+ array (
+ 'widget_class' => 'SubPanelTopButtonQuickCreate',
+ ),
+ 1 =>
+ array (
+ 'widget_class' => 'SubPanelTopSelectButton',
+ 'mode' => 'MultiSelect',
+ ),
+ ),
+ );
+
$layout_defs['Accounts']['subpanel_setup']['contacts']['override_subpanel_name'] = 'SticDefault';
$layout_defs['Accounts']['subpanel_setup']['leads']['override_subpanel_name'] = 'SticDefault';
$layout_defs['Accounts']['subpanel_setup']['opportunities']['override_subpanel_name'] = 'SticDefault';
diff --git a/custom/Extension/modules/Accounts/Ext/Vardefs/SticVardefs.php b/custom/Extension/modules/Accounts/Ext/Vardefs/SticVardefs.php
index bc6f45d65b1..d0df81ac83f 100644
--- a/custom/Extension/modules/Accounts/Ext/Vardefs/SticVardefs.php
+++ b/custom/Extension/modules/Accounts/Ext/Vardefs/SticVardefs.php
@@ -1970,6 +1970,18 @@
'vname' => 'LBL_STIC_WORK_EXPERIENCE_ACCOUNTS_FROM_STIC_WORK_EXPERIENCE_TITLE',
);
+// Participations relationship
+$dictionary["Account"]["fields"]["stic_group_opportunities_accounts"] = array (
+ 'name' => 'stic_group_opportunities_accounts',
+ 'type' => 'link',
+ 'relationship' => 'stic_group_opportunities_accounts',
+ 'source' => 'non-db',
+ 'module' => 'stic_Group_Opportunities',
+ 'bean_name' => false,
+ 'side' => 'right',
+ 'vname' => 'LBL_STIC_GROUP_OPPORTUNITIES_ACCOUNTS_FROM_STIC_GROUP_OPPORTUNITIES_TITLE',
+);
+
$dictionary['Account']['fields']['account_type']['massupdate'] = 0;
$dictionary['Account']['fields']['account_type']['studio'] = false;
diff --git a/custom/Extension/modules/Administration/Ext/Language/gl_ES.SticLang.php b/custom/Extension/modules/Administration/Ext/Language/gl_ES.SticLang.php
index e3a180e9d02..b23fd248d50 100644
--- a/custom/Extension/modules/Administration/Ext/Language/gl_ES.SticLang.php
+++ b/custom/Extension/modules/Administration/Ext/Language/gl_ES.SticLang.php
@@ -30,7 +30,7 @@
$mod_strings['LBL_STIC_VALIDATION_RESULTS_DESCRIPTION'] = 'Xestiona e revisa os resultados das accións de validación.';
$mod_strings['LBL_STIC_CUSTOM_VIEWS_LINK_TITLE'] = 'Vistas personalizadas';
-$mod_strings['LBL_STIC_CUSTOM_VIEWS_DESCRIPTION'] = 'Personalización condicional de las vistas de los módulos.';
+$mod_strings['LBL_STIC_CUSTOM_VIEWS_DESCRIPTION'] = 'Personalización condicional das vistas dos módulos.';
$mod_strings['LBL_SINERGIACRM_TAB_STIC_SETTINGS_LINK_TITLE'] = 'Configuración';
$mod_strings['LBL_SINERGIACRM_TAB_STIC_SETTINGS_DESCRIPTION'] = 'Opcións de configuración de SinergiaCRM.';
diff --git a/custom/Extension/modules/Calendar/Ext/Language/gl_ES.SticLang.php b/custom/Extension/modules/Calendar/Ext/Language/gl_ES.SticLang.php
index 5f1639cb524..e204d019241 100644
--- a/custom/Extension/modules/Calendar/Ext/Language/gl_ES.SticLang.php
+++ b/custom/Extension/modules/Calendar/Ext/Language/gl_ES.SticLang.php
@@ -44,7 +44,7 @@
$mod_strings['LBL_FILTERS_STIC_WORK_CALENDAR_TYPE'] = 'Tipo';
$mod_strings['LBL_FILTERS_STIC_WORK_CALENDAR_DEPARTMENT'] = 'Departamento';
-$mod_strings['LBL_SETTINGS_SHARED_CALENDAR_SEPARATE_INFO'] = 'Con la opción activada los calendarios laborales de los diferentes usuarios pueden solaparse. Para optimizar su visualización se recomienda mostrarlos por separado.';
-$mod_strings['LBL_SETTINGS_STIC_WORK_CALENDAR_DISPLAY'] = 'Ver registros de Calendario laboral';
+$mod_strings['LBL_SETTINGS_SHARED_CALENDAR_SEPARATE_INFO'] = 'Coa opción activada, os calendarios laborais dos diferentes usuarios poden solaparse. Para optimizar a súa visualización recoméndase amosalos por separado.';
+$mod_strings['LBL_SETTINGS_STIC_WORK_CALENDAR_DISPLAY'] = 'Ver rexistros de Calendario laboral';
$mod_strings['LBL_SETTINGS_STIC_WORK_CALENDAR_WORKING'] = 'Calendario laboral - Disponible';
-$mod_strings['LBL_SETTINGS_STIC_WORK_CALENDAR_NOWORKING'] = 'Calendario laboral - No disponible';
+$mod_strings['LBL_SETTINGS_STIC_WORK_CALENDAR_NOWORKING'] = 'Calendario laboral - Non disponible';
diff --git a/custom/Extension/modules/Campaigns/Ext/Language/ca_ES.SticLang.php b/custom/Extension/modules/Campaigns/Ext/Language/ca_ES.SticLang.php
index 9eaaf863b05..eab2e69693c 100644
--- a/custom/Extension/modules/Campaigns/Ext/Language/ca_ES.SticLang.php
+++ b/custom/Extension/modules/Campaigns/Ext/Language/ca_ES.SticLang.php
@@ -32,6 +32,7 @@
$mod_strings['LBL_MODIFIED_NAME'] = 'Modificat per';
$mod_strings['LBL_MODIFIED_USER'] = 'Modificat per';
$mod_strings['LBL_MODIFIED_ID'] = 'Modificat per (ID)';
+$mod_strings['LBL_FLEX_RELATE'] = 'Relacionat amb';
$mod_strings['LBL_EDIT_BUTTON_LABEL'] = 'Edita';
$mod_strings['LBL_STIC_PAYMENT_COMMITMENTS_CAMPAIGNS_FROM_STIC_PAYMENT_COMMITMENTS_TITLE'] = 'Compromisos de Pagament';
$mod_strings['LBL_CAMPAIGN_INFORMATION'] = 'Dades generals';
@@ -57,3 +58,24 @@
$mod_strings['LBL_WEBFORMS_CHOOSE_RECAPTCHA'] = 'Configuració de reCAPTCHA:';
$mod_strings['LBL_WEBFORMS_RECAPTCHA_KO_URL'] = "URL de redirecció en cas d'error de reCAPTCHA:";
$mod_strings['LBL_WEBFORMS_RECAPTCHA_HELP'] = 'Per poder incloure validació reCAPTCHA al formulari cal tenir-lo correctament configurat. Més informació a: https://wikisuite.sinergiacrm.org/index.php?title=Google_reCAPTCHA ';
+
+$mod_strings['LBL_STIC_NOTIFICATION_PROSPECT_LIST_NAMES_C'] = 'Llistes de Públic Objectiu';
+$mod_strings['LBL_NOTIFICATION_PROSPECT_LIST_ID'] = 'Llistes de Públic Objectiu';
+$mod_strings['LBL_NOTIFICATION_TEMPLATE_ID'] = 'Plantilla de correu electrònic';
+$mod_strings['LBL_NOTIFICATION_EMAIL_TEMPLATE_NAME'] = 'Plantilla de correu electrònic';
+$mod_strings['LBL_NOTIFICATION_OUTBOUND_EMAIL_ID'] = 'Correu electrònic sortint';
+$mod_strings['LBL_NOTIFICATION_INBOUND_EMAIL_ID'] = 'Bústia de rebots';
+$mod_strings['LBL_NOTIFICATION_FROM_NAME'] = 'Remitent (nom)';
+$mod_strings['LBL_NOTIFICATION_FROM_ADDR'] = 'Remitent (adreça)';
+$mod_strings['LBL_NOTIFICATION_REPLY_TO_NAME'] = 'Respondre a (nom)';
+$mod_strings['LBL_NOTIFICATION_REPLY_TO_ADDR'] = 'Respondre a (adreça)';
+
+$mod_strings['LBL_NOTIFICATION_INFORMATION_PANEL'] = 'Notificacions';
+
+$mod_strings['LBL_FLEX_RELATE_HELP'] = 'Registre del qual es vol realitzar la notificació. Pot ser un esdeveniment o una subvenció.';
+$mod_strings['LBL_NOTIFICATION_PROSPECT_LIST_ID_HELP'] = "La notificació s'enviarà als membres de les llistes de públic objectiu seleccionades, que han de ser del tipus 'Per defecte'.";
+$mod_strings['LBL_NOTIFICATION_TEMPLATE_ID_HELP'] = "La plantilla de correu electrònic ha de ser del tipus 'Notificació' i s'hi poden incloure camps del registre associat a la notificació (l'esdeveniment o la subvenció).";
+$mod_strings['LBL_NOTIFICATION_OUTBOUND_EMAIL_ID_HELP'] = "Compte de correu que es farà servir per enviar la notificació. Es pot configurar a l'apartat 'Correu electrònic sortint' de l'àrea d'Adminstració.";
+$mod_strings['LBL_NOTIFICATION_INBOUND_EMAIL_ID_HELP'] = "Bústia de correu on rebre els missatges d'error que es puguin produir en l'enviament. Es pot configurar a l'apartat 'Correu electrònic entrant' de l'àrea d'Administració.";
+
+$mod_strings['LBL_NOTIFICATION_NEW_INFO'] = "En desar la notificació els correus a enviar s'afegiran automàticament a la cua d'enviament.";
diff --git a/custom/Extension/modules/Campaigns/Ext/Language/en_us.SticLang.php b/custom/Extension/modules/Campaigns/Ext/Language/en_us.SticLang.php
index 8e17d0ae83e..bf6b7a506ce 100644
--- a/custom/Extension/modules/Campaigns/Ext/Language/en_us.SticLang.php
+++ b/custom/Extension/modules/Campaigns/Ext/Language/en_us.SticLang.php
@@ -32,6 +32,7 @@
$mod_strings['LBL_MODIFIED_NAME'] = 'Modified By';
$mod_strings['LBL_MODIFIED_USER'] = 'Modified By';
$mod_strings['LBL_MODIFIED_ID'] = 'Modified By (ID)';
+$mod_strings['LBL_FLEX_RELATE'] = 'Related to';
$mod_strings['LBL_EDIT_BUTTON_LABEL'] = 'Edit';
$mod_strings['LBL_STIC_PAYMENT_COMMITMENTS_CAMPAIGNS_FROM_STIC_PAYMENT_COMMITMENTS_TITLE'] = 'Payment Commitments';
$mod_strings['LBL_CAMPAIGN_ACCOUNTS_SUBPANEL_TITLE'] = 'Accounts';
@@ -52,3 +53,25 @@
// the proper value has been set in the core files. In English case, it has been set in custom extension
// language file in order to avoid a core modification.
$mod_strings['LBL_WEB_TO_LEAD'] = 'Create person web form';
+
+$mod_strings['LBL_STIC_NOTIFICATION_PROSPECT_LIST_NAMES_C'] = 'Target Lists';
+$mod_strings['LBL_NOTIFICATION_PROSPECT_LIST_ID'] = 'Target Lists';
+$mod_strings['LBL_NOTIFICATION_TEMPLATE_ID'] = 'Email template';
+$mod_strings['LBL_NOTIFICATION_EMAIL_TEMPLATE_NAME'] = 'Template name';
+$mod_strings['LBL_NOTIFICATION_OUTBOUND_EMAIL_ID'] = 'Outbound email';
+$mod_strings['LBL_NOTIFICATION_INBOUND_EMAIL_ID'] = 'Use mailbox';
+$mod_strings['LBL_NOTIFICATION_FROM_NAME'] = 'From name';
+$mod_strings['LBL_NOTIFICATION_FROM_ADDR'] = 'From address';
+$mod_strings['LBL_NOTIFICATION_REPLY_TO_NAME'] = 'Reply to name';
+$mod_strings['LBL_NOTIFICATION_REPLY_TO_ADDR'] = 'Reply to address';
+
+$mod_strings['LBL_NOTIFICATION_INFORMATION_PANEL'] = 'Notifications';
+
+
+$mod_strings['LBL_FLEX_RELATE_HELP'] = 'Record for which the notification is to be made. It can be an event or an opportunity.';
+$mod_strings['LBL_NOTIFICATION_PROSPECT_LIST_ID_HELP'] = "Notification will be sent to members of selected target lists, which must be of type 'Default'.";
+$mod_strings['LBL_NOTIFICATION_TEMPLATE_ID_HELP'] = "The email template must be of type 'Notification' and can include fields from the record related to the notification (the event or the opportunity).";
+$mod_strings['LBL_NOTIFICATION_OUTBOUND_EMAIL_ID_HELP'] = "Email account that will be used to send the notification. It can be configured in the 'Outbound email' section of the Administration area.";
+$mod_strings['LBL_NOTIFICATION_INBOUND_EMAIL_ID_HELP'] = "Mailbox to receive error messages that may occur after sending. It can be configured in the 'Inbound email' section of the Administration area.";
+
+$mod_strings['LBL_NOTIFICATION_NEW_INFO'] = "When saving the notification the emails to be sent will be automatically added to the sending queue.";
diff --git a/custom/Extension/modules/Campaigns/Ext/Language/es_ES.SticLang.php b/custom/Extension/modules/Campaigns/Ext/Language/es_ES.SticLang.php
index 264cd9bc85e..48f34de62c7 100644
--- a/custom/Extension/modules/Campaigns/Ext/Language/es_ES.SticLang.php
+++ b/custom/Extension/modules/Campaigns/Ext/Language/es_ES.SticLang.php
@@ -32,6 +32,7 @@
$mod_strings['LBL_MODIFIED_NAME'] = 'Modificado por';
$mod_strings['LBL_MODIFIED_USER'] = 'Modificado por';
$mod_strings['LBL_MODIFIED_ID'] = 'Modificado por (ID)';
+$mod_strings['LBL_FLEX_RELATE'] = 'Relacionado con';
$mod_strings['LBL_EDIT_BUTTON_LABEL'] = 'Editar';
$mod_strings['LBL_STIC_PAYMENT_COMMITMENTS_CAMPAIGNS_FROM_STIC_PAYMENT_COMMITMENTS_TITLE'] = 'Compromisos de Pago';
$mod_strings['LBL_CAMPAIGN_INFORMATION'] = 'Datos generales';
@@ -57,3 +58,24 @@
$mod_strings['LBL_WEBFORMS_CHOOSE_RECAPTCHA'] = 'Configuración de reCAPTCHA:';
$mod_strings['LBL_WEBFORMS_RECAPTCHA_KO_URL'] = 'URL de redirección en caso de error de reCAPTCHA:';
$mod_strings['LBL_WEBFORMS_RECAPTCHA_HELP'] = 'Para poder incluir validación reCAPTCHA en el formulario es necesario tenerlo correctamente configurado. Más información en: https://wikisuite.sinergiacrm.org/index.php?title=Google_reCAPTCHA ';
+
+$mod_strings['LBL_STIC_NOTIFICATION_PROSPECT_LIST_NAMES_C'] = 'Listas de Público Objetivo';
+$mod_strings['LBL_NOTIFICATION_PROSPECT_LIST_ID'] = 'Listas de Público Objetivo';
+$mod_strings['LBL_NOTIFICATION_TEMPLATE_ID'] = 'Plantilla de correo';
+$mod_strings['LBL_NOTIFICATION_EMAIL_TEMPLATE_NAME'] = 'Plantilla de correo';
+$mod_strings['LBL_NOTIFICATION_OUTBOUND_EMAIL_ID'] = 'Correo saliente';
+$mod_strings['LBL_NOTIFICATION_INBOUND_EMAIL_ID'] = 'Usar buzón';
+$mod_strings['LBL_NOTIFICATION_FROM_NAME'] = 'Remitente (nombre)';
+$mod_strings['LBL_NOTIFICATION_FROM_ADDR'] = 'Remitente (dirección)';
+$mod_strings['LBL_NOTIFICATION_REPLY_TO_NAME'] = 'Responder a (nombre)';
+$mod_strings['LBL_NOTIFICATION_REPLY_TO_ADDR'] = 'Responder a (dirección)';
+
+$mod_strings['LBL_NOTIFICATION_INFORMATION_PANEL'] = 'Notificaciones';
+
+$mod_strings['LBL_FLEX_RELATE_HELP'] = 'Registro del que se desea realizar la notificación. Puede ser un evento o una subvención.';
+$mod_strings['LBL_NOTIFICATION_PROSPECT_LIST_ID_HELP'] = "La notificación se enviará a los miembros de las listas de público objetivo seleccionadas, que deben ser del tipo 'Por defecto'.";
+$mod_strings['LBL_NOTIFICATION_TEMPLATE_ID_HELP'] = "La plantilla de correo electrónico debe ser del tipo 'Notificación' y se pueden incluir en ella campos del registro asociado a la notificación (el evento o la subvención).";
+$mod_strings['LBL_NOTIFICATION_OUTBOUND_EMAIL_ID_HELP'] = "Cuenta de correo que se utilizará para enviar la notificación. Se puede configurar en el apartado 'Correo electrónico saliente' del área de Adminstración.";
+$mod_strings['LBL_NOTIFICATION_INBOUND_EMAIL_ID_HELP'] = "Buzón de correo donde recibir los mensajes de error que se puedan producir tras el envío. Se puede configurar en el apartado 'Correo electrónico entrante' del área de Administración.";
+
+$mod_strings['LBL_NOTIFICATION_NEW_INFO'] = "Al guardar la notificación los correos a enviar se añadirán automáticamente a la cola de envío.";
diff --git a/custom/Extension/modules/Campaigns/Ext/Language/gl_ES.SticLang.php b/custom/Extension/modules/Campaigns/Ext/Language/gl_ES.SticLang.php
index 7794bd4b058..e4a7c191fd3 100644
--- a/custom/Extension/modules/Campaigns/Ext/Language/gl_ES.SticLang.php
+++ b/custom/Extension/modules/Campaigns/Ext/Language/gl_ES.SticLang.php
@@ -32,6 +32,7 @@
$mod_strings['LBL_MODIFIED_NAME'] = 'Modificado por';
$mod_strings['LBL_MODIFIED_USER'] = 'Modificado por';
$mod_strings['LBL_MODIFIED_ID'] = 'Modificado por';
+$mod_strings['LBL_FLEX_RELATE'] = 'Relacionado con';
$mod_strings['LBL_EDIT_BUTTON_LABEL'] = 'Editar';
$mod_strings['LBL_STIC_PAYMENT_COMMITMENTS_CAMPAIGNS_FROM_STIC_PAYMENT_COMMITMENTS_TITLE'] = 'Compromisos de Pago';
$mod_strings['LBL_CAMPAIGN_INFORMATION'] = 'Datos xerais';
@@ -57,3 +58,24 @@
$mod_strings['LBL_WEBFORMS_CHOOSE_RECAPTCHA'] = 'Configuración de reCAPTCHA:';
$mod_strings['LBL_WEBFORMS_RECAPTCHA_KO_URL'] = 'URL de redirección en caso de erro de reCAPTCHA:';
$mod_strings['LBL_WEBFORMS_RECAPTCHA_HELP'] = 'Para poder incluir validación reCAPTCHA no formulario é necesario telo correctamente configurado. Máis información en: https://wikisuite.sinergiacrm.org/index.php?title=Google_reCAPTCHA ';
+
+$mod_strings['LBL_STIC_NOTIFICATION_PROSPECT_LIST_NAMES_C'] = 'Listas de Público Obxectivo';
+$mod_strings['LBL_NOTIFICATION_PROSPECT_LIST_ID'] = 'Listas de Público Obxectivo';
+$mod_strings['LBL_NOTIFICATION_TEMPLATE_ID'] = 'Plantilla de correo';
+$mod_strings['LBL_NOTIFICATION_EMAIL_TEMPLATE_NAME'] = 'Plantilla de correo';
+$mod_strings['LBL_NOTIFICATION_OUTBOUND_EMAIL_ID'] = 'Correo saliente';
+$mod_strings['LBL_NOTIFICATION_INBOUND_EMAIL_ID'] = 'Usar buzón';
+$mod_strings['LBL_NOTIFICATION_FROM_NAME'] = 'Remitente (nombre)';
+$mod_strings['LBL_NOTIFICATION_FROM_ADDR'] = 'Remitente (dirección)';
+$mod_strings['LBL_NOTIFICATION_REPLY_TO_NAME'] = 'Responder a (nombre)';
+$mod_strings['LBL_NOTIFICATION_REPLY_TO_ADDR'] = 'Responder a (dirección)';
+
+$mod_strings['LBL_NOTIFICATION_INFORMATION_PANEL'] = 'Notificaciones';
+
+$mod_strings['LBL_FLEX_RELATE_HELP'] = 'Registro del que se desea realizar la notificación. Puede ser un evento o una subvención.';
+$mod_strings['LBL_NOTIFICATION_PROSPECT_LIST_ID_HELP'] = "La notificación se enviará a los miembros de las listas de público objetivo seleccionadas, que deben ser del tipo 'Por defecto'.";
+$mod_strings['LBL_NOTIFICATION_TEMPLATE_ID_HELP'] = "La plantilla de correo electrónico debe ser del tipo 'Notificación' y se pueden incluir en ella campos del registro asociado a la notificación (el evento o la subvención).";
+$mod_strings['LBL_NOTIFICATION_OUTBOUND_EMAIL_ID_HELP'] = "Cuenta de correo que se utilizará para enviar la notificación. Se puede configurar en el apartado 'Correo electrónico saliente' del área de Adminstración.";
+$mod_strings['LBL_NOTIFICATION_INBOUND_EMAIL_ID_HELP'] = "Buzón de correo donde recibir los mensajes de error que se puedan producir tras el envío. Se puede configurar en el apartado 'Correo electrónico entrante' del área de Administración.";
+
+$mod_strings['LBL_NOTIFICATION_NEW_INFO'] = "Al guardar la notificación los correos a enviar se añadirán automáticamente a la cola de envío.";
diff --git a/custom/Extension/modules/Campaigns/Ext/LogicHooks/SticLogicHooksCall.php b/custom/Extension/modules/Campaigns/Ext/LogicHooks/SticLogicHooksCall.php
new file mode 100644
index 00000000000..a2bb3e11688
--- /dev/null
+++ b/custom/Extension/modules/Campaigns/Ext/LogicHooks/SticLogicHooksCall.php
@@ -0,0 +1,28 @@
+ 'LBL_STIC_PAYMENT_COMMITMENTS_CAMPAIGNS_FROM_STIC_PAYMENT_COMMITMENTS_TITLE',
);
+// Fields for Campaign type Notification
+
+// parent_name, parent_type and parent_id: The Parent element of the Notification
+$dictionary["Campaign"]["fields"]["parent_name"] = array(
+ 'name' => 'parent_name',
+ 'parent_type' => 'record_type_display',
+ 'type_name' => 'parent_type',
+ 'id_name' => 'parent_id',
+ 'vname' => 'LBL_FLEX_RELATE',
+ 'type' => 'parent',
+ 'group' => 'parent_name',
+ 'source' => 'non-db',
+ 'options' => 'parent_type_display_notifications', // Available Notification parent types
+ 'inline_edit' => 0,
+ 'studio' => 'visible',
+ 'popupHelp' => 'LBL_FLEX_RELATE_HELP',
+);
+$dictionary["Campaign"]["fields"]['parent_type'] = array(
+ 'name' => 'parent_type',
+ 'vname' => 'LBL_PARENT_TYPE',
+ 'type' => 'parent_type',
+ 'dbType' => 'varchar',
+ 'group' => 'parent_name',
+ 'options' => 'parent_type_display_notifications', // Available Notification parent types
+ 'len' => 255,
+ 'studio' => 'hidden',
+ 'source' => 'custom_fields',
+);
+$dictionary["Campaign"]["fields"]['parent_id'] = array(
+ 'name' => 'parent_id',
+ 'type' => 'id',
+ 'group' => 'parent_name',
+ 'reportable' => false,
+ 'vname' => 'LBL_PARENT_ID',
+ 'source' => 'custom_fields',
+);
+
+// The names of the selected Prospect Lists for the Notification (saved in db)
+$dictionary["Campaign"]["fields"]['stic_notification_prospect_list_names_c'] = array(
+ 'name' => 'stic_notification_prospect_list_names_c',
+ 'vname' => 'stic_notification_prospect_list_names_c',
+ 'type' => 'varchar',
+ 'len' => '255',
+ 'source' => 'custom_fields',
+);
+
+// The related Prospect Lists to the Notification
+// In edit: Filled by user, used to create relationsiphs
+// In detail: Filled from relationships
+$dictionary["Campaign"]["fields"]['notification_prospect_list_ids'] = array(
+ 'name' => 'notification_prospect_list_ids',
+ 'vname' => 'LBL_NOTIFICATION_PROSPECT_LIST_ID',
+ 'type' => 'multienum',
+ 'massupdate' => 0,
+ 'no_default' => false,
+ 'module' => 'ProspectLists',
+ 'source' => 'non-db',
+ 'comments' => '',
+ 'help' => '',
+ 'duplicate_merge' => 'disabled',
+ 'duplicate_merge_dom_value' => '0',
+ 'audited' => false,
+ 'inline_edit' => '',
+ 'reportable' => true,
+ 'unified_search' => false,
+ 'merge_filter' => 'disabled',
+ 'len' => 100,
+ 'size' => '20',
+ 'options' => 'dynamic_prospect_list_list',
+ 'dependency' => false,
+ 'popupHelp' => 'LBL_NOTIFICATION_PROSPECT_LIST_ID_HELP',
+);
+
+// These fields are from the EmailMarketing related to the Notification
+// In edit: Filled by user, used to assign in the related EmailMarketing
+// In detail: Filled from the related EmailMarketing data
+$dictionary["Campaign"]["fields"]['notification_template_id'] = array(
+ 'name' => 'notification_template_id',
+ 'vname' => 'LBL_NOTIFICATION_TEMPLATE_ID',
+ 'type' => 'enum',
+ 'massupdate' => 0,
+ 'no_default' => false,
+ 'source' => 'non-db',
+ 'comments' => '',
+ 'help' => '',
+ 'duplicate_merge' => 'disabled',
+ 'duplicate_merge_dom_value' => '0',
+ 'audited' => false,
+ 'inline_edit' => '',
+ 'reportable' => true,
+ 'unified_search' => false,
+ 'merge_filter' => 'disabled',
+ 'len' => 100,
+ 'size' => '20',
+ 'options' => 'dynamic_email_template_list',
+ 'dependency' => false,
+ 'popupHelp' => 'LBL_NOTIFICATION_TEMPLATE_ID_HELP',
+);
+$dictionary["Campaign"]["fields"]['notification_email_template_name'] = array(
+ 'name' => 'notification_email_template_name',
+ 'vname' => 'LBL_NOTIFICATION_EMAIL_TEMPLATE_NAME',
+ 'type' => 'varchar',
+ 'len' => '255',
+ 'source' => 'non-db',
+);
+$dictionary["Campaign"]["fields"]['notification_outbound_email_id'] = array(
+ 'name' => 'notification_outbound_email_id',
+ 'vname' => 'LBL_NOTIFICATION_OUTBOUND_EMAIL_ID',
+ 'type' => 'enum',
+ 'source' => 'non-db',
+ 'isnull' => true,
+ 'options' => 'dynamic_outbound_email_list',
+ 'popupHelp' => 'LBL_NOTIFICATION_OUTBOUND_EMAIL_ID_HELP',
+);
+$dictionary["Campaign"]["fields"]['notification_inbound_email_id'] = array(
+ 'name' => 'notification_inbound_email_id',
+ 'vname' => 'LBL_NOTIFICATION_INBOUND_EMAIL_ID',
+ 'type' => 'enum',
+ 'source' => 'non-db',
+ 'isnull' => true,
+ 'options' => 'dynamic_inbound_email_list',
+ 'popupHelp' => 'LBL_NOTIFICATION_INBOUND_EMAIL_ID_HELP',
+);
+$dictionary["Campaign"]["fields"]['notification_from_name'] = array(
+ 'name' => 'notification_from_name',
+ 'vname' => 'LBL_NOTIFICATION_FROM_NAME',
+ 'type' => 'varchar',
+ 'len' => '100',
+ 'source' => 'non-db',
+);
+$dictionary["Campaign"]["fields"]['notification_from_addr'] = array(
+ 'name' => 'notification_from_addr',
+ 'vname' => 'LBL_NOTIFICATION_FROM_ADDR',
+ 'type' => 'varchar',
+ 'source' => 'non-db',
+ 'len' => '100',
+);
+$dictionary["Campaign"]["fields"]['notification_reply_to_name'] = array(
+ 'name' => 'notification_reply_to_name',
+ 'vname' => 'LBL_NOTIFICATION_REPLY_TO_NAME',
+ 'type' => 'varchar',
+ 'source' => 'non-db',
+ 'len' => '100',
+);
+$dictionary["Campaign"]["fields"]['notification_reply_to_addr'] = array(
+ 'name' => 'notification_reply_to_addr',
+ 'vname' => 'LBL_NOTIFICATION_REPLY_TO_ADDR',
+ 'type' => 'varchar',
+ 'source' => 'non-db',
+ 'len' => '100',
+);
+
+$dictionary['Campaign']['fields']['campaign_type']['inline_edit'] = false;
+
$dictionary['Campaign']['fields']['end_date']['required'] = false;
$dictionary['Campaign']['fields']['budget']['massupdate'] = 0;
@@ -52,4 +206,4 @@
$dictionary['Campaign']['fields']['campaign_type']['massupdate'] = 1;
$dictionary['Campaign']['fields']['frequency']['massupdate'] = 1;
-$dictionary['Campaign']['unified_search_default_enabled'] = true;
\ No newline at end of file
+$dictionary['Campaign']['unified_search_default_enabled'] = true;
diff --git a/custom/Extension/modules/Documents/Ext/Language/ca_ES.SticLang.php b/custom/Extension/modules/Documents/Ext/Language/ca_ES.SticLang.php
index 96117126e99..b87cf33c111 100644
--- a/custom/Extension/modules/Documents/Ext/Language/ca_ES.SticLang.php
+++ b/custom/Extension/modules/Documents/Ext/Language/ca_ES.SticLang.php
@@ -44,3 +44,4 @@
$mod_strings['LBL_STIC_JOB_OFFERS_DOCUMENTS_FROM_STIC_JOB_OFFERS_TITLE'] = 'Ofertes laborals';
$mod_strings['LBL_PROSPECTS_DOCUMENTS_1_FROM_PROSPECTS_TITLE'] = 'Públic Objectiu';
$mod_strings['LBL_STIC_FAMILIES_DOCUMENTS_FROM_STIC_FAMILIES_TITLE'] = 'Unitats familiars';
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_DOCUMENTS_1_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Organitzacions subvencionades';
diff --git a/custom/Extension/modules/Documents/Ext/Language/en_us.SticLang.php b/custom/Extension/modules/Documents/Ext/Language/en_us.SticLang.php
index 0995941f5e6..85e9b4b07c7 100644
--- a/custom/Extension/modules/Documents/Ext/Language/en_us.SticLang.php
+++ b/custom/Extension/modules/Documents/Ext/Language/en_us.SticLang.php
@@ -44,3 +44,4 @@
$mod_strings['LBL_STIC_JOB_OFFERS_DOCUMENTS_FROM_STIC_JOB_OFFERS_TITLE'] = 'Job offers';
$mod_strings['LBL_PROSPECTS_DOCUMENTS_1_FROM_PROSPECTS_TITLE'] = 'Público Objetivo';
$mod_strings['LBL_STIC_FAMILIES_DOCUMENTS_FROM_STIC_FAMILIES_TITLE'] = 'Families';
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_DOCUMENTS_1_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Granted accounts';
diff --git a/custom/Extension/modules/Documents/Ext/Language/es_ES.SticLang.php b/custom/Extension/modules/Documents/Ext/Language/es_ES.SticLang.php
index 20baa7bbeb7..8e336b72e5e 100644
--- a/custom/Extension/modules/Documents/Ext/Language/es_ES.SticLang.php
+++ b/custom/Extension/modules/Documents/Ext/Language/es_ES.SticLang.php
@@ -44,3 +44,4 @@
$mod_strings['LBL_STIC_JOB_OFFERS_DOCUMENTS_FROM_STIC_JOB_OFFERS_TITLE'] = 'Ofertas laborales';
$mod_strings['LBL_PROSPECTS_DOCUMENTS_1_FROM_PROSPECTS_TITLE'] = 'Público Objetivo';
$mod_strings['LBL_STIC_FAMILIES_DOCUMENTS_FROM_STIC_FAMILIES_TITLE'] = 'Unidades familiares';
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_DOCUMENTS_1_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Organizaciones subvencionadas';
diff --git a/custom/Extension/modules/Documents/Ext/Language/gl_ES.SticLang.php b/custom/Extension/modules/Documents/Ext/Language/gl_ES.SticLang.php
index 70a2879aaee..7428f74593f 100644
--- a/custom/Extension/modules/Documents/Ext/Language/gl_ES.SticLang.php
+++ b/custom/Extension/modules/Documents/Ext/Language/gl_ES.SticLang.php
@@ -44,3 +44,4 @@
$mod_strings['LBL_STIC_JOB_OFFERS_DOCUMENTS_FROM_STIC_JOB_OFFERS_TITLE'] = 'Ofertas laborais';
$mod_strings['LBL_PROSPECTS_DOCUMENTS_1_FROM_PROSPECTS_TITLE'] = 'Público Obxectivo';
$mod_strings['LBL_STIC_FAMILIES_DOCUMENTS_FROM_STIC_FAMILIES_TITLE'] = 'Unidades familiares';
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_DOCUMENTS_1_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Organizaciones subvencionadas';
diff --git a/custom/Extension/modules/Documents/Ext/Layoutdefs/SticLayoutdefs.php b/custom/Extension/modules/Documents/Ext/Layoutdefs/SticLayoutdefs.php
index d4eaa5614c0..ba45096d86e 100644
--- a/custom/Extension/modules/Documents/Ext/Layoutdefs/SticLayoutdefs.php
+++ b/custom/Extension/modules/Documents/Ext/Layoutdefs/SticLayoutdefs.php
@@ -100,6 +100,29 @@
),
),
);
+
+$layout_defs["Documents"]["subpanel_setup"]['stic_group_opportunities_documents_1'] = array (
+ 'order' => 100,
+ 'module' => 'stic_Group_Opportunities',
+ 'subpanel_name' => 'default',
+ 'sort_order' => 'asc',
+ 'sort_by' => 'id',
+ 'title_key' => 'LBL_STIC_GROUP_OPPORTUNITIES_DOCUMENTS_1_FROM_STIC_GROUP_OPPORTUNITIES_TITLE',
+ 'get_subpanel_data' => 'stic_group_opportunities_documents_1',
+ 'top_buttons' =>
+ array (
+ 0 =>
+ array (
+ 'widget_class' => 'SubPanelTopButtonQuickCreate',
+ ),
+ 1 =>
+ array (
+ 'widget_class' => 'SubPanelTopSelectButton',
+ 'mode' => 'MultiSelect',
+ ),
+ ),
+ );
+
// Subpanels default sorting
$layout_defs['Documents']['subpanel_setup']['accounts']['sort_order'] = 'asc';
$layout_defs['Documents']['subpanel_setup']['accounts']['sort_by'] = 'name';
diff --git a/custom/Extension/modules/Documents/Ext/Vardefs/SticVardefs.php b/custom/Extension/modules/Documents/Ext/Vardefs/SticVardefs.php
index 32a7290be24..c589a763258 100644
--- a/custom/Extension/modules/Documents/Ext/Vardefs/SticVardefs.php
+++ b/custom/Extension/modules/Documents/Ext/Vardefs/SticVardefs.php
@@ -148,6 +148,15 @@
'side' => 'right',
'vname' => 'LBL_STIC_FAMILIES_DOCUMENTS_FROM_DOCUMENTS_TITLE',
);
+$dictionary["Document"]["fields"]["stic_group_opportunities_documents_1"] = array (
+ 'name' => 'stic_group_opportunities_documents_1',
+ 'type' => 'link',
+ 'relationship' => 'stic_group_opportunities_documents_1',
+ 'source' => 'non-db',
+ 'module' => 'stic_Group_Opportunities',
+ 'bean_name' => 'stic_Group_Opportunities',
+ 'vname' => 'LBL_STIC_GROUP_OPPORTUNITIES_DOCUMENTS_1_FROM_STIC_GROUP_OPPORTUNITIES_TITLE',
+ );
// Modified properties in native fields
$dictionary['Document']['fields']['filename']['required'] = 0;
diff --git a/custom/Extension/modules/Employees/Ext/Language/gl_ES.SticLang.php b/custom/Extension/modules/Employees/Ext/Language/gl_ES.SticLang.php
index 393ee5fe334..372a1ecca0c 100644
--- a/custom/Extension/modules/Employees/Ext/Language/gl_ES.SticLang.php
+++ b/custom/Extension/modules/Employees/Ext/Language/gl_ES.SticLang.php
@@ -32,23 +32,23 @@
$mod_strings['LBL_MODIFIED_NAME'] = 'Modificado por';
$mod_strings['LBL_MODIFIED_USER'] = 'Modificado por';
$mod_strings['LBL_MODIFIED_ID'] = 'Modificado por (ID)';
-$mod_strings['LBL_SECURITYGROUPS'] = 'Grupos de seguridad';
-$mod_strings['LBL_SECURITYGROUPS_SUBPANEL_TITLE'] = 'Grupos de seguridad';
+$mod_strings['LBL_SECURITYGROUPS'] = 'Grupos de seguridade';
+$mod_strings['LBL_SECURITYGROUPS_SUBPANEL_TITLE'] = 'Grupos de seguridade';
$mod_strings['LBL_ID'] = 'ID';
-$mod_strings['LBL_DATE_ENTERED'] = 'Fecha de Creación';
-$mod_strings['LBL_DATE_MODIFIED'] = 'Fecha de Modificación';
-$mod_strings['LBL_DESCRIPTION'] = 'Descripción';
+$mod_strings['LBL_DATE_ENTERED'] = 'Data de Creación';
+$mod_strings['LBL_DATE_MODIFIED'] = 'Data de Modificación';
+$mod_strings['LBL_DESCRIPTION'] = 'Descrición';
$mod_strings['LBL_DELETED'] = 'Eliminado';
-$mod_strings['LBL_NAME'] = 'Nombre';
-$mod_strings['LBL_LIST_NAME'] = 'Nombre';
+$mod_strings['LBL_NAME'] = 'Nome';
+$mod_strings['LBL_LIST_NAME'] = 'Nome';
$mod_strings['LBL_EDIT_BUTTON'] = 'Editar';
$mod_strings['LBL_REMOVE'] = 'Desvincular';
$mod_strings['LBL_ASCENDING'] = 'Ascendente';
$mod_strings['LBL_DESCENDING'] = 'Descendente';
$mod_strings['LBL_OPT_IN'] = 'Alta voluntaria';
-$mod_strings['LBL_OPT_IN_PENDING_EMAIL_NOT_SENT'] = 'Alta voluntaria pendiente de confirmación. Correo de confirmación no enviado.';
-$mod_strings['LBL_OPT_IN_PENDING_EMAIL_SENT'] = 'Alta voluntaria pendiente de confirmación. Correo de confirmación enviado.';
+$mod_strings['LBL_OPT_IN_PENDING_EMAIL_NOT_SENT'] = 'Alta voluntaria pendente de confirmación. Correo de confirmación non enviado.';
+$mod_strings['LBL_OPT_IN_PENDING_EMAIL_SENT'] = 'Alta voluntaria pendente de confirmación. Correo de confirmación enviado.';
$mod_strings['LBL_OPT_IN_CONFIRMED'] = 'Alta voluntaria confirmada';
// Asistente de creación de registros de Calendario laboral
-$mod_strings['LBL_PERIODIC_WORK_CALENDAR_BUTTON'] = 'Generar Calendario laboral';
+$mod_strings['LBL_PERIODIC_WORK_CALENDAR_BUTTON'] = 'Xerar Calendario laboral';
diff --git a/custom/Extension/modules/Opportunities/Ext/Language/ca_ES.SticLang.php b/custom/Extension/modules/Opportunities/Ext/Language/ca_ES.SticLang.php
index faf43900495..f411a1d788a 100644
--- a/custom/Extension/modules/Opportunities/Ext/Language/ca_ES.SticLang.php
+++ b/custom/Extension/modules/Opportunities/Ext/Language/ca_ES.SticLang.php
@@ -56,6 +56,10 @@
$mod_strings['LBL_EMAIL_OPPORTUNITIES_BODY_1'] = "S'acosta una data rellevant per a la subvenció següent: ";
$mod_strings['LBL_EMAIL_OPPORTUNITIES_BODY_2'] = ". Feu clic a l'enllaç per revisar-la.";
+// Cadenes Organitzacions subvencionades
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_OPPORTUNITIES_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Organitzacions subvencionades';
+$mod_strings['LBL_LOAD_PARTICIPANTS'] = 'Càrrega de participants';
+
// Cadenes adaptades d'Oportunitats a Subvencions
$mod_strings['LBL_MODULE_NAME'] = 'Subvencions';
$mod_strings['LBL_MODULE_TITLE'] = 'Subvencions: Inici';
@@ -83,5 +87,10 @@
$mod_strings['LBL_CLOSED_WON_OPPORTUNITIES'] = 'Subvencions guanyades';
$mod_strings['LNK_IMPORT_OPPORTUNITIES'] = 'Importa Subvencions';
-// Cadenes adaptades Ajuts
+// Cadenes per a la notificació de noves subvencions
+$mod_strings['LBL_STIC_OPPORTUNITY_URL'] = 'URL de la convocatòria';
+$mod_strings['LBL_STIC_ADDITIONAL_INFORMATION'] = 'Informació addicional';
+$mod_strings['LBL_STIC_CAMPAIGNS_NOTIFICATION_FROM_OPPORTUNITIES_TITLE'] = 'Notificacions';
+
+// Cadenes Ajuts
$mod_strings['LBL_STIC_GRANTS_OPPORTUNITIES_FROM_STIC_GRANTS_TITLE'] = 'Ajuts';
diff --git a/custom/Extension/modules/Opportunities/Ext/Language/en_us.SticLang.php b/custom/Extension/modules/Opportunities/Ext/Language/en_us.SticLang.php
index 935673ae117..9e023ef4fcb 100644
--- a/custom/Extension/modules/Opportunities/Ext/Language/en_us.SticLang.php
+++ b/custom/Extension/modules/Opportunities/Ext/Language/en_us.SticLang.php
@@ -56,5 +56,14 @@
$mod_strings['LBL_EMAIL_OPPORTUNITIES_BODY_1'] = 'There is an approaching deadline for the opportunity: ';
$mod_strings['LBL_EMAIL_OPPORTUNITIES_BODY_2'] = ". Please, click on the following link to review it.";
+// Strings for new Opportunities notification
+$mod_strings['LBL_STIC_OPPORTUNITY_URL'] = 'Opportunity URL';
+$mod_strings['LBL_STIC_ADDITIONAL_INFORMATION'] = 'Additional information';
+$mod_strings['LBL_STIC_CAMPAIGNS_NOTIFICATION_FROM_OPPORTUNITIES_TITLE'] = 'Notifications';
+
//Strings for Grants
$mod_strings['LBL_STIC_GRANTS_OPPORTUNITIES_FROM_STIC_GRANTS_TITLE'] = 'Grants';
+
+// Strings for Group Opportunities
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_OPPORTUNITIES_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Granted accounts';
+$mod_strings['LBL_LOAD_PARTICIPANTS'] = 'Load participants';
diff --git a/custom/Extension/modules/Opportunities/Ext/Language/es_ES.SticLang.php b/custom/Extension/modules/Opportunities/Ext/Language/es_ES.SticLang.php
index 1a4ea028e5a..223b95cf437 100644
--- a/custom/Extension/modules/Opportunities/Ext/Language/es_ES.SticLang.php
+++ b/custom/Extension/modules/Opportunities/Ext/Language/es_ES.SticLang.php
@@ -56,6 +56,10 @@
$mod_strings['LBL_EMAIL_OPPORTUNITIES_BODY_1'] = 'Se aproxima una fecha relevante para la siguiente subvención: ';
$mod_strings['LBL_EMAIL_OPPORTUNITIES_BODY_2'] = '. Haga clic en el enlace para revisarla.';
+// Cadenas Organizaciones subvencionadas
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_OPPORTUNITIES_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Organizaciones subvencionadas';
+$mod_strings['LBL_LOAD_PARTICIPANTS'] = "Carga de participantes";
+
// Cadenas adaptadas de Oportunidades a Subvenciones
$mod_strings['LBL_MODULE_NAME'] = 'Subvenciones';
$mod_strings['LBL_MODULE_TITLE'] = 'Subvenciones: Inicio';
@@ -83,5 +87,10 @@
$mod_strings['LBL_CLOSED_WON_OPPORTUNITIES'] = 'Subvenciones ganadas';
$mod_strings['LNK_IMPORT_OPPORTUNITIES'] = 'Importar Subvenciones';
+// Cadenas para la notificación de nuevas subvenciones
+$mod_strings['LBL_STIC_OPPORTUNITY_URL'] = 'URL de la convocatoria';
+$mod_strings['LBL_STIC_ADDITIONAL_INFORMATION'] = 'Información adicional';
+$mod_strings['LBL_STIC_CAMPAIGNS_NOTIFICATION_FROM_OPPORTUNITIES_TITLE'] = 'Notificaciones';
+
// Cadenas Ayudas
$mod_strings['LBL_STIC_GRANTS_OPPORTUNITIES_FROM_STIC_GRANTS_TITLE'] = 'Ayudas';
diff --git a/custom/Extension/modules/Opportunities/Ext/Language/gl_ES.SticLang.php b/custom/Extension/modules/Opportunities/Ext/Language/gl_ES.SticLang.php
index 2c8abf38adf..23dc2edec39 100644
--- a/custom/Extension/modules/Opportunities/Ext/Language/gl_ES.SticLang.php
+++ b/custom/Extension/modules/Opportunities/Ext/Language/gl_ES.SticLang.php
@@ -56,6 +56,10 @@
$mod_strings['LBL_EMAIL_OPPORTUNITIES_BODY_1'] = 'Aproxímase unha data relevante para a seguinte subvención: ';
$mod_strings['LBL_EMAIL_OPPORTUNITIES_BODY_2'] = 'Faga clic no enlace para revisala.';
+// Cadenas Organizaciones subvencionadas
+$mod_strings['LBL_STIC_GROUP_OPPORTUNITIES_OPPORTUNITIES_FROM_STIC_GROUP_OPPORTUNITIES_TITLE'] = 'Organizaciones subvencionadas';
+$mod_strings['LBL_LOAD_PARTICIPANTS'] = 'Carga de participantes';
+
// Cadeas adaptadas de Oportunidades a Subvencións
$mod_strings['LBL_MODULE_NAME'] = 'Subvencións';
$mod_strings['LBL_MODULE_TITLE'] = 'Subvencións: Inicio';
@@ -83,5 +87,10 @@
$mod_strings['LBL_CLOSED_WON_OPPORTUNITIES'] = 'Subvencións gañadas';
$mod_strings['LNK_IMPORT_OPPORTUNITIES'] = 'Importar Subvencións';
+// Cadeas de notificación de novas subvencións
+$mod_strings['LBL_STIC_OPPORTUNITY_URL'] = 'URL de la convocatoria';
+$mod_strings['LBL_STIC_ADDITIONAL_INFORMATION'] = 'Información adicional';
+$mod_strings['LBL_STIC_CAMPAIGNS_NOTIFICATION_FROM_OPPORTUNITIES_TITLE'] = 'Notificaciones';
+
// Cadeas Ayudas
$mod_strings['LBL_STIC_GRANTS_OPPORTUNITIES_FROM_STIC_GRANTS_TITLE'] = 'Axudas';
diff --git a/custom/Extension/modules/Opportunities/Ext/Layoutdefs/SticLayoutdefs.php b/custom/Extension/modules/Opportunities/Ext/Layoutdefs/SticLayoutdefs.php
index 3f3794ee3b0..194d3fd7152 100644
--- a/custom/Extension/modules/Opportunities/Ext/Layoutdefs/SticLayoutdefs.php
+++ b/custom/Extension/modules/Opportunities/Ext/Layoutdefs/SticLayoutdefs.php
@@ -21,6 +21,29 @@
* You can contact SinergiaTIC Association at email address info@sinergiacrm.org.
*/
+ // Participants subpanel
+ $layout_defs["Opportunities"]["subpanel_setup"]['stic_group_opportunities_opportunities'] = array (
+ 'order' => 100,
+ 'module' => 'stic_Group_Opportunities',
+ 'subpanel_name' => 'ForOpportunities',
+ 'sort_order' => 'asc',
+ 'sort_by' => 'id',
+ 'title_key' => 'LBL_STIC_GROUP_OPPORTUNITIES_OPPORTUNITIES_FROM_STIC_GROUP_OPPORTUNITIES_TITLE',
+ 'get_subpanel_data' => 'stic_group_opportunities_opportunities',
+ 'top_buttons' =>
+ array (
+ 0 =>
+ array (
+ 'widget_class' => 'SubPanelTopButtonQuickCreate',
+ ),
+ 1 =>
+ array (
+ 'widget_class' => 'SubPanelTopSelectButton',
+ 'mode' => 'MultiSelect',
+ ),
+ ),
+ );
+
$layout_defs['Opportunities']['subpanel_setup']['accounts']['override_subpanel_name'] = 'SticDefault';
$layout_defs['Opportunities']['subpanel_setup']['leads']['override_subpanel_name'] = 'SticDefault';
@@ -59,4 +82,27 @@
),
),
);
-
\ No newline at end of file
+
+// Notifications subpanel
+$layout_defs['Opportunities']['subpanel_setup']['stic_campaigns_notification'] = array(
+ 'order' => 100,
+ 'module' => 'Campaigns',
+ 'subpanel_name' => 'SticForNotifications',
+ 'sort_order' => 'asc',
+ 'sort_by' => 'name',
+ 'get_subpanel_data' => 'function:getNotificationsFromParent',
+ 'function_parameters' => array(
+ 'import_function_file' => 'custom/modules/Campaigns/SticUtils.php',
+ 'parent_id' => $this->_focus->id,
+ 'parent_type' => 'Opportunities',
+ 'return_as_array' => false,
+ ),
+ 'title_key' => 'LBL_STIC_CAMPAIGNS_NOTIFICATION_FROM_OPPORTUNITIES_TITLE',
+ 'top_buttons' => array(
+ 0 => array(
+ 'widget_class' => 'SubPanelTopButtonQuickCreate',
+ 'title' => 'LBL_NEW_BUTTON_TITLE',
+ ),
+ ),
+);
+
diff --git a/custom/Extension/modules/Opportunities/Ext/Vardefs/SticVardefs.php b/custom/Extension/modules/Opportunities/Ext/Vardefs/SticVardefs.php
index a6eb2a7975a..3a145f06a89 100644
--- a/custom/Extension/modules/Opportunities/Ext/Vardefs/SticVardefs.php
+++ b/custom/Extension/modules/Opportunities/Ext/Vardefs/SticVardefs.php
@@ -308,6 +308,58 @@
'dependency' => 0,
);
+$dictionary['Opportunity']['fields']['stic_opportunity_url_c'] = array(
+ 'id' => 'Opportunitiesstic_opportunity_url_c',
+ 'custom_module' => 'Opportunities',
+ 'name' => 'stic_opportunity_url_c',
+ 'vname' => 'LBL_STIC_OPPORTUNITY_URL',
+ 'source' => 'custom_fields',
+ 'type' => 'url',
+ 'comments' => '',
+ 'help' => '',
+ 'size' => '20',
+ 'unified_search' => 0,
+ 'required' => 0,
+ 'duplicate_merge' => 'enabled',
+ 'duplicate_merge_dom_value' => '0',
+ 'merge_filter' => 'disabled',
+ 'inline_edit' => 1,
+ 'massupdate' => 0,
+ 'default' => '',
+ 'no_default' => 0,
+ 'importable' => 1,
+ 'audited' => 0,
+ 'reportable' => 1,
+ 'studio' => 'visible',
+ 'link_target' => '_blank',
+);
+
+$dictionary['Opportunity']['fields']['stic_additional_information_c'] = array(
+ 'id' => 'Opportunitiesstic_additional_information_c',
+ 'custom_module' => 'Opportunities',
+ 'name' => 'stic_additional_information_c',
+ 'vname' => 'LBL_STIC_ADDITIONAL_INFORMATION',
+ 'source' => 'custom_fields',
+ 'type' => 'text',
+ 'comments' => '',
+ 'help' => '',
+ 'size' => '20',
+ 'unified_search' => 0,
+ 'required' => 0,
+ 'duplicate_merge' => 'enabled',
+ 'duplicate_merge_dom_value' => '0',
+ 'merge_filter' => 'enabled',
+ 'inline_edit' => 1,
+ 'massupdate' => 0,
+ 'default' => '',
+ 'no_default' => 0,
+ 'importable' => 1,
+ 'audited' => 0,
+ 'reportable' => 1,
+ 'studio' => 'visible',
+ 'rows' => '2',
+);
+
$dictionary["Opportunity"]["fields"]["project_opportunities_1"] = array (
'name' => 'project_opportunities_1',
'type' => 'link',
@@ -354,6 +406,18 @@
'vname' => 'LBL_STIC_GRANTS_OPPORTUNITIES_FROM_STIC_GRANTS_TITLE',
);
+// Participations relationship
+$dictionary["Opportunity"]["fields"]["stic_group_opportunities_opportunities"] = array (
+ 'name' => 'stic_group_opportunities_opportunities',
+ 'type' => 'link',
+ 'relationship' => 'stic_group_opportunities_opportunities',
+ 'source' => 'non-db',
+ 'module' => 'stic_Group_Opportunities',
+ 'bean_name' => false,
+ 'side' => 'right',
+ 'vname' => 'LBL_STIC_GROUP_OPPORTUNITIES_OPPORTUNITIES_FROM_STIC_GROUP_OPPORTUNITIES_TITLE',
+);
+
// Base fields from the module
$dictionary['Opportunity']['fields']['description']['rows'] = '2'; // Make textarea fields shorter
$dictionary['Opportunity']['fields']['description']['massupdate'] = 0;
diff --git a/custom/Extension/modules/Users/Ext/Language/gl_ES.SticLang.php b/custom/Extension/modules/Users/Ext/Language/gl_ES.SticLang.php
index c8b85d172c4..3f424906065 100644
--- a/custom/Extension/modules/Users/Ext/Language/gl_ES.SticLang.php
+++ b/custom/Extension/modules/Users/Ext/Language/gl_ES.SticLang.php
@@ -39,9 +39,9 @@
$mod_strings['LBL_INC_INCORPORA_USER'] = 'Identificador (Incorpora)';
$mod_strings['LBL_INCORPORA_CONNECTION_PARAMS'] = 'Parámetros de conexión con Incorpora';
$mod_strings['LBL_STIC_WORK_CALENDAR'] = 'Calendario laboral';
-$mod_strings['LBL_STIC_WORK_CALENDAR_INFO'] = 'Indica si la funcionalidad de Calendario laboral está activada para el usuario.';
-$mod_strings['LBL_STIC_CLOCK'] = 'Registro horario';
-$mod_strings['LBL_STIC_CLOCK_INFO'] = 'Indica si la funcionalidad de Registro horario está activada para el usuario.';
+$mod_strings['LBL_STIC_WORK_CALENDAR_INFO'] = 'Indica se a funcionalidade de Calendario laboral está activada para o usuario.';
+$mod_strings['LBL_STIC_CLOCK'] = 'Rexistro horario';
+$mod_strings['LBL_STIC_CLOCK_INFO'] = 'Indica se a funcionalidade de Rexistro horario está activada para o usuario.';
$mod_strings['LBL_SDA_ALLOWED'] = 'Acceso a SinergiaDA';
$mod_strings['LBL_SDA_ALLOWED_INFO'] = 'Indica se o usuario dispón de acceso a Sinergia Data Analytics';
@@ -49,4 +49,4 @@
$mod_strings['LBL_KREPORTER_EMAILS_LIST'] = 'Lista de direccións de correo';
// Asistente de creación de registros de Calendario laboral
-$mod_strings['LBL_PERIODIC_WORK_CALENDAR_BUTTON'] = 'Generar Calendario laboral';
+$mod_strings['LBL_PERIODIC_WORK_CALENDAR_BUTTON'] = 'Xerar Calendario laboral';
diff --git a/custom/include/generic/SugarWidgets/SugarWidgetSubPanelCampaignTrackDetailViewLink.php b/custom/include/generic/SugarWidgets/SugarWidgetSubPanelCampaignTrackDetailViewLink.php
new file mode 100644
index 00000000000..ca6d71b8592
--- /dev/null
+++ b/custom/include/generic/SugarWidgets/SugarWidgetSubPanelCampaignTrackDetailViewLink.php
@@ -0,0 +1,127 @@
+_get_column_alias($layout_def));
+ }
+
+ if (empty($layout_def['fields'][$key])) {
+ return "";
+ }
+ $value = $layout_def['fields'][$key];
+
+ $record = '';
+ if (empty($layout_def['target_record_key'])) {
+ $record = $layout_def['fields']['ID'];
+ } else {
+ $record = $layout_def['fields'][strtoupper($layout_def['target_record_key'])];
+ }
+
+ $action = 'TrackDetailView';
+
+ $parent = '';
+ if (!empty($layout_def['parent_info'])) {
+ if (!empty($focus)) {
+ $parent .= "&parent_id={$focus->id}&parent_module={$focus->module_dir}";
+ }
+ } else {
+ if (!empty($layout_def['parent_id']) &&
+ isset($layout_def['fields'][strtoupper($layout_def['parent_id'])])) {
+ $parent .= "&parent_id={$layout_def['fields'][strtoupper($layout_def['parent_id'])]}";
+ }
+ if (!empty($layout_def['parent_module']) &&
+ isset($layout_def['fields'][strtoupper($layout_def['parent_module'])])) {
+ $parent .= "&parent_module={$layout_def['fields'][strtoupper($layout_def['parent_module'])]}";
+ }
+ }
+
+ // STIC-Custom - JCH - 20220921 - Enable visibility of link to related modules in subpanels if
+ // user has access by roles & Security Groups "group"
+ // STIC#861
+ // global $current_user;
+ // if (!empty($record) &&
+ // ($layout_def['DetailView'] && !$layout_def['owner_module']
+ // || $layout_def['DetailView'] && !ACLController::moduleSupportsACL($layout_def['owner_module'])
+ // || ACLController::checkAccess($layout_def['owner_module'], 'view', $layout_def['owner_id'] == $current_user->id))) {
+ // $link = ajaxLink("index.php?module=$module&action=$action&record={$record}{$parent}");
+ // if ($module == 'EAPM') {
+ // $link = "index.php?module=$module&action=$action&record={$record}{$parent}";
+ // }
+ // return ''."$value ";
+ // } else {
+ // return $value;
+ // }
+
+ global $current_user;
+ $groupAccessView = SecurityGroup::groupHasAccess($module, $record, 'view');
+ if (!empty($record) &&
+ ($layout_def['DetailView'] && !$layout_def['owner_module']
+ || $layout_def['DetailView'] && !ACLController::moduleSupportsACL($layout_def['owner_module'])
+ || ACLController::checkAccess($layout_def['owner_module'], 'view', $layout_def['owner_id'] == $current_user->id, 'module', $groupAccessView))) {
+ $link = ajaxLink("index.php?module={$module}&action={$action}&record={$record}{$parent}");
+ if ($module == 'EAPM') {
+ $link = "index.php?module={$module}&action={$action}&record={$record}{$parent}";
+ }
+ return "{$value} ";
+ } else {
+ return $value;
+ }
+ // END STIC-Custom
+ }
+}
diff --git a/custom/include/generic/SugarWidgets/SugarWidgetSubPanelFileDownloadViewLink.php b/custom/include/generic/SugarWidgets/SugarWidgetSubPanelFileDownloadViewLink.php
new file mode 100644
index 00000000000..2a4713389a1
--- /dev/null
+++ b/custom/include/generic/SugarWidgets/SugarWidgetSubPanelFileDownloadViewLink.php
@@ -0,0 +1,102 @@
+_get_column_alias($layout_def);
+ $key = strtoupper($key);
+ }
+
+ if (empty($layout_def['fields'][$key])) {
+ return "";
+ } else {
+ $value = $layout_def['fields'][$key];
+ }
+
+ if (empty($layout_def['target_record_key'])) {
+ $record = $layout_def['fields']['ID'];
+ } else {
+ $record_key = strtoupper($layout_def['target_record_key']);
+ $record = $layout_def['fields'][$record_key];
+ }
+
+ if (!empty($layout_def['target_module_key'])) {
+ if (!empty($layout_def['fields'][strtoupper($layout_def['target_module_key'])])) {
+ $module=$layout_def['fields'][strtoupper($layout_def['target_module_key'])];
+ }
+ } else {
+ if (!empty($layout_def['target_module'])) {
+ $module = $layout_def['target_module'];
+ } else {
+ $module = $layout_def['module'];
+ }
+ }
+
+ global $current_user;
+ $groupAccessView = SecurityGroup::groupHasAccess($module,$record,'view');
+ if (!empty($record) &&
+ ($layout_def['DetailView'] && !$layout_def['owner_module']
+ || $layout_def['DetailView'] && !ACLController::moduleSupportsACL($layout_def['owner_module'])
+ || ACLController::checkAccess($layout_def['owner_module'], 'view', $layout_def['owner_id'] == $current_user->id, 'module', $groupAccessView))) {
+ $link = ajaxLink("index.php?entryPoint=download&id={$record}&type={$module}");
+ return ''.$value.' ';
+ } else {
+ return $value;
+ }
+ }
+}
diff --git a/custom/metadata/SticRelationshipsMetaData.php b/custom/metadata/SticRelationshipsMetaData.php
index 51607b36213..db2928585a3 100644
--- a/custom/metadata/SticRelationshipsMetaData.php
+++ b/custom/metadata/SticRelationshipsMetaData.php
@@ -6706,4 +6706,258 @@
),
),
),
-);
\ No newline at end of file
+);
+$dictionary["stic_group_opportunities_accounts"] = array (
+ 'true_relationship_type' => 'one-to-many',
+ 'relationships' =>
+ array (
+ 'stic_group_opportunities_accounts' =>
+ array (
+ 'lhs_module' => 'Accounts',
+ 'lhs_table' => 'accounts',
+ 'lhs_key' => 'id',
+ 'rhs_module' => 'stic_Group_Opportunities',
+ 'rhs_table' => 'stic_group_opportunities',
+ 'rhs_key' => 'id',
+ 'relationship_type' => 'many-to-many',
+ 'join_table' => 'stic_group_opportunities_accounts_c',
+ 'join_key_lhs' => 'stic_group_opportunities_accountsaccounts_ida',
+ 'join_key_rhs' => 'stic_group_opportunities_accountsstic_group_opportunities_idb',
+ ),
+ ),
+ 'table' => 'stic_group_opportunities_accounts_c',
+ 'fields' =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'id',
+ 'type' => 'varchar',
+ 'len' => 36,
+ ),
+ 1 =>
+ array (
+ 'name' => 'date_modified',
+ 'type' => 'datetime',
+ ),
+ 2 =>
+ array (
+ 'name' => 'deleted',
+ 'type' => 'bool',
+ 'len' => '1',
+ 'default' => '0',
+ 'required' => true,
+ ),
+ 3 =>
+ array (
+ 'name' => 'stic_group_opportunities_accountsaccounts_ida',
+ 'type' => 'varchar',
+ 'len' => 36,
+ ),
+ 4 =>
+ array (
+ 'name' => 'stic_group_opportunities_accountsstic_group_opportunities_idb',
+ 'type' => 'varchar',
+ 'len' => 36,
+ ),
+ ),
+ 'indices' =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'stic_group_opportunities_accountsspk',
+ 'type' => 'primary',
+ 'fields' =>
+ array (
+ 0 => 'id',
+ ),
+ ),
+ 1 =>
+ array (
+ 'name' => 'stic_group_opportunities_accounts_ida1',
+ 'type' => 'index',
+ 'fields' =>
+ array (
+ 0 => 'stic_group_opportunities_accountsaccounts_ida',
+ ),
+ ),
+ 2 =>
+ array (
+ 'name' => 'stic_group_opportunities_accounts_alt',
+ 'type' => 'alternate_key',
+ 'fields' =>
+ array (
+ 0 => 'stic_group_opportunities_accountsstic_group_opportunities_idb',
+ ),
+ ),
+ ),
+ );
+
+ $dictionary["stic_group_opportunities_documents_1"] = array (
+ 'true_relationship_type' => 'many-to-many',
+ 'from_studio' => true,
+ 'relationships' =>
+ array (
+ 'stic_group_opportunities_documents_1' =>
+ array (
+ 'lhs_module' => 'stic_Group_Opportunities',
+ 'lhs_table' => 'stic_group_opportunities',
+ 'lhs_key' => 'id',
+ 'rhs_module' => 'Documents',
+ 'rhs_table' => 'documents',
+ 'rhs_key' => 'id',
+ 'relationship_type' => 'many-to-many',
+ 'join_table' => 'stic_group_opportunities_documents_1_c',
+ 'join_key_lhs' => 'stic_group_opportunities_documents_1stic_group_opportunities_ida',
+ 'join_key_rhs' => 'stic_group_opportunities_documents_1documents_idb',
+ ),
+ ),
+ 'table' => 'stic_group_opportunities_documents_1_c',
+ 'fields' =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'id',
+ 'type' => 'varchar',
+ 'len' => 36,
+ ),
+ 1 =>
+ array (
+ 'name' => 'date_modified',
+ 'type' => 'datetime',
+ ),
+ 2 =>
+ array (
+ 'name' => 'deleted',
+ 'type' => 'bool',
+ 'len' => '1',
+ 'default' => '0',
+ 'required' => true,
+ ),
+ 3 =>
+ array (
+ 'name' => 'stic_group_opportunities_documents_1stic_group_opportunities_ida',
+ 'type' => 'varchar',
+ 'len' => 36,
+ ),
+ 4 =>
+ array (
+ 'name' => 'stic_group_opportunities_documents_1documents_idb',
+ 'type' => 'varchar',
+ 'len' => 36,
+ ),
+ 5 =>
+ array (
+ 'name' => 'document_revision_id',
+ 'type' => 'varchar',
+ 'len' => '36',
+ ),
+ ),
+ 'indices' =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'stic_group_opportunities_documents_1spk',
+ 'type' => 'primary',
+ 'fields' =>
+ array (
+ 0 => 'id',
+ ),
+ ),
+ 1 =>
+ array (
+ 'name' => 'stic_group_opportunities_documents_1_alt',
+ 'type' => 'alternate_key',
+ 'fields' =>
+ array (
+ 0 => 'stic_group_opportunities_documents_1stic_group_opportunities_ida',
+ 1 => 'stic_group_opportunities_documents_1documents_idb',
+ ),
+ ),
+ ),
+ );
+
+ $dictionary["stic_group_opportunities_opportunities"] = array (
+ 'true_relationship_type' => 'one-to-many',
+ 'relationships' =>
+ array (
+ 'stic_group_opportunities_opportunities' =>
+ array (
+ 'lhs_module' => 'Opportunities',
+ 'lhs_table' => 'opportunities',
+ 'lhs_key' => 'id',
+ 'rhs_module' => 'stic_Group_Opportunities',
+ 'rhs_table' => 'stic_group_opportunities',
+ 'rhs_key' => 'id',
+ 'relationship_type' => 'many-to-many',
+ 'join_table' => 'stic_group_opportunities_opportunities_c',
+ 'join_key_lhs' => 'stic_group_opportunities_opportunitiesopportunities_ida',
+ 'join_key_rhs' => 'stic_grp_opportunities_opportunitiesstic_grp_opportunities_idb',
+ ),
+ ),
+ 'table' => 'stic_group_opportunities_opportunities_c',
+ 'fields' =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'id',
+ 'type' => 'varchar',
+ 'len' => 36,
+ ),
+ 1 =>
+ array (
+ 'name' => 'date_modified',
+ 'type' => 'datetime',
+ ),
+ 2 =>
+ array (
+ 'name' => 'deleted',
+ 'type' => 'bool',
+ 'len' => '1',
+ 'default' => '0',
+ 'required' => true,
+ ),
+ 3 =>
+ array (
+ 'name' => 'stic_group_opportunities_opportunitiesopportunities_ida',
+ 'type' => 'varchar',
+ 'len' => 36,
+ ),
+ 4 =>
+ array (
+ 'name' => 'stic_grp_opportunities_opportunitiesstic_grp_opportunities_idb',
+ 'type' => 'varchar',
+ 'len' => 36,
+ ),
+ ),
+ 'indices' =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'stic_group_opportunities_opportunitiesspk',
+ 'type' => 'primary',
+ 'fields' =>
+ array (
+ 0 => 'id',
+ ),
+ ),
+ 1 =>
+ array (
+ 'name' => 'stic_group_opportunities_opportunities_ida1',
+ 'type' => 'index',
+ 'fields' =>
+ array (
+ 0 => 'stic_group_opportunities_opportunitiesopportunities_ida',
+ ),
+ ),
+ 2 =>
+ array (
+ 'name' => 'stic_group_opportunities_opportunities_alt',
+ 'type' => 'alternate_key',
+ 'fields' =>
+ array (
+ 0 => 'stic_grp_opportunities_opportunitiesstic_grp_opportunities_idb',
+ ),
+ ),
+ ),
+ );
+
diff --git a/custom/modules/Campaigns/SticLogicHooksCode.php b/custom/modules/Campaigns/SticLogicHooksCode.php
new file mode 100644
index 00000000000..3e7887c0474
--- /dev/null
+++ b/custom/modules/Campaigns/SticLogicHooksCode.php
@@ -0,0 +1,34 @@
+campaign_type == "Notification") {
+ // Notifications need some non-db fields from related prospect_lists, email_marketing and email_templates
+ include_once "custom/modules/Campaigns/SticUtils.php";
+ CampaignsUtils::fillCampaignNotificationFields($bean);
+ }
+ }
+}
diff --git a/custom/modules/Campaigns/SticUtils.js b/custom/modules/Campaigns/SticUtils.js
index a4c4dc8aa18..4c7c4289da8 100644
--- a/custom/modules/Campaigns/SticUtils.js
+++ b/custom/modules/Campaigns/SticUtils.js
@@ -1,33 +1,80 @@
+/**
+ * This file is part of SinergiaCRM.
+ * SinergiaCRM is a work developed by SinergiaTIC Association, based on SuiteCRM.
+ * Copyright (C) 2013 - 2023 SinergiaTIC Association
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SinergiaTIC Association at email address info@sinergiacrm.org.
+ */
+
/* HEADER */
// Set module name
var module = "Campaigns";
/* INCLUDES */
-// Load moment.js to use in validations
-loadScript("include/javascript/moment.min.js");
-
-/* VALIDATION DEPENDENCIES */
-var validationDependencies = {
- start_date: "end_date",
- end_date: "start_date",
-};
-
-/* DIRECT VALIDATION CALLBACKS */
-addToValidateCallback(getFormName(), "end_date", "date", false, SUGAR.language.get(module, "LBL_END_DATE_ERROR"), function () {
- return checkStartAndEndDatesCoherence("start_date", "end_date");
-});
-addToValidateCallback(getFormName(), "start_date", "date", false, SUGAR.language.get(module, "LBL_START_DATE_ERROR"), function () {
- return checkStartAndEndDatesCoherence("start_date", "end_date");
-});
+if ($('[data-field="end_date"]').length > 0 && $('[data-field="start_date"]').length > 0) {
+ /* VALIDATION DEPENDENCIES */
+ var validationDependencies = {
+ start_date: "end_date",
+ end_date: "start_date"
+ };
+
+ /* VALIDATION CALLBACKS */
+ addToValidateCallback(
+ getFormName(),
+ "end_date",
+ "date",
+ false,
+ SUGAR.language.get(module, "LBL_END_DATE_ERROR"),
+ function() {
+ return checkStartAndEndDatesCoherence("start_date", "end_date");
+ }
+ );
+ addToValidateCallback(
+ getFormName(),
+ "start_date",
+ "date",
+ false,
+ SUGAR.language.get(module, "LBL_START_DATE_ERROR"),
+ function() {
+ return checkStartAndEndDatesCoherence("start_date", "end_date");
+ }
+ );
+}
/* VIEWS CUSTOM CODE */
switch (viewType()) {
- case "edit":
case "quickcreate":
+ case "popup":
+ $(document).ready(function() {
+ initializeQuickCreate();
+ });
+ break;
+
+ case "edit":
+ $(document).ready(function() {
+ initilizeEditView();
+ });
break;
case "detail":
+ $(document).ready(function() {
+ initilizeDetailView();
+ });
break;
case "list":
@@ -37,4 +84,331 @@ switch (viewType()) {
break;
}
-/* AUX FUNCTIONS */
+$(document).ready(function() {
+ if (viewType() != "list") {
+ $("#notification_prospect_list_ids").selectize({ plugins: ["remove_button"] });
+
+ if ($("#LBL_NOTIFICATION_NEW_INFO").length == 0) {
+ $(
+ "" +
+ SUGAR.language.get("Campaigns", "LBL_NOTIFICATION_NEW_INFO") +
+ "
"
+ ).prependTo("[data-id='LBL_NOTIFICATION_INFORMATION_PANEL'] .tab-content .row");
+
+ $("#notification_outbound_email_id").on("change paste keyup", mail_change);
+ $("#notification_inbound_email_id").on("change paste keyup", mail_change);
+ $("#notification_template_id").on("change paste keyup", template_change);
+ }
+
+ // Check Notification panel exists
+ const targetElement = $(".panel-body[data-id='LBL_NOTIFICATION_INFORMATION_PANEL']").parent()[0];
+ if (targetElement) {
+ var observer = new MutationObserver(function(mutations) {
+ mutations.forEach(function(mutation) {
+ if (mutation.attributeName === 'style') {
+ type_change();
+ }
+ });
+ });
+
+ observer.observe(targetElement, { attributes: true, attributeFilter: ['style'] });
+ } else {
+ console.log("Notification panel does not exists in DOM.");
+ }
+
+ type_change();
+ template_change();
+ }
+});
+
+function getCampaingType() {
+ var typeValue = $('[name="campaign_type"]').val();
+ if (typeValue === undefined) {
+ typeValue = $('[field="campaign_type"] input').val();
+ }
+ return typeValue;
+}
+
+function type_change() {
+ var typeValue = getCampaingType();
+
+ updateViewNewsLetterType(typeValue == "NewsLetter");
+ updateViewNotificationType(typeValue == "Notification");
+ mail_change();
+}
+
+function mail_change() {
+ if (STIC && STIC.campaignEmails && STIC.campaignEmails.inbound) {
+ var inbound = STIC.campaignEmails.inbound.find(item => item.id === $("#notification_inbound_email_id").val());
+ $("#notification_from_name").val(inbound ? inbound.name : "");
+ $("#notification_from_addr").val(inbound ? inbound.addr : "");
+ }
+}
+
+function template_change() {
+ if ($("#notification_template_id").val() == "") {
+ $("#notification_template_id_edit_link").hide();
+ } else {
+ $("#notification_template_id_edit_link").show();
+ }
+}
+
+function ConvertItems(id) {
+ var items = new Array();
+
+ //get the items that are to be converted
+ expected_revenue = document.getElementById("expected_revenue");
+ budget = document.getElementById("budget");
+ actual_cost = document.getElementById("actual_cost");
+ expected_cost = document.getElementById("expected_cost");
+
+ //unformat the values of the items to be converted
+ expected_revenue.value = unformatNumber(expected_revenue.value, num_grp_sep, dec_sep);
+ expected_cost.value = unformatNumber(expected_cost.value, num_grp_sep, dec_sep);
+ budget.value = unformatNumber(budget.value, num_grp_sep, dec_sep);
+ actual_cost.value = unformatNumber(actual_cost.value, num_grp_sep, dec_sep);
+
+ //add the items to an array
+ items[items.length] = expected_revenue;
+ items[items.length] = budget;
+ items[items.length] = expected_cost;
+ items[items.length] = actual_cost;
+
+ //call function that will convert currency
+ ConvertRate(id, items);
+
+ //Add formatting back to items
+ expected_revenue.value = formatNumber(expected_revenue.value, num_grp_sep, dec_sep);
+ expected_cost.value = formatNumber(expected_cost.value, num_grp_sep, dec_sep);
+ budget.value = formatNumber(budget.value, num_grp_sep, dec_sep);
+ actual_cost.value = formatNumber(actual_cost.value, num_grp_sep, dec_sep);
+}
+
+function updateViewNewsLetterType(isNewsLetter) {
+ if (isNewsLetter) {
+ $('[data-field="frequency"]').show();
+ $('#freq_label').show();
+ $('#freq_field').show();
+ } else {
+ $('[data-field="frequency"]').hide();
+ $('#freq_label').hide();
+ $('#freq_field').hide();
+ }
+}
+
+function setRequired(require, field) {
+ var $form = $("form#" + getFormName());
+
+ var labelText = $("[data-field='" + field + "'] [data-label]").contents().filter(function() {
+ return this.nodeType === Node.TEXT_NODE;
+ }).text().trim().slice(0, -1);
+ var type = $("[field='" + field + "']", $form).attr("type");
+ $("[data-field='" + field + "'] div.label span.required", $form).remove();
+
+ if (require) {
+ addToValidate(getFormName(), field, type, true, labelText);
+ addRequiredMark(field);
+ } else {
+ removeFromValidate(getFormName(), field);
+ removeRequiredMark(field);
+ }
+}
+
+function setAutofillMark(autofill, field) {
+ if (autofill) {
+ setAutofill([field]);
+ } else {
+ $row = $("form #" + field).closest(".edit-view-row-item");
+ $row.find(".label").removeClass("autofill");
+ $row.removeAttr("title");
+ }
+}
+
+function updateViewNotificationType(isNotification) {
+ setRequired(!isNotification, "name");
+ setAutofillMark(isNotification, "name");
+
+ setRequired(isNotification, "start_date");
+ setRequired(isNotification, "parent_name");
+ setRequired(isNotification, "notification_outbound_email_id");
+ setRequired(isNotification, "notification_inbound_email_id");
+ setRequired(isNotification, "notification_prospect_list_ids");
+ setRequired(isNotification, "notification_template_id");
+ setRequired(isNotification, "notification_from_name");
+ setRequired(isNotification, "notification_from_addr");
+
+ var $form = $("form#" + getFormName());
+
+ if (isNotification) {
+ $form.find("#status").val("Active");
+ $form.find('[data-field="status"]').hide();
+ $form.find('[data-field="end_date"]').hide();
+ $form.find('[data-field="parent_name"]').show();
+ $form.find(".panel-body[data-id='LBL_NOTIFICATION_INFORMATION_PANEL']").parent().show();
+ $form.find("[data-label='LBL_NAVIGATION_MENU_GEN2']").hide();
+ if ($form.find("#start_date").val() == "") {
+ var formatDate = $form.find("#start_date").parent().children(".dateFormat").text().toUpperCase();
+ if (formatDate == "") {
+ formatDate = STIC.userDateFormat.toUpperCase();
+ }
+ if (formatDate != "") {
+ $form.find("#start_date").val(moment().format(formatDate));
+ }
+ }
+ } else {
+ $form.find("#parent_type").val("");
+ $form.find("#parent_name").val("");
+ $form.find("#parent_id").val("");
+ $form.find("#status").val("");
+ $form.find('[data-field="status"]').show();
+ $form.find('[data-field="end_date"]').show();
+ $form.find('[data-field="parent_name"]').hide();
+ $form.find(".panel-body[data-id='LBL_NOTIFICATION_INFORMATION_PANEL']").parent().hide();
+ $form.find("[data-label='LBL_NAVIGATION_MENU_GEN2']").show();
+ }
+}
+
+function initializeQuickCreate() {
+ var formName = getFormName();
+ if (formName == "form_SubpanelQuickCreate_Campaigns") {
+ // Is a New notification from Subpanel
+
+ var $form = $("form#" + formName);
+ $form.find("[data-field='campaign_type']").hide();
+ $form.find("#campaign_type").val("Notification");
+
+ $form.find("#status").val("Active");
+ addEditCreateTemplateLinks();
+ }
+}
+
+function initilizeEditView() {
+ var record = $("[name='record']").val();
+ var isEdition = record !== undefined && record != "";
+
+ if (isEdition && getCampaingType() == "Notification") {
+ // Disable editions
+ $("#LBL_NOTIFICATION_NEW_INFO").hide();
+ $("#campaign_type").prop("disabled", true);
+ $("#start_date").parent().children().prop("disabled", true);
+ $("#parent_id").parent().children().prop("disabled", true);
+ $("#parent_id").parent().find("span").hide();
+ $("#notification_outbound_email_id").prop("disabled", true);
+ $("#notification_inbound_email_id").prop("disabled", true);
+ $("#notification_template_id").prop("disabled", true);
+ $("#notification_from_name").parent().children().prop("disabled", true);
+ $("#notification_from_addr").parent().children().prop("disabled", true);
+ $("#notification_reply_to_name").parent().children().prop("disabled", true);
+ $("#notification_reply_to_addr").parent().children().prop("disabled", true);
+ $("#notification_prospect_list_ids")[0].selectize.disable();
+ } else {
+ addEditCreateTemplateLinks();
+ }
+}
+
+function initilizeDetailView() {
+ var typeValue = getCampaingType();
+
+ if (typeValue == "Notification") {
+ // Disable all editable actions
+
+ // Action menu buttons
+ $("#launch_wizard_button").hide();
+
+ // All Subpanels buttons
+ $(".clickMenu").hide();
+ }
+}
+
+function addEditCreateTemplateLinks() {
+ if ($("#notification_template_id_edit_link").length == 0) {
+ var $select = $("#notification_template_id");
+ var $div = $select.parent();
+
+ $select.css("width","50%");
+
+ var editText = SUGAR.language.translate("app_strings", "LNK_EDIT");
+ var $editLink = $(''+editText+' ').on("click", function(e) {
+ e.preventDefault();
+ edit_email_template_form();
+ });
+ $div.append($editLink);
+
+ var createText = SUGAR.language.translate("app_strings", "LNK_CREATE");
+ var $createLink = $(''+createText+' ').on("click", function(e) {
+ e.preventDefault();
+ open_email_template_form();
+ });
+ $div.append($createLink);
+ }
+}
+
+function open_email_template_form() {
+ var inboundId = $("#notification_outbound_email_id").val();
+ var parent_type = "";
+ if ($("#parent_type").length>0) {
+ parent_type = $("#parent_type").val();
+ } else if(typeof currentModule !== 'undefined') {
+ parent_type = currentModule;
+ }
+ URL = "index.php?module=EmailTemplates&action=EditView&type=notification&inboundEmail=" + inboundId + "&parent_type=" + parent_type;
+ URL += "&show_js=1";
+
+ windowName = 'email_template';
+ windowFeatures = 'width=800' + ',height=600' + ',resizable=1,scrollbars=1';
+
+ win = window.open(URL, windowName, windowFeatures);
+ if (window.focus) {
+ // put the focus on the popup if the browser supports the focus() method
+ win.focus();
+ }
+}
+
+function edit_email_template_form() {
+ var inboundId = $("#notification_outbound_email_id").val();
+ var parent_type = "";
+ if ($("#parent_type").length>0) {
+ parent_type = $("#parent_type").val();
+ } else if(typeof currentModule !== 'undefined') {
+ parent_type = currentModule;
+ }
+ URL = "index.php?module=EmailTemplates&action=EditView&type=notification&inboundEmail=" + inboundId + "&parent_type=" + parent_type;
+
+ var field = document.getElementById('notification_template_id');
+ if (field.options[field.selectedIndex].value != 'undefined') {
+ URL += "&record=" + field.options[field.selectedIndex].value;
+ }
+ URL += "&show_js=1";
+
+ windowName = 'email_template';
+ windowFeatures = 'width=800' + ',height=600' + ',resizable=1,scrollbars=1';
+
+ win = window.open(URL, windowName, windowFeatures);
+ if (window.focus) {
+ // put the focus on the popup if the browser supports the focus() method
+ win.focus();
+ }
+}
+
+function refresh_email_template_list(template_id, template_name) {
+ var field = document.getElementById('notification_template_id');
+ var bfound = 0;
+ for (var i = 0; i < field.options.length; i++) {
+ if (field.options[i].value == template_id) {
+ if (field.options[i].selected == false) {
+ field.options[i].selected = true;
+ }
+ field.options[i].text = template_name;
+ bfound = 1;
+ }
+ }
+ //add item to selection list.
+ if (bfound == 0) {
+ var newElement = document.createElement('option');
+ newElement.text = template_name;
+ newElement.value = template_id;
+ field.options.add(newElement);
+ newElement.selected = true;
+ }
+ template_change();
+}
diff --git a/custom/modules/Campaigns/SticUtils.php b/custom/modules/Campaigns/SticUtils.php
new file mode 100644
index 00000000000..c912237a93c
--- /dev/null
+++ b/custom/modules/Campaigns/SticUtils.php
@@ -0,0 +1,256 @@
+id}'" .
+ " LIMIT 1";
+
+ // Fill Notification fields related to email_marketing
+ $result = $db->query($query);
+ if ($row = $db->fetchByAssoc($result)) {
+ $beanCampaign->notification_template_id = $row['email_templates_id'];
+ $beanCampaign->notification_outbound_email_id = $row['email_marketing_outbound_email_id'];
+ $beanCampaign->notification_from_name = $row['email_marketing_from_name'];
+ $beanCampaign->notification_from_addr = $row['email_marketing_from_addr'];
+ $beanCampaign->notification_reply_to_name = $row['email_marketing_reply_to_name'];
+ $beanCampaign->notification_reply_to_addr = $row['email_marketing_reply_to_addr'];
+ }
+
+ // Find prospect_lists information
+ $query =
+ " SELECT c.id as campaigns_id" .
+ ", pl.id as prospect_lists_id" .
+ " FROM campaigns c" .
+ " LEFT JOIN prospect_list_campaigns plc on plc.campaign_id = c.id and plc.deleted = '0'" .
+ " LEFT JOIN prospect_lists pl on pl.id = plc.prospect_list_id and pl.deleted = '0'" .
+ " WHERE c.id = '{$beanCampaign->id}'";
+
+ // Fill Notification prospect_lists field (multienum)
+ $result = $db->query($query);
+ $plArray = array();
+ while ($row = $db->fetchByAssoc($result)) {
+ $plArray[] = $row['prospect_lists_id'];
+ }
+ $beanCampaign->notification_prospect_list_ids = "^" . implode("^,^", $plArray) . "^";
+ }
+
+/**
+ * Populates custom dynamic lists used in 'non-db' enum and multienum fields for a Campaigns records of type 'Notification'
+ */
+ public static function fillDynamicListsForNotifications()
+ {
+ self::fillDynamicListProspectList();
+ self::fillDynamicListEmailTemplate();
+ self::fillDynamicOutboundEmailAccounts();
+ self::fillDynamicInboundEmailAccounts();
+ }
+
+ /**
+ * Populates list 'dynamic_prospect_list_list' with ProspectLists available to be selected in a Campaign of type 'Notification'
+ */
+ public static function fillDynamicListProspectList()
+ {
+ $prospectListsFocus = BeanFactory::newBean('ProspectLists');
+ $prospectLists = $prospectListsFocus->get_list("name", "prospect_lists.list_type='default'", 0, -99, -99);
+
+ $dynamic_prospect_list_list = array("" => "");
+ foreach ($prospectLists['list'] as $prospectList) {
+ $dynamic_prospect_list_list[$prospectList->id] = $prospectList->name;
+ }
+
+ $GLOBALS['app_list_strings']['dynamic_prospect_list_list'] = $dynamic_prospect_list_list;
+ }
+
+ /**
+ * Populates list 'dynamic_email_template_list' with EmailTemplates available to be selected in a Campaign of type 'Notification'
+ */
+ public static function fillDynamicListEmailTemplate()
+ {
+ $emailTemplatesFocus = BeanFactory::newBean('EmailTemplates');
+ $emailTemplates = $emailTemplatesFocus->get_list("name", "email_templates.type='notification'", 0, -99, -99);
+
+ $dynamic_email_template_list = array("" => translate("LBL_NONE", "app_strings"));
+
+ foreach ($emailTemplates['list'] as $emailTemplate) {
+ $dynamic_email_template_list[$emailTemplate->id] = $emailTemplate->name;
+ }
+
+ $GLOBALS['app_list_strings']['dynamic_email_template_list'] = $dynamic_email_template_list;
+ }
+
+ /**
+ * Populates list 'dynamic_outbound_email_list' with OutboundEmailAccounts for a Campaign of type 'Notification'
+ */
+ public static function fillDynamicOutboundEmailAccounts()
+ {
+ $outboundEmailsFocus = BeanFactory::newBean('OutboundEmailAccounts');
+ $outboundEmails = $outboundEmailsFocus->get_list("name", "", 0, -99, -99);
+
+ foreach ($outboundEmails['list'] as $outboundEmail) {
+ $dynamic_outbound_email_list[$outboundEmail->id] = "{$outboundEmail->name} ({$outboundEmail->smtp_from_addr})";
+ }
+ if (empty($dynamic_outbound_email_list)) {
+ $dynamic_outbound_email_list = array("" => translate("LBL_NONE", "app_strings"));
+ }
+
+ $GLOBALS['app_list_strings']['dynamic_outbound_email_list'] = $dynamic_outbound_email_list;
+ }
+
+ /**
+ * Populates list 'dynamic_inbound_email_list' with InboundEmails (campaign_mailboxes) for a Campaign of type 'Notification'
+ */
+ public static function fillDynamicInboundEmailAccounts()
+ {
+ include_once "modules/Campaigns/utils.php";
+ $emails = array();
+ $mailboxes = get_campaign_mailboxes($emails);
+ $mailboxesWithEmail = array();
+ foreach ($mailboxes as $id => $name) {
+ if ($id != "") {
+ $mailboxesWithEmail[$id] = "{$name} ({$emails[$id]})";
+ }
+ }
+ if (empty($mailboxesWithEmail)) {
+ $mailboxesWithEmail = array("" => translate("LBL_NONE", "app_strings"));
+ }
+ $GLOBALS['app_list_strings']['dynamic_inbound_email_list'] = $mailboxesWithEmail;
+ }
+
+ /**
+ * Loads Campaign language strings, for use in subpanels in other modules
+ */
+ public static function getCampaignsLangStrings()
+ {
+ $html = "";
+ // Load related lang strings
+ $moduleName = 'Campaigns';
+ if (!is_file("cache/jsLanguage/{$moduleName}/{$GLOBALS['current_language']}.js")) {
+ require_once 'include/language/jsLanguage.php';
+ jsLanguage::createModuleStringsCache($moduleName, $GLOBALS['current_language']);
+ }
+ $html .= getVersionedScript("cache/jsLanguage/{$moduleName}/{$GLOBALS['current_language']}.js", $GLOBALS['sugar_config']['js_lang_version']);
+ return $html;
+ }
+
+ /**
+ * Generates a JavaScript snippet containing information about inbound and outbound email accounts.
+ * The snippet assigns this information to the `STIC.campaignEmails` object.
+ *
+ * @return string HTML script tag with JavaScript content
+ */
+ public static function getNotificationCampaignEmailDataScript()
+ {
+ $html = "";
+ $html .= "";
+ return $html;
+ }
+}
diff --git a/custom/modules/Campaigns/TrackDetailView.php b/custom/modules/Campaigns/TrackDetailView.php
new file mode 100644
index 00000000000..e3f7fe4443e
--- /dev/null
+++ b/custom/modules/Campaigns/TrackDetailView.php
@@ -0,0 +1,281 @@
+processSugarBean("CAMPAIGN", $focus, $offset);
+ if ($result == null) {
+ sugar_die($app_strings['ERROR_NO_RECORD']);
+ }
+ $focus=$result;
+} else {
+ $header_URL = "Location: index.php?module=Accounts&action=index";
+ SugarApplication::headerRedirect($header_URL);
+}
+
+// if campaign type is set to newsletter, then include newsletter detail view..
+// ..else default to legacy detail view
+
+// include ('modules/Campaigns/NewsLetterTrackDetailView.php');
+
+if (isset($focus->campaign_type) && $focus->campaign_type == "NewsLetter") {
+ echo getClassicModuleTitle($mod_strings['LBL_MODULE_NAME'], array($mod_strings['LBL_NEWSLETTER'],$focus->name), true);
+} else {
+ echo getClassicModuleTitle($mod_strings['LBL_MODULE_NAME'], array($mod_strings['LBL_MODULE_NAME'],$focus->name), true);
+}
+
+ $GLOBALS['log']->info("Campaign detail view");
+ $smarty = new Sugar_Smarty();
+ $smarty->assign("MOD", $mod_strings);
+ $smarty->assign("APP", $app_strings);
+
+ $smarty->assign("GRIDLINE", $gridline);
+ $smarty->assign("PRINT_URL", "index.php?".$GLOBALS['request_string']);
+ $smarty->assign("ID", $focus->id);
+ $smarty->assign("ASSIGNED_TO", $focus->assigned_user_name);
+ $smarty->assign("STATUS", $app_list_strings['campaign_status_dom'][$focus->status]);
+ $smarty->assign("NAME", $focus->name);
+ $smarty->assign("TYPE", $app_list_strings['campaign_type_dom'][$focus->campaign_type]);
+ $smarty->assign("START_DATE", $focus->start_date);
+ $smarty->assign("END_DATE", $focus->end_date);
+
+ $smarty->assign("BUDGET", $focus->budget);
+ $smarty->assign("ACTUAL_COST", $focus->actual_cost);
+ $smarty->assign("EXPECTED_COST", $focus->expected_cost);
+ $smarty->assign("EXPECTED_REVENUE", $focus->expected_revenue);
+
+
+ $smarty->assign("OBJECTIVE", nl2br($focus->objective));
+ $smarty->assign("CONTENT", nl2br($focus->content));
+ $smarty->assign("DATE_MODIFIED", $focus->date_modified);
+ $smarty->assign("DATE_ENTERED", $focus->date_entered);
+
+ $smarty->assign("CREATED_BY", $focus->created_by_name);
+ $smarty->assign("MODIFIED_BY", $focus->modified_by_name);
+ $smarty->assign("TRACKER_URL", $sugar_config['site_url'] . '/campaign_tracker.php?track=' . $focus->tracker_key);
+ $smarty->assign("TRACKER_COUNT", (int)$focus->tracker_count);
+ $smarty->assign("TRACKER_TEXT", $focus->tracker_text);
+ $smarty->assign("REFER_URL", $focus->refer_url);
+
+// STIC-Custom - JBL - 20240830 - Notifications: Remove buttons
+// https://github.com/SinergiaTIC/SinergiaCRM/pull/44
+ // if (isset($focus->campaign_type) && $focus->campaign_type == "Email" || $focus->campaign_type == "NewsLetter") {
+ // $smarty->assign("TRACK_DELETE_BUTTON", " ");
+ // }
+// Customize buttons with Campaign_type
+if (isset($focus->campaign_type)) {
+ if ($focus->campaign_type == "Email" || $focus->campaign_type == "NewsLetter" || $focus->campaign_type == "Notification") {
+ $smarty->assign("TRACK_DELETE_BUTTON", " ");
+ }
+ if ($focus->campaign_type == "Notification") {
+ $smarty->assign("DISABLE_LINK", "display:none");
+ }
+ if ($focus->campaign_type != "Notification") {
+ $smarty->assign("TRACK_WIZARD_BUTTON", " id}';\" value=\"{$mod_strings['LBL_TO_WIZARD_TITLE']}\" />");
+ }
+}
+// END STIC-Custom
+ $currency = BeanFactory::newBean('Currencies');
+ if (isset($focus->currency_id) && !empty($focus->currency_id)) {
+ $currency->retrieve($focus->currency_id);
+ if ($currency->deleted != 1) {
+ $smarty->assign("CURRENCY", $currency->iso4217 .' '.$currency->symbol);
+ } else {
+ $smarty->assign("CURRENCY", $currency->getDefaultISO4217() .' '.$currency->getDefaultCurrencySymbol());
+ }
+ } else {
+ $smarty->assign("CURRENCY", $currency->getDefaultISO4217() .' '.$currency->getDefaultCurrencySymbol());
+ }
+ global $current_user;
+ if (is_admin($current_user) && $_REQUEST['module'] != 'DynamicLayout' && !empty($_SESSION['editinplace'])) {
+ $smarty->assign("ADMIN_EDIT", "".SugarThemeRegistry::current()->getImage("EditLayout", "border='0' align='bottom'", null, null, '.gif', $mod_strings['LBL_EDIT_LAYOUT'])." ");
+ }
+
+ global $xtpl;
+ $xtpl = $smarty;
+
+ $detailView->processListNavigation($xtpl, "CAMPAIGN", $offset, $focus->is_AuditEnabled());
+ // adding custom fields:
+ require_once('modules/DynamicFields/templates/Files/DetailView.php');
+
+
+ //if this is a newsletter, we need to build dropdown
+ $selected_marketing_id = '';
+ if (isset($focus->campaign_type)) {
+ //we need to build the dropdown of related marketing values
+ $options_str = "";
+ $latest_marketing_id = '';
+ if (isset($_REQUEST['mkt_id'])) {
+ $selected_marketing_id = $_REQUEST['mkt_id'];
+ }
+
+ $options_str .= ''.$app_strings["LBL_CAMPAIGN_NONE"].' ';
+ //query for all email marketing records related to this campaign
+ $latest_marketing_query = "select id, name, date_modified from email_marketing where campaign_id = '$focus->id' order by date_modified desc";
+
+ //build string with value(s) retrieved
+ $result =$focus->db->query($latest_marketing_query);
+ if ($row = $focus->db->fetchByAssoc($result)) {
+ //first, populated the latest marketing id variable, as this
+ // variable will be used to build chart and subpanels
+ if ($focus->campaign_type == 'NewsLetter') {
+ $latest_marketing_id = $row['id'];
+ }
+
+ //fill in first option value
+ $options_str .= '';
+ // if the marketing id is empty then set this first option to render as "selected"
+ } elseif (empty($selected_marketing_id) && $focus->campaign_type == 'NewsLetter') {
+ $options_str .=' selected>'. $row['name'] .' ';
+ // if the marketing is not empty, but not same as selected marketing id, then..
+ //.. do not set this option to render as "selected"
+ } else {
+ $options_str .='>'. $row['name'] .'';
+ }
+ }
+ //process rest of records, if they exist
+ while ($row = $focus->db->fetchByAssoc($result)) {
+ //add to list of option values
+ $options_str .= '';
+ } else {
+ $options_str .=' >'. $row['name'] .' ';
+ }
+ }
+ $options_str .=" ";
+ //populate the dropdown
+ $smarty->assign("FILTER_LABEL", $mod_strings['LBL_FILTER_CHART_BY']);
+ $smarty->assign("MKT_DROP_DOWN", $options_str);
+ }
+//add chart
+$seps = array("-", "/");
+$dates = array(date($GLOBALS['timedate']->dbDayFormat), $GLOBALS['timedate']->dbDayFormat);
+$dateFileNameSafe = str_replace($seps, "_", $dates);
+$cache_file_name = $current_user->getUserPrivGuid()."_campaign_response_by_activity_type_".$dateFileNameSafe[0]."_".$dateFileNameSafe[1].".xml";
+$cache_file_name_roi = $current_user->getUserPrivGuid()."_campaign_response_by_roi_".$dateFileNameSafe[0]."_".$dateFileNameSafe[1].".xml";
+$chart= new campaign_charts();
+
+ //if marketing id has been selected, then set "latest_marketing_id" to the selected value
+ //latest marketing id will be passed in to filter the charts and subpanels
+
+ if (!empty($selected_marketing_id)) {
+ $latest_marketing_id = $selected_marketing_id;
+ }
+ if (empty($latest_marketing_id) || $latest_marketing_id === 'all') {
+ $smarty->assign("MY_CHART", $chart->campaign_response_by_activity_type($app_list_strings['campainglog_activity_type_dom'], $app_list_strings['campainglog_target_type_dom'], $focus->id, sugar_cached("xml/$cache_file_name"), true));
+ } else {
+ $smarty->assign("MY_CHART", $chart->campaign_response_by_activity_type($app_list_strings['campainglog_activity_type_dom'], $app_list_strings['campainglog_target_type_dom'], $focus->id, sugar_cached("xml/$cache_file_name"), true, $latest_marketing_id));
+ }
+
+//end chart
+//custom chart code
+ require_once('include/SugarCharts/SugarChartFactory.php');
+ $sugarChart = SugarChartFactory::getInstance();
+ if ($sugarChart) {
+ $resources = $sugarChart->getChartResources();
+ $smarty->assign('chartResources', $resources);
+ }
+// STIC-Custom - JBL - 20240830 - Notifications: Use custom tpl
+// https://github.com/SinergiaTIC/SinergiaCRM/pull/44
+// echo $smarty->fetch('modules/Campaigns/TrackDetailView.tpl');
+echo $smarty->fetch('custom/modules/Campaigns/TrackDetailView.tpl');
+// END STIC-Custom
+
+require_once('include/SubPanel/SubPanelTiles.php');
+$subpanel = new SubPanelTiles($focus, 'Campaigns');
+ //if latest marketing id is empty, or if it is set to 'all'', then do no filtering, otherwise filter..
+ //.. out the chart and subpanels by marketing id
+ if (empty($latest_marketing_id) || $latest_marketing_id === 'all') {
+ //do nothing, no filtering is needed
+ } else {
+
+ // assign selected marketing ID back to request in order to let ListView use it as a part of subpanel base URL
+ $_GET['mkt_id'] = $latest_marketing_id;
+
+ //get array of layout defs
+ $layoutDefsArr= $subpanel->subpanel_definitions->layout_defs;
+
+ //iterate through layout defs for processing of subpanels. If a marketing Id is specified, then we need to...
+ //.. filter the subpanels by it so they match the chart rendered in code above.
+ foreach ($layoutDefsArr as $subpanels_name => $subpanels) {
+
+ //process each subpanel definition
+ foreach ($subpanels as $subpane_key => $subpane) {
+
+ //see if "function_parameters" key exists in subpanel properties array
+ if (isset($subpane['function_parameters'])) {
+ //if a function_parameters property key exists, then process further
+ $functionParamsArr = $subpane['function_parameters'];//$panelProperty;
+
+ //Check the array of function parameters and see if
+ //one exists for market value id.
+ if (isset($functionParamsArr['EMAIL_MARKETING_ID_VALUE'])) {
+ //We found the property, lets fill in the marketing id value...
+ //.. into the subpanel object, using the keys of the array that..
+ //.. we used to get to thi property
+ $subpanel->subpanel_definitions->layout_defs[$subpanels_name][$subpane_key]['function_parameters']['EMAIL_MARKETING_ID_VALUE'] = $latest_marketing_id;
+ }
+ }//end if (isset($subpane['function_parameters'])){
+ }//end foreach($subpanels as $subpane_key => $subpane){
+ }
+ }//end else
+
+$deletedCampaignLogLeadsCount = $focus->getDeletedCampaignLogLeadsCount();
+if ($deletedCampaignLogLeadsCount > 0) {
+ $subpanel->subpanel_definitions->layout_defs['subpanel_setup']['lead']['top_buttons'][] = array(
+ 'widget_class' => 'SubPanelTopMessage',
+ 'message' => string_format($mod_strings['LBL_LEADS_DELETED_SINCE_CREATED'], array($deletedCampaignLogLeadsCount)),
+ );
+}
+
+$alltabs=$subpanel->subpanel_definitions->get_available_tabs();
+if (!empty($alltabs)) {
+ foreach ($alltabs as $name) {
+ if ($name == 'prospectlists' || $name=='emailmarketing' || $name == 'tracked_urls') {
+ $subpanel->subpanel_definitions->exclude_tab($name);
+ }
+ }
+}
+echo $subpanel->display();
diff --git a/custom/modules/Campaigns/TrackDetailView.tpl b/custom/modules/Campaigns/TrackDetailView.tpl
new file mode 100644
index 00000000000..60b787fa814
--- /dev/null
+++ b/custom/modules/Campaigns/TrackDetailView.tpl
@@ -0,0 +1,161 @@
+{*
+/**
+ * This file is part of SinergiaCRM.
+ * SinergiaCRM is a work developed by SinergiaTIC Association, based on SuiteCRM.
+ * Copyright (C) 2013 - 2023 SinergiaTIC Association
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SinergiaTIC Association at email address info@sinergiacrm.org.
+ */
+
+/**
+
+ */
+*}
+
+{$chartResources}
+
+
+
+
+
+
+{$PAGINATION}
+ {$MOD.LBL_NAME}
+ {$NAME}
+ {$MOD.LBL_ASSIGNED_TO}
+ {$ASSIGNED_TO}
+
+ {$MOD.LBL_CAMPAIGN_STATUS}
+ {$STATUS}
+
+
+ {$MOD.LBL_TEAM}
+ {$TEAM_NAME}
+
+
+
+ {$MOD.LBL_CAMPAIGN_START_DATE}
+ {$START_DATE}
+ {$APP.LBL_DATE_MODIFIED}
+ {$DATE_MODIFIED} {$APP.LBL_BY} {$MODIFIED_BY}
+
+ {$MOD.LBL_CAMPAIGN_END_DATE}
+ {$END_DATE}
+ {$APP.LBL_DATE_ENTERED}
+ {$DATE_ENTERED} {$APP.LBL_BY} {$CREATED_BY}
+
+ {$MOD.LBL_CAMPAIGN_TYPE}
+ {$TYPE}
+
+
+
+
+
+
+
+
+ {$MOD.LBL_CAMPAIGN_BUDGET} ({$CURRENCY})
+ {$BUDGET}
+ {$MOD.LBL_CAMPAIGN_ACTUAL_COST} ({$CURRENCY})
+ {$ACTUAL_COST}
+
+ {$MOD.LBL_CAMPAIGN_EXPECTED_REVENUE} ({$CURRENCY})
+ {$EXPECTED_REVENUE}
+ {$MOD.LBL_CAMPAIGN_EXPECTED_COST} ({$CURRENCY})
+ {$EXPECTED_COST}
+
+
+
+
+
+
+
+
+ {$MOD.LBL_CAMPAIGN_OBJECTIVE}
+ {$OBJECTIVE}
+
+ {$MOD.LBL_CAMPAIGN_CONTENT}
+ {$CONTENT}
+
+
+
+
+
+ {$FILTER_LABEL}
+ {$MKT_DROP_DOWN}
+
+
+
+ {$MY_CHART}
+
+
+
+
+
+
+
+
+{sugar_getscript file="modules/Campaigns/DetailView.js"}
+{$SUBPANEL}
diff --git a/custom/modules/Campaigns/language/gl_ES.lang.php b/custom/modules/Campaigns/language/gl_ES.lang.php
deleted file mode 100644
index 262604a5df2..00000000000
--- a/custom/modules/Campaigns/language/gl_ES.lang.php
+++ /dev/null
@@ -1,5 +0,0 @@
-https://wikisuite.sinergiacrm.org/index.php?title=Google_reCAPTCHA';
diff --git a/custom/modules/Campaigns/metadata/subpanels/SticForNotifications.php b/custom/modules/Campaigns/metadata/subpanels/SticForNotifications.php
new file mode 100644
index 00000000000..faf04a2175a
--- /dev/null
+++ b/custom/modules/Campaigns/metadata/subpanels/SticForNotifications.php
@@ -0,0 +1,69 @@
+ array(
+ array('widget_class' => 'SubPanelTopButtonQuickCreate'),
+ // array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'Campaigns'),
+ ),
+
+ 'where' => '',
+
+ 'list_fields' => array(
+ 'name' => array(
+ 'name' => 'name',
+ 'vname' => 'LBL_LIST_CAMPAIGN_NAME',
+ 'widget_class' => 'SubPanelCampaignTrackDetailViewLink',
+ ),
+ 'status' => array(
+ 'name' => 'status',
+ 'vname' => 'LBL_LIST_STATUS',
+ ),
+ 'start_date' => array(
+ 'name' => 'start_date',
+ 'vname' => 'LBL_LIST_START_DATE',
+ ),
+ 'stic_notification_prospect_list_names_c' => array(
+ 'name' => 'stic_notification_prospect_list_names_c',
+ 'vname' => 'LBL_STIC_NOTIFICATION_PROSPECT_LIST_NAMES_C',
+ ),
+ 'notification_email_template_name' => array(
+ 'name' => 'notification_email_template_name',
+ 'vname' => 'LBL_NOTIFICATION_EMAIL_TEMPLATE_NAME',
+ ),
+ // 'quickedit_button' => array(
+ // 'vname' => 'LBL_QUICKEDIT_BUTTON',
+ // 'widget_class' => 'SubPanelQuickEditButton',
+ // 'module' => 'Campgains',
+ // ),
+ // 'remove_button' => array(
+ // 'vname' => 'LBL_REMOVE',
+ // 'widget_class' => 'SubPanelRemoveButton',
+ // 'module' => 'Campgains',
+ // 'width' => '5%',
+ // ),
+ ),
+);
diff --git a/custom/modules/Campaigns/views/view.edit.php b/custom/modules/Campaigns/views/view.edit.php
new file mode 100644
index 00000000000..d9fdcde77fe
--- /dev/null
+++ b/custom/modules/Campaigns/views/view.edit.php
@@ -0,0 +1,121 @@
+useForSubpanel = false;
+ $this->useModuleQuickCreateTemplate = true;
+ $this->moduleName = 'Campaigns';
+ }
+
+ public function preDisplay()
+ {
+ parent::preDisplay();
+
+ SticViews::preDisplay($this);
+
+ // Write here you custom code
+ include_once "custom/modules/Campaigns/SticUtils.php";
+ CampaignsUtils::fillDynamicListsForNotifications();
+
+ // Adding the Notification panel dinamically.
+ $this->ev->defs['panels']['templateMeta']['tabdefs']['LBL_NOTIFICATION_INFORMATION_PANEL'] = array(
+ 'newTab' => false,
+ 'panelDefault' => 'expanded',
+ );
+
+ $this->ev->defs['panels']['LBL_NOTIFICATION_INFORMATION_PANEL'] = array(
+ 0 => array(
+ 0 => array(
+ 'name' => 'parent_name',
+ 'label' => 'LBL_FLEX_RELATE',
+ ),
+ 1 => '',
+ ),
+ 1 => array(
+ 0 => array(
+ 'name' => 'notification_prospect_list_ids',
+ 'label' => 'LBL_NOTIFICATION_PROSPECT_LIST_ID',
+ ),
+ 1 => array(
+ 'name' => 'notification_template_id',
+ 'label' => 'LBL_NOTIFICATION_TEMPLATE_ID',
+ ),
+ ),
+ 2 => array(
+ 0 => array(
+ 'name' => 'notification_outbound_email_id',
+ 'label' => 'LBL_NOTIFICATION_OUTBOUND_EMAIL_ID',
+ ),
+ 1 => array(
+ 'name' => 'notification_inbound_email_id',
+ 'label' => 'LBL_NOTIFICATION_INBOUND_EMAIL_ID',
+ ),
+ ),
+ 3 => array(
+ 0 => array(
+ 'name' => 'notification_from_name',
+ 'label' => 'LBL_NOTIFICATION_FROM_NAME',
+ ),
+ 1 => array(
+ 'name' => 'notification_from_addr',
+ 'label' => 'LBL_NOTIFICATION_FROM_ADDR',
+ ),
+ ),
+ 4 => array(
+ 0 => array(
+ 'name' => 'notification_reply_to_name',
+ 'label' => 'LBL_NOTIFICATION_REPLY_TO_NAME',
+ ),
+ 1 => array(
+ 'name' => 'notification_reply_to_addr',
+ 'label' => 'LBL_NOTIFICATION_REPLY_TO_ADDR',
+ ),
+ ),
+ );
+ }
+
+ public function display()
+ {
+ parent::display();
+
+ SticViews::display($this);
+
+ // Write here you custom code
+ echo getVersionedScript("custom/modules/Campaigns/SticUtils.js");
+
+ include_once "custom/modules/Campaigns/SticUtils.php";
+ echo CampaignsUtils::getNotificationCampaignEmailDataScript();
+ }
+
+}
diff --git a/custom/modules/Campaigns/views/view.subpanelquickcreate.php b/custom/modules/Campaigns/views/view.subpanelquickcreate.php
new file mode 100644
index 00000000000..9cd0f759dfe
--- /dev/null
+++ b/custom/modules/Campaigns/views/view.subpanelquickcreate.php
@@ -0,0 +1,55 @@
+ev->defs['templateMeta']['form']['buttons'])) !== false) {
+ unset($this->ev->defs['templateMeta']['form']['buttons'][$key]);
+ }
+
+ include_once "custom/modules/Campaigns/SticUtils.php";
+ CampaignsUtils::fillDynamicListsForNotifications();
+
+ parent::process($module);
+
+ // Link basic stic css and JS files
+ echo getVersionedScript("SticInclude/js/Utils.js");
+ echo getVersionedScript("custom/modules/Campaigns/SticUtils.js");
+
+ echo CampaignsUtils::getCampaignsLangStrings();
+ echo CampaignsUtils::getNotificationCampaignEmailDataScript();
+ }
+}
diff --git a/custom/modules/EmailMarketing/EditView.html b/custom/modules/EmailMarketing/EditView.html
index ce93c501b20..743105b6056 100644
--- a/custom/modules/EmailMarketing/EditView.html
+++ b/custom/modules/EmailMarketing/EditView.html
@@ -279,7 +279,11 @@
}
//get values to populate from and reply boxes on change of mail box dropdown
- var ie_stored_options = { IEStoredOptions };
+ // STIC-Custom 20240913 MHP - Remove spaces between {} and variable
+ // https://github.com/SinergiaTIC/SinergiaCRM/pull/387
+ // var ie_stored_options = { IEStoredOptions };
+ var ie_stored_options = {IEStoredOptions};
+ // END STIC-Custom
var from_emails = new Array({ FROM_EMAILS });
function set_from_email_and_name(mailbox) {
diff --git a/custom/modules/EmailTemplates/EditView.php b/custom/modules/EmailTemplates/EditView.php
index 27c4e181cb1..d35d47d3938 100644
--- a/custom/modules/EmailTemplates/EditView.php
+++ b/custom/modules/EmailTemplates/EditView.php
@@ -371,8 +371,53 @@
$xtpl->assign("DEFAULT_MODULE", 'Contacts');
//$xtpl->assign("CAMPAIGN_POPUP_JS", '');
} else {
- $xtpl->assign("DROPDOWN", genDropDownJS2());
- $xtpl->assign("DEFAULT_MODULE", 'Accounts');
+ // STIC-Custom - JBL - 20240830 - Notifications: Filter modules for Notifications
+ // https://github.com/SinergiaTIC/SinergiaCRM/pull/44
+ // $xtpl->assign("DROPDOWN", genDropDownJS2());
+ // $xtpl->assign("DEFAULT_MODULE", 'Accounts');
+ if (isset($_REQUEST['type']) && $_REQUEST['type'] == "notification") {
+ $dropdown = '';
+ $defaultModule = isset($_REQUEST['parent_type']) ? $_REQUEST['parent_type'] : "";
+ if(!array_key_exists($defaultModule, $app_list_strings['parent_type_display_notifications'])) {
+ $defaultModule = "";
+ }
+
+ if ($defaultModule != "") {
+ // Add $defaultModule as first module in dropdown
+ if (isset($app_list_strings['moduleListSingular'][$defaultModule])) {
+ $dropdown .= "
+ " . $app_list_strings['moduleListSingular'][$defaultModule] . "
+ ";
+ } else {
+ $dropdown .= "
+ " . $app_list_strings['moduleList'][$defaultModule] . "
+ ";
+ }
+ }
+ array_multisort($app_list_strings['parent_type_display_notifications'], SORT_ASC, $app_list_strings['parent_type_display_notifications']);
+ foreach ($app_list_strings['parent_type_display_notifications'] as $key => $name) {
+ if ($key != $defaultModule) {
+ if (isset($app_list_strings['moduleListSingular'][$key])) {
+ $dropdown .= "
+ " . $app_list_strings['moduleListSingular'][$key] . "
+ ";
+ } else {
+ $dropdown .= "
+ " . $app_list_strings['moduleList'][$key] . "
+ ";
+ }
+ if ($defaultModule == "") {
+ $defaultModule = $key;
+ }
+ }
+ }
+ $xtpl->assign("DROPDOWN", $dropdown);
+ $xtpl->assign("DEFAULT_MODULE", $defaultModule);
+ } else {
+ $xtpl->assign("DROPDOWN", genDropDownJS2());
+ $xtpl->assign("DEFAULT_MODULE", 'Accounts');
+ }
+ // END STIC-Custom
}
//// END CAMPAIGNS
///////////////////////////////////////
@@ -427,7 +472,21 @@
if ($templateType == 'workflow') {
$xtpl->assign("TYPEDROPDOWN", get_select_options_with_id($app_list_strings['emailTemplates_type_list'], $templateType));
} else {
- $xtpl->assign("TYPEDROPDOWN", get_select_options_with_id($app_list_strings['emailTemplates_type_list_no_workflow'], $templateType));
+ // STIC-Custom - JBL - 20240830 - Notifications: Edit EmailTemplates with fixed type
+ // https://github.com/SinergiaTIC/SinergiaCRM/pull/44
+ // $xtpl->assign("TYPEDROPDOWN", get_select_options_with_id($app_list_strings['emailTemplates_type_list_no_workflow'], $templateType));
+ if (isset($_REQUEST['type']) && !empty($_REQUEST['type'])) {
+ $type_list = [$_REQUEST['type'] => $app_list_strings['emailTemplates_type_list_no_workflow'][$_REQUEST['type']]];
+ $selected_item = $_REQUEST['type'];
+ if ($templateType != "" && $templateType != $_REQUEST['type']) {
+ $type_list[$templateType] = $app_list_strings['emailTemplates_type_list_no_workflow'][$templateType];
+ $selected_item = $templateType;
+ }
+ $xtpl->assign("TYPEDROPDOWN", get_select_options_with_id($type_list, $selected_item));
+ } else {
+ $xtpl->assign("TYPEDROPDOWN", get_select_options_with_id($app_list_strings['emailTemplates_type_list_no_workflow'], $templateType));
+ }
+ // END STIC-Custom
}
}
// done and parse
diff --git a/custom/modules/Opportunities/SticUtils.js b/custom/modules/Opportunities/SticUtils.js
new file mode 100644
index 00000000000..71d698a0f04
--- /dev/null
+++ b/custom/modules/Opportunities/SticUtils.js
@@ -0,0 +1,82 @@
+/**
+ * This file is part of SinergiaCRM.
+ * SinergiaCRM is a work developed by SinergiaTIC Association, based on SuiteCRM.
+ * Copyright (C) 2013 - 2023 SinergiaTIC Association
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SinergiaTIC Association at email address info@sinergiacrm.org.
+ */
+/* HEADER */
+// Set module name
+var module = "Opportunities";
+
+/* INCLUDES */
+
+/* VALIDATION DEPENDENCIES */
+
+/* DIRECT VALIDATION CALLBACKS */
+
+/* VIEWS CUSTOM CODE */
+switch (viewType()) {
+ case "edit":
+ case "quickcreate":
+ case "popup":
+ break;
+
+ case "detail":
+ // Define button content
+ var buttons = {
+ createParticipantsFromAccounts: {
+ id: "load_participants",
+ title: SUGAR.language.get(module, "LBL_LOAD_PARTICIPANTS"),
+ onclick:
+ "open_popup('Accounts', 800, 600, '', true, true, {" +
+ "'call_back_function': 'setReturnAndCreateParticipants', " +
+ "'field_to_name_array': {'id': 'account_id'}," +
+ "'form_name': 'DetailView', " +
+ "'passthru_data': { }" +
+ "}, 'MultiSelect', true)"
+ }
+ };
+ createDetailViewButton(buttons.createParticipantsFromAccounts);
+ break;
+
+ case "list":
+ default:
+ break;
+}
+
+/* AUX FUNCTIONS */
+/**
+ * Callback function after selecting a list of Accounts to create Participants
+ */
+function setReturnAndCreateParticipants(popupReplyData) {
+ var obj = {
+ action: "createParticipantsFromAccounts",
+ module: "Opportunities",
+ return_module: "Accounts",
+ return_action: "DetailView",
+ record: window.document.forms["DetailView"].record.value,
+ accountIds: popupReplyData.selection_list,
+ };
+
+ if (obj.accountIds === undefined && popupReplyData.name_to_value_array.account_id !== undefined) {
+ obj.accountIds = [popupReplyData.name_to_value_array.account_id];
+ }
+
+ var url = "?index.php&" + $.param(obj);
+ location.href = url;
+}
\ No newline at end of file
diff --git a/custom/modules/Opportunities/SticUtils.php b/custom/modules/Opportunities/SticUtils.php
index bcb0331f2d9..ebb64e857ee 100644
--- a/custom/modules/Opportunities/SticUtils.php
+++ b/custom/modules/Opportunities/SticUtils.php
@@ -126,4 +126,30 @@ public static function opportunitiesReminder() {
}
return true;
}
+
+ /**
+ * Create Participants in an Opportunity: All Accounts in $accountIds will be Participants in the $opportunityBean
+ */
+ public static function createParticipantsFromAccounts($accountIds, $opportunityBean) {
+ // For each AccountId in $accountIds: Create a Participant with this $opportunityBean
+
+ global $current_user;
+
+ foreach($accountIds as $accountId) {
+ $accountBean = BeanFactory::getBean('Accounts', $accountId);
+
+ $participantBean = BeanFactory::newBean('stic_Group_Opportunities');
+
+ // Assign Account and Opportunity
+ $participantBean->stic_group_opportunities_accountsaccounts_ida = $accountId;
+ $participantBean->stic_group_opportunities_opportunitiesopportunities_ida = $opportunityBean->id;
+
+ // Assign other data
+ $participantBean->name = $accountBean->name . ' - ' . $opportunityBean->name;
+ $participantBean->status = "guest";
+ $participantBean->assigned_user_id = $current_user->id;
+
+ $participantBean->save();
+ }
+ }
}
\ No newline at end of file
diff --git a/custom/modules/Opportunities/controller.php b/custom/modules/Opportunities/controller.php
index 9618aaa7270..bcad1ae9ff1 100644
--- a/custom/modules/Opportunities/controller.php
+++ b/custom/modules/Opportunities/controller.php
@@ -34,4 +34,10 @@ public function action_opportunitiesReminder() {
OpportunitiesUtils::opportunitiesReminder();
SugarApplication::redirect('index.php?module=Opportunities&action=index');
}
+
+ public function action_createParticipantsFromAccounts() {
+ require_once 'custom/modules/Opportunities/SticUtils.php';
+ OpportunitiesUtils::createParticipantsFromAccounts($_REQUEST["accountIds"], $this->bean);
+ SugarApplication::redirect("index.php?module=Opportunities&action=DetailView&record={$this->bean->id}");
+ }
}
diff --git a/custom/modules/Opportunities/views/view.detail.php b/custom/modules/Opportunities/views/view.detail.php
index ed29188dff0..729db9d9c6a 100644
--- a/custom/modules/Opportunities/views/view.detail.php
+++ b/custom/modules/Opportunities/views/view.detail.php
@@ -45,6 +45,7 @@ public function display()
parent::display();
SticViews::display($this);
+ echo getVersionedScript("custom/modules/Opportunities/SticUtils.js");
// Write here you custom code
}
diff --git a/custom/themes/default/images/Createstic_Participants.gif b/custom/themes/default/images/Createstic_Participants.gif
new file mode 100644
index 00000000000..540e053c0a1
Binary files /dev/null and b/custom/themes/default/images/Createstic_Participants.gif differ
diff --git a/custom/themes/default/images/Createstic_Participants.svg b/custom/themes/default/images/Createstic_Participants.svg
new file mode 100644
index 00000000000..03a2a2dd5ef
--- /dev/null
+++ b/custom/themes/default/images/Createstic_Participants.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+ acc_default_module
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/custom/themes/default/images/icon_Stic_Participants.gif b/custom/themes/default/images/icon_Stic_Participants.gif
new file mode 100644
index 00000000000..ef10ee9b472
Binary files /dev/null and b/custom/themes/default/images/icon_Stic_Participants.gif differ
diff --git a/custom/themes/default/images/icon_stic_Participants_32.gif b/custom/themes/default/images/icon_stic_Participants_32.gif
new file mode 100644
index 00000000000..ef10ee9b472
Binary files /dev/null and b/custom/themes/default/images/icon_stic_Participants_32.gif differ
diff --git a/custom/themes/default/images/icon_stic_Participants_32.svg b/custom/themes/default/images/icon_stic_Participants_32.svg
new file mode 100644
index 00000000000..8fd762fab7d
--- /dev/null
+++ b/custom/themes/default/images/icon_stic_Participants_32.svg
@@ -0,0 +1,20 @@
+
+
+
+ acc_default_module
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/include/ListView/ListViewData.php b/include/ListView/ListViewData.php
index ef11781b5d5..eae8e0ff8fd 100755
--- a/include/ListView/ListViewData.php
+++ b/include/ListView/ListViewData.php
@@ -310,6 +310,13 @@ public function getListViewData($seed, $where, $offset=-1, $limit = -1, $filter_
$orderBy = 'last_name '.$order['sortOrder'].', first_name '.$order['sortOrder'];
}
+ // STIC-Custom 20240715 MHP - https://github.com/SinergiaTIC/SinergiaCRM/pull/62
+ // If 'uploadfile' field is included in the fields to be displayed, 'filename' is added to the array since in custom modules
+ // that inherit from the file type module, the database field that stores the name is called 'filename'.
+ if (isset($GLOBALS["dictionary"][$seed->module_dir]['templates']['file']) && in_array('uploadfile', $filter_fields)){
+ $filter_fields['filename'] = true;
+ }
+ // END STIC-Custom
$ret_array = $seed->create_new_list_query($orderBy, $where, $filter_fields, $params, 0, '', true, $seed, $singleSelect);
$ret_array['inner_join'] = '';
if (!empty($this->seed->listview_inner_join)) {
@@ -369,6 +376,15 @@ public function getListViewData($seed, $where, $offset=-1, $limit = -1, $filter_
while (($row = $this->db->fetchByAssoc($result)) != null) {
if ($count < $limit) {
+ // STIC-Custom 20240715 MHP - https://github.com/SinergiaTIC/SinergiaCRM/pull/62
+ // In custom modules that inherit from the file type module, the field that displays the file name is called 'uploadfile' instead of 'filename'.
+ // The value of the 'filename' field is copied to the 'uploadfile' so that it can be displayed in the list view.
+ if (isset($GLOBALS["dictionary"][$seed->module_dir]['templates']['file']) &&
+ !isset($row['uploadfile']) && isset($row['filename']) && !empty($row['filename']))
+ {
+ $row['uploadfile'] = $row['filename'];
+ }
+ // END STIC-Custom
$id_list .= ',\''.$row[$id_field].'\'';
$idIndex[$row[$id_field]][] = count($rows);
$rows[] = $seed->convertRow($row);
diff --git a/include/SugarFields/Fields/Float/SugarFieldFloat.php b/include/SugarFields/Fields/Float/SugarFieldFloat.php
index 38e230a189a..a7425712d1f 100755
--- a/include/SugarFields/Fields/Float/SugarFieldFloat.php
+++ b/include/SugarFields/Fields/Float/SugarFieldFloat.php
@@ -76,15 +76,21 @@ public function importSanitize(
$focus,
ImportFieldSanitize $settings
) {
- $value = str_replace($settings->num_grp_sep, "", $value);
- $dec_sep = $settings->dec_sep;
- if ($dec_sep != '.') {
- $value = str_replace($dec_sep, ".", $value);
+ // STIC-Custom 20240814 MHP - https://github.com/SinergiaTIC/SinergiaCRM/pull/338
+ // Apply the solution that is applied with the Decimal type fields, which is the one implemented in SugarFieldBase
+ // $value = str_replace($settings->num_grp_sep, "", $value);
+ // $dec_sep = $settings->dec_sep;
+ // if ($dec_sep != '.') {
+ // $value = str_replace($dec_sep, ".", $value);
+ // }
+ // if (!is_numeric($value)) {
+ // return false;
+ // }
+ if (isset($vardef['len'])) {
+ // check for field length
+ $value = sugar_substr($value, $vardef['len']);
}
- if (!is_numeric($value)) {
- return false;
- }
-
+ // STIC-Custom
return $value;
}
}
diff --git a/include/SugarFields/Fields/Wysiwyg/SugarFieldWysiwyg.php b/include/SugarFields/Fields/Wysiwyg/SugarFieldWysiwyg.php
index b2a74469d6c..6b8e2b3a29f 100644
--- a/include/SugarFields/Fields/Wysiwyg/SugarFieldWysiwyg.php
+++ b/include/SugarFields/Fields/Wysiwyg/SugarFieldWysiwyg.php
@@ -63,9 +63,17 @@ function getEditViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex
$config = [];
$config['height'] = 250;
$config['menubar'] = false;
- $config['plugins'] = 'code, table, link, image, wordcount';
+ // STIC-Custom 20240722 MHP - Do not apply the configuration if we are in PDF Templates
+ // https://github.com/SinergiaTIC/SinergiaCRM/pull/309
+ // $config['plugins'] = 'code, table, link, image, wordcount';
+ // $config['selector'] = "#{$form_name} "."#".$vardef['name'];
+ // $config['toolbar1'] = 'fontselect | fontsizeselect | bold italic underline | forecolor backcolor | styleselect | outdent indent | link image | code table';
$config['selector'] = "#{$form_name} "."#".$vardef['name'];
- $config['toolbar1'] = 'fontselect | fontsizeselect | bold italic underline | forecolor backcolor | styleselect | outdent indent | link image | code table';
+ if ($vardef["custom_module"] != "AOS_PDF_Templates") {
+ $config['plugins'] = 'code, table, link, image, wordcount';
+ $config['toolbar1'] = 'fontselect | fontsizeselect | bold italic underline | forecolor backcolor | styleselect | outdent indent | link image | code table';
+ }
+ // END STIC-Custom
$jsConfig = json_encode($config);
$initiate = '';
diff --git a/include/SugarObjects/templates/file/metadata/listviewdefs.php b/include/SugarObjects/templates/file/metadata/listviewdefs.php
index 7fc45cce24a..12e43dfb908 100755
--- a/include/SugarObjects/templates/file/metadata/listviewdefs.php
+++ b/include/SugarObjects/templates/file/metadata/listviewdefs.php
@@ -52,6 +52,16 @@
'link' => true,
'default' => true
),
+ // STIC-Custom 20240715 MHP - https://github.com/SinergiaTIC/SinergiaCRM/pull/62
+ // Add the file name and options to download and view the file in a new tab in the subpanel of a new module of type File
+ 'UPLOADFILE' =>
+ array (
+ 'type' => 'file',
+ 'label' => 'LBL_FILE_UPLOAD',
+ 'width' => '10%',
+ 'default' => true,
+ ),
+ // END STIC-Custom
'MODIFIED_BY_NAME' => array(
'width' => '10',
'label' => 'LBL_MODIFIED_USER',
diff --git a/include/SugarObjects/templates/file/metadata/subpanels/default.php b/include/SugarObjects/templates/file/metadata/subpanels/default.php
index 236b270ef77..d706d14eaa3 100755
--- a/include/SugarObjects/templates/file/metadata/subpanels/default.php
+++ b/include/SugarObjects/templates/file/metadata/subpanels/default.php
@@ -52,30 +52,76 @@
'where' => '',
'list_fields' => array(
+ // STIC-Custom 20240715 MHP - https://github.com/SinergiaTIC/SinergiaCRM/pull/62
+ // Add the file name and options to download and view the file in a new tab in the subpanel of a new module of type File
+ // 'object_image' => array(
+ // 'widget_class' => 'SubPanelIcon',
+ // 'width' => '2%',
+ // 'image2' => 'attachment',
+ // 'image2_url_field' => array(
+ // 'id_field' => 'selected_revision_id',
+ // 'filename_field' => 'selected_revision_filename'
+ // ),
+ // 'attachment_image_only' => true,
+
+ // ),
+ // 'document_name' => array(
+ // 'name' => 'document_name',
+ // 'vname' => 'LBL_LIST_DOCUMENT_NAME',
+ // 'widget_class' => 'SubPanelDetailViewLink',
+ // 'width' => '45%',
+ // ),
+ // 'active_date' => array(
+ // 'name' => 'active_date',
+ // 'vname' => 'LBL_DOC_ACTIVE_DATE',
+ // 'width' => '45%',
+ // ),
'object_image' => array(
+ 'vname' => 'LBL_OBJECT_IMAGE',
'widget_class' => 'SubPanelIcon',
'width' => '2%',
'image2' => 'attachment',
'image2_url_field' => array(
- 'id_field' => 'selected_revision_id',
- 'filename_field' => 'selected_revision_filename'
+ 'id_field' => 'id',
+ 'filename_field' => 'filename'
),
'attachment_image_only' => true,
-
),
+ 'filename' => array(
+ 'name' => 'filename',
+ 'vname' => 'LBL_LIST_DOCUMENT_NAME',
+ 'width' => '20%',
+ 'sortable'=>false,
+ 'widget_class' => 'SubPanelDetailViewLink',
+ ),
'document_name' => array(
'name' => 'document_name',
- 'vname' => 'LBL_LIST_DOCUMENT_NAME',
- 'widget_class' => 'SubPanelDetailViewLink',
+ 'vname' => 'LBL_FILENAME',
+ 'widget_class' => 'SubPanelFileDownloadViewLink',
'width' => '45%',
),
-
+ 'status_id' => array(
+ 'type' => 'enum',
+ 'vname' => 'LBL_DOC_STATUS',
+ 'width' => '10%',
+ ),
'active_date' => array(
'name' => 'active_date',
'vname' => 'LBL_DOC_ACTIVE_DATE',
'width' => '45%',
),
-
+ 'assigned_user_name' =>
+ array (
+ 'link' => true,
+ 'type' => 'relate',
+ 'vname' => 'LBL_ASSIGNED_TO_NAME',
+ 'id' => 'ASSIGNED_USER_ID',
+ 'width' => '10%',
+ 'widget_class' => 'SubPanelDetailViewLink',
+ 'target_module' => 'Users',
+ 'target_record_key' => 'assigned_user_id',
+ ),
+ // END STIC-Custom
'edit_button' => array(
'vname' => 'LBL_EDIT_BUTTON',
'widget_class' => 'SubPanelEditButton',
diff --git a/include/tabConfig.php b/include/tabConfig.php
index 5450bb4b7b4..a44376bc118 100755
--- a/include/tabConfig.php
+++ b/include/tabConfig.php
@@ -140,6 +140,7 @@
1 => 'stic_Payments',
2 => 'stic_Remittances',
3 => 'Opportunities',
+ 4 => 'stic_Group_Opportunities',
),
),
'LBL_GROUPTAB_CAMPAIGNS' => array(
diff --git a/metadata/securitygroups_acl_rolesMetaData.php b/metadata/securitygroups_acl_rolesMetaData.php
index ac9b54dfcf3..7250457e07e 100644
--- a/metadata/securitygroups_acl_rolesMetaData.php
+++ b/metadata/securitygroups_acl_rolesMetaData.php
@@ -9,10 +9,13 @@
, array('name' =>'deleted', 'type' =>'bool', 'len'=>'1', 'required'=>true, 'default'=>'0')
),
'indices' => array(
- array('name' =>'securitygroups_acl_rolespk', 'type' =>'primary', 'fields'=>array('id'))
+ array('name' =>'securitygroups_acl_rolespk', 'type' =>'primary', 'fields'=>array('id')),
+ // STIC-Custom 20240917 EPS: New index to speed up the query at modules/ACLActions/ACLAction.php
+ // https://github.com/SinergiaTIC/SinergiaCRM/pull/391
+ array('name' => 'idx_SG_roles', 'type' => 'index', 'fields' => array('securitygroup_id', 'role_id')),
+ // END STIC Custom
),
'relationships' => array(
-
'securitygroups_acl_roles' => array(
'lhs_module'=> 'SecurityGroups', 'lhs_table'=> 'securitygroups', 'lhs_key' => 'id',
'rhs_module'=> 'ACLRoles', 'rhs_table'=> 'acl_roles', 'rhs_key' => 'id',
@@ -20,4 +23,4 @@
'join_table'=> 'securitygroups_acl_roles', 'join_key_lhs'=>'securitygroup_id', 'join_key_rhs'=>'role_id',
),
)
-);
+);
\ No newline at end of file
diff --git a/modules/AOS_PDF_Templates/templateParser.php b/modules/AOS_PDF_Templates/templateParser.php
index 3f61b8673f2..7b0822b575f 100755
--- a/modules/AOS_PDF_Templates/templateParser.php
+++ b/modules/AOS_PDF_Templates/templateParser.php
@@ -121,7 +121,8 @@ public static function parse_template_bean($string, $key, &$focus)
ENT_COMPAT, 'UTF-8');
// STIC-custom 20210922 - Parse decimal symbol in templates according to configuration
// STIC#390
- } elseif ($field_def['type'] == 'decimal') {
+ // https://github.com/SinergiaTIC/SinergiaCRM/pull/338
+ } elseif ($field_def['type'] == 'decimal' || $field_def['type'] == 'float') {
require_once('SticInclude/Utils.php');
if ($_REQUEST['entryPoint'] == 'formLetter') { // If generating a PDF...
$value = SticUtils::formatDecimalInConfigSettings($focus->$fieldName, true); // ...get user config
diff --git a/modules/Campaigns/Campaign.php b/modules/Campaigns/Campaign.php
index 6e69f7d2886..b725de3a509 100755
--- a/modules/Campaigns/Campaign.php
+++ b/modules/Campaigns/Campaign.php
@@ -264,10 +264,134 @@ public function save($check_notify = false)
$this->frequency = '';
}
- return parent::save($check_notify);
+ // STIC-Custom - JBL - 20240612 - New Campaign type (Notification)
+ // https://github.com/SinergiaTIC/SinergiaCRM/pull/44
+ // return parent::save($check_notify);
+ if ($this->campaign_type == "Notification" &&
+ !empty($_REQUEST['relate_to']) && $_REQUEST['relate_to'] == "getNotificationsFromParent" &&
+ !empty($_REQUEST['relate_id']) && !empty($_REQUEST['return_module'])) {
+ // Set parent type and ID for Notification campaigns
+ $this->parent_type = $_REQUEST['return_module'];
+ $this->parent_id = $_REQUEST['relate_id'];
+ $_REQUEST['relate_to'] = null;
+ $_REQUEST['relate_id'] = null;
+ }
- }
+ if (empty($this->name)) {
+ // If Name is empty: Name = Parent_Mame - Campaign_Type - Start_Date
+ global $app_list_strings, $current_user, $timedate;
+
+ $nameArray = array();
+ // Add Parent_Name to nameArray
+ if (!empty($this->parent_type) && !empty($this->parent_id)) {
+ if (empty($this->parent_name)) {
+ global $beanList, $beanFiles;
+
+ // Retrieve the parent record to get its name
+ if (isset($beanList[$this->parent_type])) {
+ $class = $beanList[$this->parent_type];
+ if (!class_exists($class)) {
+ require_once($beanFiles[$class]);
+ }
+ $parent = new $class();
+ $parent->retrieve($this->parent_id);
+ $this->parent_name = $parent->name;
+ }
+ }
+ $nameArray[] = $this->parent_name;
+ }
+
+ // Add Campaign_Type to nameArray
+ $nameArray[] = $app_list_strings['campaign_type_dom'][$this->campaign_type];
+
+ // Add Start_Date to nameArray
+ $startDate = $this->start_date;
+ if ($userDate = $timedate->fromUserDate($startDate, false, $current_user)) {
+ $startDate = $userDate->asDBDate();
+ }
+ $date = SugarDateTime::createFromFormat(TimeDate::DB_DATE_FORMAT, $startDate, null);
+ $startDateFormatted = $date->format($timedate->get_date_format($user));
+
+ $nameArray[] = $startDateFormatted;
+
+ // Set campaign name with nameArray (Parent_Mame - Campaign_Type - Start_Date)
+ $this->name = implode(" - ", $nameArray);
+ }
+ if ($this->campaign_type != "Notification") {
+ // Reset Prospect lists for non-Notification campaigns
+ $this->notification_prospect_list_ids = "";
+ }
+
+ $prospect_list_id_array = explode("^,^", trim($this->notification_prospect_list_ids, "^"));
+ $prospect_list_name_array = array();
+
+ // Set stic_notification_prospect_list_names_c field with Prospect lists names
+ foreach ($prospect_list_id_array as $prospect_list_id) {
+ $prospect_listBean = BeanFactory::getBean('ProspectLists', $prospect_list_id);
+ $prospect_list_name_array[] = $prospect_listBean->name;
+ }
+ $this->stic_notification_prospect_list_names_c = implode(", ", $prospect_list_name_array);
+
+ $isNewCampaign = empty($this->id);
+ $return_id = parent::save($check_notify);
+
+ // For new Notification campaigns, set relationships and queue the campaign
+ if ($isNewCampaign && $this->campaign_type == "Notification") {
+ // Set ProspectList relationships
+ $prospect_list_id_array = explode("^,^", trim($this->notification_prospect_list_ids, "^"));
+ $prospect_list_name_array = array();
+
+ if ($this->load_relationship('prospectlists')) {
+ $relatedProspectLists = $this->prospectlists->get();
+ foreach ($relatedProspectLists as $prospectListId) {
+ if (!in_array($prospectListId, $prospect_list_id_array)) {
+ $this->prospectlists->delete($this->id, $prospectListId);
+ }
+ }
+ foreach ($prospect_list_id_array as $prospect_list_id) {
+ if (!in_array($prospect_list_id, $relatedProspectLists)) {
+ $this->prospectlists->add($prospect_list_id);
+ }
+ }
+ }
+ // Save or Update EmailMarketing record
+ $emailMarketing = BeanFactory::newBean('EmailMarketing');
+ $relatedEmailMarketingList = $emailMarketing->get_list("name", "email_marketing.campaign_id='{$return_id}'", 0, -99, -99);
+ if(!empty($relatedEmailMarketingList['list'])) {
+ $emailMarketing = $relatedEmailMarketingList['list'][0];
+ }
+ // Set EmailMarketing fields
+ $emailMarketing->name = $this->name . ' - Email';
+ $emailMarketing->campaign_id = $return_id;
+ $emailMarketing->template_id = $this->notification_template_id;
+ $emailMarketing->inbound_email_id = $this->notification_inbound_email_id;
+ $emailMarketing->outbound_email_id = $this->notification_outbound_email_id;
+ $emailMarketing->from_name = $this->notification_from_name;
+ $emailMarketing->from_addr = $this->notification_from_addr;
+ $emailMarketing->reply_to_name = $this->notification_reply_to_name;
+ $emailMarketing->reply_to_addr = $this->notification_reply_to_addr;
+ $emailMarketing->date_start = $_REQUEST["start_date"];
+ $emailMarketing->status = 'active';
+ $emailMarketing->all_prospect_lists = 1;
+
+ $emailMarketingId = $emailMarketing->save();
+
+ // Queue Notification campaign
+ $_POST['mass'] = array(0 => $emailMarketingId);
+ $_REQUEST['module'] = "Campaigns";
+ $_REQUEST['record'] = $return_id;
+ $_REQUEST['return_action'] = "TrackDetailView";
+ $_REQUEST['return_module'] = "Campaigns";
+ $_REQUEST['return_id'] = $return_id;
+ $_REQUEST['action'] = "QueueCampaign";
+ $_REQUEST['campaign_id'] = $return_id;
+
+ include_once("modules/Campaigns/QueueCampaign.php");
+ }
+ return $return_id;
+ // END STIC-Custom
+ }
public function mark_deleted($id)
{
diff --git a/modules/Campaigns/metadata/detailviewdefs.php b/modules/Campaigns/metadata/detailviewdefs.php
index 53076cdf3c2..3025622e047 100755
--- a/modules/Campaigns/metadata/detailviewdefs.php
+++ b/modules/Campaigns/metadata/detailviewdefs.php
@@ -470,14 +470,25 @@
'label' => 'LBL_CAMPAIGN_END_DATE',
),
),
+ // STIC-Custom - JBL - 20240626 - Campaign type: Notification
+ // https://github.com/SinergiaTIC/SinergiaCRM/pull/44
+ // 3 =>
+ // array (
+ // 0 =>
+ // array (
+ // 'name' => 'frequency',
+ // 'customCode' => '{if $fields.campaign_type.value == "NewsLetter"}{$APP_LIST.newsletter_frequency_dom[$fields.frequency.value]}
{/if} ',
+ // 'customLabel' => '{if $fields.campaign_type.value == "NewsLetter"}{$MOD.LBL_CAMPAIGN_FREQUENCY}
{/if} ',
+ // ),
+ // 1 =>
+ // array (
+ // 'name' => 'status',
+ // 'label' => 'LBL_CAMPAIGN_STATUS',
+ // ),
+ // ),
3 =>
array (
- 0 =>
- array (
- 'name' => 'frequency',
- 'customCode' => '{if $fields.campaign_type.value == "NewsLetter"}{$APP_LIST.newsletter_frequency_dom[$fields.frequency.value]}
{/if} ',
- 'customLabel' => '{if $fields.campaign_type.value == "NewsLetter"}{$MOD.LBL_CAMPAIGN_FREQUENCY}
{/if} ',
- ),
+ 0 => array (), // Frequency in new row
1 =>
array (
'name' => 'status',
@@ -485,6 +496,17 @@
),
),
4 =>
+ array (
+ // Hide/Show fields managed in custom/modules/Campaigns/SticUtils.js
+ 0 => array (
+ 'name' => 'frequency',
+ ),
+ 1 => array(
+ 'name' => 'parent_name',
+ ),
+ ),
+ // END STIC-Custom JBL
+ 5 =>
array (
0 =>
array (
diff --git a/modules/Campaigns/metadata/quickcreatedefs.php b/modules/Campaigns/metadata/quickcreatedefs.php
new file mode 100644
index 00000000000..c0167c93b27
--- /dev/null
+++ b/modules/Campaigns/metadata/quickcreatedefs.php
@@ -0,0 +1,152 @@
+
+ array (
+ 'maxColumns' => '2',
+ 'widths' =>
+ array (
+ 0 =>
+ array (
+ 'label' => '10',
+ 'field' => '30',
+ ),
+ 1 =>
+ array (
+ 'label' => '10',
+ 'field' => '30',
+ ),
+ ),
+ 'useTabs' => false,
+ 'tabDefs' =>
+ array (
+ 'LBL_CAMPAIGN_INFORMATION' =>
+ array (
+ 'newTab' => true,
+ 'panelDefault' => 'expanded',
+ ),
+ ),
+ ),
+ 'panels' =>
+ array (
+ 'lbl_campaign_information' =>
+ array (
+ 0 =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'name',
+ ),
+ 1 =>
+ array (
+ 'name' => 'assigned_user_name',
+ 'label' => 'LBL_ASSIGNED_TO',
+ ),
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'campaign_type',
+ ),
+ 1 =>
+ array (
+ 'name' => 'status',
+ ),
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'start_date',
+ 'displayParams' =>
+ array (
+ 'required' => false,
+ 'showFormats' => true,
+ ),
+ ),
+ 1 =>
+ array (),
+ ),
+ 3 =>
+ array (
+ 0 =>
+ array (
+ 'name' => 'content',
+ 'displayParams' =>
+ array (
+ 'rows' => 2,
+ 'cols' => 80,
+ ),
+ ),
+ ),
+ ),
+ 'lbl_notification_information_panel' =>
+ array (
+ 0 => array(
+ 0 => array(
+ 'name' => 'notification_prospect_list_ids',
+ 'label' => 'LBL_NOTIFICATION_PROSPECT_LIST_ID',
+ ),
+ 1 => array(
+ 'name' => 'notification_template_id',
+ 'label' => 'LBL_NOTIFICATION_TEMPLATE_ID',
+ ),
+ ),
+ 1 => array(
+ 0 => array(
+ 'name' => 'notification_outbound_email_id',
+ 'label' => 'LBL_NOTIFICATION_OUTBOUND_EMAIL_ID',
+ ),
+ 1 => array(
+ 'name' => 'notification_inbound_email_id',
+ 'label' => 'LBL_NOTIFICATION_INBOUND_EMAIL_ID',
+ ),
+ ),
+ 2 => array(
+ 0 => array(
+ 'name' => 'notification_from_name',
+ 'label' => 'LBL_NOTIFICATION_FROM_NAME',
+ ),
+ 1 => array(
+ 'name' => 'notification_from_addr',
+ 'label' => 'LBL_NOTIFICATION_FROM_ADDR',
+ ),
+ ),
+ 3 => array(
+ 0 => array(
+ 'name' => 'notification_reply_to_name',
+ 'label' => 'LBL_NOTIFICATION_REPLY_TO_NAME',
+ ),
+ 1 => array(
+ 'name' => 'notification_reply_to_addr',
+ 'label' => 'LBL_NOTIFICATION_REPLY_TO_ADDR',
+ ),
+ ),
+ ),
+ ),
+);
+// END STIC-Custom
diff --git a/modules/Campaigns/views/view.detail.php b/modules/Campaigns/views/view.detail.php
index e961af8273a..373df82912a 100755
--- a/modules/Campaigns/views/view.detail.php
+++ b/modules/Campaigns/views/view.detail.php
@@ -137,13 +137,25 @@ public function display()
$subpanel->subpanel_definitions->exclude_tab($name);
}
}
- //only show email marketing subpanel for email/newsletter campaigns
- if ($this->bean->campaign_type != 'Email' && $this->bean->campaign_type != 'NewsLetter') {
- //exclude emailmarketing subpanel if not on an email or newsletter campaign
+ // STIC-Custom 20240603 JBL - New Campaign type: Notification
+ // https://github.com/SinergiaTIC/SinergiaCRM/pull/44
+ // //only show email marketing subpanel for email/newsletter campaigns
+ // if ($this->bean->campaign_type != 'Email' && $this->bean->campaign_type != 'NewsLetter') {
+ // //exclude emailmarketing subpanel if not on an email or newsletter campaign
+ // $subpanel->subpanel_definitions->exclude_tab('emailmarketing');
+ // // Bug #49893 - 20120120 - Captivea (ybi) - Remove trackers subpanels if not on an email/newsletter campaign (useless subpannl)
+ // $subpanel->subpanel_definitions->exclude_tab('tracked_urls');
+ // }
+ // only show email marketing subpanel for email/newsletter/notification campaigns
+ if ($this->bean->campaign_type != 'Email' && $this->bean->campaign_type != 'NewsLetter' && $this->bean->campaign_type != "Notification") {
+ //exclude emailmarketing subpanel if not on an email, newsletter or notification campaign
$subpanel->subpanel_definitions->exclude_tab('emailmarketing');
+ }
+ if ($this->bean->campaign_type != 'Email' && $this->bean->campaign_type != 'NewsLetter') {
// Bug #49893 - 20120120 - Captivea (ybi) - Remove trackers subpanels if not on an email/newsletter campaign (useless subpannl)
$subpanel->subpanel_definitions->exclude_tab('tracked_urls');
}
+ // END STIC-Custom
}
//show filtered subpanel list
echo $subpanel->display();
diff --git a/modules/DynamicFields/templates/Fields/Forms/html.tpl b/modules/DynamicFields/templates/Fields/Forms/html.tpl
index c085f807e88..d15ff292e29 100755
--- a/modules/DynamicFields/templates/Fields/Forms/html.tpl
+++ b/modules/DynamicFields/templates/Fields/Forms/html.tpl
@@ -65,6 +65,10 @@