public static function updateMap(EntityConversionMap $map) { //Synchonize dynamic bindings only $srcEntitTypeID = $map->getSourceEntityTypeID(); $dstEntitTypeID = $map->getDestinationEntityTypeID(); $outdatedItems = array(); foreach ($map->getItems() as $item) { $srcFieldID = $item->getSourceField(); $dstFieldID = $item->getDestinationField(); if ($dstFieldID === '') { $dstFieldID = $srcFieldID; } $isDynamicSrc = EntityConversionMapItem::isDynamicField($srcFieldID); $isDynamicDst = EntityConversionMapItem::isDynamicField($dstFieldID); $srcField = $isDynamicSrc ? self::getUserField($srcEntitTypeID, $srcFieldID) : null; $dstField = $isDynamicDst ? self::getUserField($dstEntitTypeID, $dstFieldID) : null; if ($isDynamicSrc && $srcField === null || $isDynamicDst && $dstField === null) { $outdatedItems[] = $item; continue; } elseif ($isDynamicSrc && $srcField !== null && $isDynamicDst && $dstField !== null && !$item->isLocked()) { $srcCode = UserFieldSynchronizer::getFieldComplianceCode($srcField); $dstCode = UserFieldSynchronizer::getFieldComplianceCode($dstField); if ($srcCode !== $dstCode) { $outdatedItems[] = $item; continue; } } } if (!empty($outdatedItems)) { foreach ($outdatedItems as $item) { $map->removeItem($item); } } $intersections = UserFieldSynchronizer::getIntersection($srcEntitTypeID, $dstEntitTypeID); foreach ($intersections as $intersection) { $srcFieldID = $intersection['SRC_FIELD_NAME']; $dstFieldID = $intersection['DST_FIELD_NAME']; if ($map->findItemBySourceID($srcFieldID) === null) { $map->createItem($srcFieldID, $dstFieldID); } } }
/** * Create conversion map for destination entity type * @static * @param int $entityTypeID Destination Entity Type ID * @return EntityConversionMap */ public static function createMap($entityTypeID) { if (!is_int($entityTypeID)) { $entityTypeID = (int) $entityTypeID; } if (!\CCrmOwnerType::IsDefined($entityTypeID)) { throw new Main\ArgumentOutOfRangeException('dstEntityTypeID', \CCrmOwnerType::FirstOwnerType, \CCrmOwnerType::LastOwnerType); } if ($entityTypeID !== \CCrmOwnerType::Invoice && $entityTypeID !== \CCrmOwnerType::Quote) { $dstEntityTypeName = \CCrmOwnerType::ResolveName($entityTypeID); throw new Main\NotSupportedException("Entity type: '{$dstEntityTypeName}' is not supported in current context"); } $map = new EntityConversionMap(\CCrmOwnerType::Deal, $entityTypeID); if ($entityTypeID === \CCrmOwnerType::Invoice) { //region Invoice Map Static Field Bindings $map->createItem('TITLE', 'ORDER_TOPIC'); $map->createItem('COMPANY_ID', 'UF_COMPANY_ID'); $map->createItem('CONTACT_ID', 'UF_CONTACT_ID'); $map->createItem('ASSIGNED_BY_ID', 'RESPONSIBLE_ID'); $map->createItem('COMMENTS'); $map->createItem('PRODUCT_ROWS'); //endregion //region Invoice Map User Field Bindings $intersections = UserFieldSynchronizer::getIntersection(\CCrmOwnerType::Deal, \CCrmOwnerType::Invoice); foreach ($intersections as $intersection) { $map->createItem($intersection['SRC_FIELD_NAME'], $intersection['DST_FIELD_NAME']); } //endregion } elseif ($entityTypeID === \CCrmOwnerType::Quote) { //region Quote Map Static Field Bindings $map->createItem('TITLE'); $map->createItem('COMMENTS'); $map->createItem('ASSIGNED_BY_ID'); $map->createItem('OPENED'); $map->createItem('OPPORTUNITY'); $map->createItem('CURRENCY_ID'); $map->createItem('TAX_VALUE'); $map->createItem('EXCH_RATE'); $map->createItem('LOCATION_ID'); $map->createItem('LEAD_ID'); $map->createItem('COMPANY_ID'); $map->createItem('CONTACT_ID'); $map->createItem('PRODUCT_ROWS'); //endregion //region Invoice Map User Field Bindings $intersections = UserFieldSynchronizer::getIntersection(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote); foreach ($intersections as $intersection) { $map->createItem($intersection['SRC_FIELD_NAME'], $intersection['DST_FIELD_NAME']); } //endregion } return $map; }
/** * Create conversion map for destination entity type * @static * @param int $entityTypeID Destination Entity Type ID * @return EntityConversionMap */ public static function createMap($entityTypeID) { if (!is_int($entityTypeID)) { $entityTypeID = (int) $entityTypeID; } if (!\CCrmOwnerType::IsDefined($entityTypeID)) { throw new Main\ArgumentOutOfRangeException('dstEntityTypeID', \CCrmOwnerType::FirstOwnerType, \CCrmOwnerType::LastOwnerType); } if ($entityTypeID !== \CCrmOwnerType::Contact && $entityTypeID !== \CCrmOwnerType::Company && $entityTypeID !== \CCrmOwnerType::Deal) { $dstEntityTypeName = \CCrmOwnerType::ResolveName($entityTypeID); throw new Main\NotSupportedException("Entity type: '{$dstEntityTypeName}' is not supported in current context"); } $map = new EntityConversionMap(\CCrmOwnerType::Lead, $entityTypeID); if ($entityTypeID === \CCrmOwnerType::Contact) { //region Contact Map Static Field Bindings $map->createItem('HONORIFIC'); $map->createItem('NAME'); $map->createItem('SECOND_NAME'); $map->createItem('LAST_NAME'); $map->createItem('BIRTHDATE'); $map->createItem('POST'); $map->createItem('COMMENTS'); $map->createItem('OPENED'); $map->createItem('SOURCE_ID'); $map->createItem('SOURCE_DESCRIPTION'); $map->createItem('ADDRESS'); $map->createItem('ADDRESS_2'); $map->createItem('ADDRESS_CITY'); $map->createItem('ADDRESS_POSTAL_CODE'); $map->createItem('ADDRESS_REGION'); $map->createItem('ADDRESS_PROVINCE'); $map->createItem('ADDRESS_COUNTRY'); $map->createItem('ADDRESS_COUNTRY_CODE'); $map->createItem('PHONE'); $map->createItem('EMAIL'); $map->createItem('WEB'); $map->createItem('IM'); $map->createItem('ASSIGNED_BY_ID'); $map->createItem('ORIGINATOR_ID'); $map->createItem('ORIGIN_ID'); //endregion //region Contact Map User Field Bindings $intersections = UserFieldSynchronizer::getIntersection(\CCrmOwnerType::Lead, \CCrmOwnerType::Contact); foreach ($intersections as $intersection) { $map->createItem($intersection['SRC_FIELD_NAME'], $intersection['DST_FIELD_NAME']); } //endregion } elseif ($entityTypeID === \CCrmOwnerType::Company) { //region Company Map Static Field Bindings //$map->createItem('COMPANY_TITLE', 'TITLE', array('ALT_SRC_FIELD_IDS' => array('TITLE'))); $map->createItem('TITLE'); $map->createItem('COMMENTS'); $map->createItem('OPENED'); $map->createItem('ADDRESS'); $map->createItem('ADDRESS_2'); $map->createItem('ADDRESS_CITY'); $map->createItem('ADDRESS_POSTAL_CODE'); $map->createItem('ADDRESS_REGION'); $map->createItem('ADDRESS_PROVINCE'); $map->createItem('ADDRESS_COUNTRY'); $map->createItem('ADDRESS_COUNTRY_CODE'); $map->createItem('PHONE'); $map->createItem('EMAIL'); $map->createItem('WEB'); $map->createItem('IM'); $map->createItem('ASSIGNED_BY_ID'); $map->createItem('ORIGINATOR_ID'); $map->createItem('ORIGIN_ID'); //endregion //region Company Map User Field Bindings $intersections = UserFieldSynchronizer::getIntersection(\CCrmOwnerType::Lead, \CCrmOwnerType::Company); foreach ($intersections as $intersection) { $map->createItem($intersection['SRC_FIELD_NAME'], $intersection['DST_FIELD_NAME']); } //endregion } elseif ($entityTypeID === \CCrmOwnerType::Deal) { //region Deal Map Static Field Bindings $map->createItem('TITLE'); $map->createItem('OPPORTUNITY'); $map->createItem('CURRENCY_ID'); $map->createItem('COMMENTS'); $map->createItem('OPENED'); $map->createItem('ADDRESS'); $map->createItem('ADDRESS_2'); $map->createItem('ADDRESS_CITY'); $map->createItem('ADDRESS_POSTAL_CODE'); $map->createItem('ADDRESS_REGION'); $map->createItem('ADDRESS_PROVINCE'); $map->createItem('ADDRESS_COUNTRY'); $map->createItem('ADDRESS_COUNTRY_CODE'); $map->createItem('PRODUCT_ROWS'); $map->createItem('ASSIGNED_BY_ID'); $map->createItem('ORIGINATOR_ID'); $map->createItem('ORIGIN_ID'); //endregion //region Deal Map User Field Bindings $intersections = UserFieldSynchronizer::getIntersection(\CCrmOwnerType::Lead, \CCrmOwnerType::Deal); foreach ($intersections as $intersection) { $map->createItem($intersection['SRC_FIELD_NAME'], $intersection['DST_FIELD_NAME']); } //endregion } return $map; }