/
(2024.2) Equipment Details Sync
(2024.2) Equipment Details Sync
Sync Service GLA, Owner and Location to Equipment
Equipment Details Sync
<?php
/**
* Event: Custom PHP Event
* Frequency: Hourly
* Time:
* Listener Class: Core_Model_Event
* Listener Method: eventCustom
*/
PCR_Event::attachDb("equipment-bulk-update", ["Application_Model_Equipment_Equipment" => "eventBulkUpdate"]);
$records = $this->query(<<<SQL
SELECT
S.RECID AS SERVICES_RECID,
E.RECID AS EQUIPMENT_RECID,
S.OWNER_CONTACTS_RECID AS SERVICE_OWNER_CONTACTS_RECID,
E.OWNER_CONTACTS_RECID AS EQUIPMENT_OWNER_CONTACTS_RECID,
S.OWNER_DEPT_HIERARCHY_RECID AS SERVICE_OWNER_DEPT_HIERARCHY_RECID,
E.OWNER_DEPT_HIERARCHY_RECID AS EQUIPMENT_OWNER_DEPT_HIERARCHY_RECID,
CASE
WHEN S.OWNER_CONTACTS_RECID IS NULL
THEN SDH.BILLING_GROUPS_RECID
WHEN SCON.BILLING_GROUPS_RECID IS NULL
THEN SCON_DEPT.BILLING_GROUPS_RECID
ELSE SCON.BILLING_GROUPS_RECID
END AS SERVICE_BILLING_GROUP,
CASE
WHEN E.OWNER_CONTACTS_RECID IS NULL
THEN EDH.BILLING_GROUPS_RECID
WHEN ECON.BILLING_GROUPS_RECID IS NULL
THEN ECON_DEPT.BILLING_GROUPS_RECID
ELSE ECON.BILLING_GROUPS_RECID
END AS EQUIPMENT_BILLING_GROUP,
SEG.GLA_RECID AS SERVICE_GLA,
EEG.GLA_RECID AS EQUIPMENT_GLA,
S.LOCATIONS_RECID AS SERVICE_LOCATION,
E.LOCATIONS_RECID AS EQUIPMENT_LOCATION,
S.MULTIPLE_LOCATIONS,
COALESCE(EG.FORMAT,SG.FORMAT) AS GLA_FORMAT,
E.BILLABLE,
E.WARRANTY_END_DATE
FROM SERVICES S
JOIN SERVICES_EQUIPMENT SE ON S.RECID = SE.SERVICES_RECID
JOIN EQUIPMENT E ON SE.EQUIPMENT_RECID = E.RECID
LEFT JOIN DEPT_HIERARCHY EDH ON E.OWNER_DEPT_HIERARCHY_RECID = EDH.RECID
LEFT JOIN DEPT_HIERARCHY SDH ON S.OWNER_DEPT_HIERARCHY_RECID = SDH.RECID
LEFT JOIN CONTACTS ECON ON E.OWNER_CONTACTS_RECID = ECON.RECID
LEFT JOIN DEPT_HIERARCHY ECON_DEPT ON ECON.DEPT_HIERARCHY_RECID = ECON_DEPT.RECID
LEFT JOIN CONTACTS SCON ON S.OWNER_CONTACTS_RECID = SCON.RECID
LEFT JOIN DEPT_HIERARCHY SCON_DEPT ON SCON.DEPT_HIERARCHY_RECID = SCON_DEPT.RECID
LEFT JOIN SERVICES_EXPENSE_GLA SEG ON S.RECID = SEG.SERVICES_RECID
LEFT JOIN EQUIPMENT_EXPENSE_GLA EEG ON E.RECID = EEG.EQUIPMENT_RECID
LEFT JOIN LISTS SEGL ON SEG.EXPENSE_TYPE_LISTS_RECID = SEGL.RECID
LEFT JOIN LISTS EEGL ON EEG.EXPENSE_TYPE_LISTS_RECID = EEGL.RECID
LEFT JOIN GLA EG ON EEG.GLA_RECID = EG.RECID
LEFT JOIN GLA SG ON SEG.GLA_RECID = SG.RECID
WHERE
-- GLAs are Default and 100% or are not set
(
((SEGL.CODE = 'DEFAULT' AND SEG.PERCENT = 100) OR SEGL.CODE IS NULL)
AND
((EEGL.CODE = 'DEFAULT' AND SEG.PERCENT = 100) OR EEGL.CODE IS NULL)
)
-- if the OWNER is different
AND
(
(
(S.OWNER_CONTACTS_RECID <> E.OWNER_CONTACTS_RECID AND S.OWNER_CONTACTS_RECID IS NOT NULL AND E.OWNER_CONTACTS_RECID IS NOT NULL)
OR (S.OWNER_DEPT_HIERARCHY_RECID <> E.OWNER_DEPT_HIERARCHY_RECID AND S.OWNER_DEPT_HIERARCHY_RECID IS NOT NULL AND E.OWNER_DEPT_HIERARCHY_RECID IS NOT NULL)
OR (S.OWNER_CONTACTS_RECID IS NULL AND E.OWNER_CONTACTS_RECID IS NOT NULL)
OR (S.OWNER_CONTACTS_RECID IS NOT NULL AND E.OWNER_CONTACTS_RECID IS NULL)
OR (S.OWNER_DEPT_HIERARCHY_RECID IS NULL AND E.OWNER_DEPT_HIERARCHY_RECID IS NOT NULL)
OR (S.OWNER_DEPT_HIERARCHY_RECID IS NOT NULL AND E.OWNER_DEPT_HIERARCHY_RECID IS NULL)
)
-- if the location is different
OR (NOT(S.LOCATIONS_RECID <=> E.LOCATIONS_RECID) AND S.MULTIPLE_LOCATIONS = 0)
-- if the GLAs are different
OR NOT(SEG.GLA_RECID <=> EEG.GLA_RECID )
);
SQL
);
foreach ($records as $rec) {
$eventParams = [
"contact" => 101452, // PCR Admin contact
"users_recid" => 485, // pcradmin user
"selectedEquipmentRecids" => [$rec['EQUIPMENT_RECID']],
"gla_enabled" => false,
"condition_enabled" => false,
"cabling_eqp_type_enabled" => false,
"status_enabled" => false,
"location_enabled" => false,
"assoc_service_enabled" => false,
"equipment_type_enabled" => false,
"dhcp_enabled" => false,
"lan_name_enabled" => false,
"host_name_enabled" => false,
"private_enabled" => false,
"billable_enabled" => false,
"billable" => $rec["BILLABLE"],
"war_date_enabled" => false,
"war_date" => $rec["WARRANTY_END_DATE"],
"dept_hier_owner_enabled" => false,
"contact_owner_enabled" => false,
// other junk from the EQP Bulk UPdate
"gla_format" => $rec["GLA_FORMAT"],
"selectedEquipmentTypeListRecid" => null,
"isLocationRequired" => null,
"comment" => null,
];
if (empty($rec['SERVICE_OWNER_CONTACTS_RECID'])
&& $rec['SERVICE_OWNER_DEPT_HIERARCHY_RECID'] != $rec['EQUIPMENT_OWNER_DEPT_HIERARCHY_RECID']
) {
$eventParams['dept_hier_owner_enabled'] = true;
$eventParams['dept_hier_owner'] = $rec['SERVICE_OWNER_DEPT_HIERARCHY_RECID'];
} elseif(empty($rec['SERVICE_OWNER_DEPT_HIERARCHY_RECID'])
&& $rec['SERVICE_OWNER_CONTACTS_RECID'] != $rec['EQUIPMENT_OWNER_CONTACTS_RECID']
) {
$eventParams['contact_owner_enabled'] = true;
$eventParams['contact_owner'] = $rec['SERVICE_OWNER_CONTACTS_RECID'];
} elseif(empty($rec['SERVICE_OWNER_DEPT_HIERARCHY_RECID'])
&& $rec['SERVICE_OWNER_CONTACTS_RECID'] == $rec['EQUIPMENT_OWNER_CONTACTS_RECID']
) {
// Equipment has both Contact and Dept Owners -
// @see https://jira.pcr.com/browse/PCR360-7612
// updating the contact Owner even though it is already set will clear the Dept Owner
$eventParams['contact_owner_enabled'] = true;
$eventParams['contact_owner'] = $rec['SERVICE_OWNER_CONTACTS_RECID'];
}
if($rec['MULTIPLE_LOCATIONS'] == "0"
&& $rec['SERVICE_LOCATION'] != $rec['EQUIPMENT_LOCATION']
){
$eventParams['location_enabled'] = true;
$eventParams['location'] = $rec['SERVICE_LOCATION'];
}
if($rec['SERVICE_GLA'] != $rec['EQUIPMENT_GLA']){
$eventParams['gla_enabled'] = true;
$eventParams['gla'] = $rec['SERVICE_GLA'];
}
// Only trigger the bulk update if any of the options are enabled. Otherwise nothing is changing, there is no
// need to trigger a bulk update if nothing is changing.
if($eventParams['dept_hier_owner_enabled']
|| $eventParams['location_enabled']
|| $eventParams['gla_enabled']
|| $eventParams['contact_owner_enabled']
){
PCR_Event::trigger("equipment-bulk-update", $eventParams);
}
}
, multiple selections available,
Related content
(2024.1) Equipment Details Sync
(2024.1) Equipment Details Sync
More like this
(v1) .Equipment Details Sync v2022.2
(v1) .Equipment Details Sync v2022.2
More like this
(v1) .Equipment Details Sync v2021.3
(v1) .Equipment Details Sync v2021.3
More like this
(v1) Equipment Details Sync
(v1) Equipment Details Sync
More like this
Equipment Details Sync
Equipment Details Sync
More like this
(2024.1) Nightly Service Location Update
(2024.1) Nightly Service Location Update
More like this