static function getDefaultEntityRequisiteLink($parentEntityList, $entityTypeId, $entityId, $requisiteId = 0, $isMyCompany = false)
{
$result = [
'REQUISITE_ID' => 0,
'BANK_DETAIL_ID' => 0
];
if ($requisiteId > 0)
{
$result['REQUISITE_ID'] = (int)$requisiteId;
}
$requisite = null;
$bankDetail = null;
if (!is_array($parentEntityList))
{
$parentEntityList = [];
}
$parentEntityList[] = ['ENTITY_TYPE_ID' => $entityTypeId, 'ENTITY_ID' => $entityId];
foreach ($parentEntityList as $entityInfo)
{
$parentEntityTypeId = isset($entityInfo['ENTITY_TYPE_ID']) ? (int)$entityInfo['ENTITY_TYPE_ID'] : 0;
if ($parentEntityTypeId < 0)
$parentEntityTypeId = 0;
$parentEntityId = isset($entityInfo['ENTITY_ID']) ? (int)$entityInfo['ENTITY_ID'] : 0;
if ($parentEntityId < 0)
$parentEntityId = 0;
if (\CCrmOwnerType::IsDefined($parentEntityTypeId) && $parentEntityId > 0)
{
if ($parentEntityTypeId === \CCrmOwnerType::Deal
|| $parentEntityTypeId === \CCrmOwnerType::Quote
|| $parentEntityTypeId === \CCrmOwnerType::Invoice)
{
$fieldMap = [
0 => [
'REQUISITE_ID' => 'REQUISITE_ID',
'BANK_DETAIL_ID' => 'BANK_DETAIL_ID'
],
1 => [
'REQUISITE_ID' => 'MC_REQUISITE_ID',
'BANK_DETAIL_ID' => 'MC_BANK_DETAIL_ID'
]
];
$fieldIndex = $isMyCompany ? 1 : 0;
if ($row = self::getList(
array(
'filter' => array(
'=ENTITY_TYPE_ID' => $parentEntityTypeId,
'=ENTITY_ID' => $parentEntityId
),
'select' => [
$fieldMap[$fieldIndex]['REQUISITE_ID'],
$fieldMap[$fieldIndex]['BANK_DETAIL_ID']
],
'limit' => 1
)
)->fetch())
{
if (isset($row[$fieldMap[$fieldIndex]['REQUISITE_ID']])
&& $row[$fieldMap[$fieldIndex]['REQUISITE_ID']] > 0
&& $requisiteId <= 0)
{
$result['REQUISITE_ID'] = (int)$row[$fieldMap[$fieldIndex]['REQUISITE_ID']];
}
if ($result['REQUISITE_ID'] > 0
&& isset($row[$fieldMap[$fieldIndex]['BANK_DETAIL_ID']])
&& $row[$fieldMap[$fieldIndex]['BANK_DETAIL_ID']] > 0
&& ($requisiteId <= 0 || $requisiteId === $result['REQUISITE_ID']))
{
$result['BANK_DETAIL_ID'] = (int)$row[$fieldMap[$fieldIndex]['BANK_DETAIL_ID']];
}
}
unset($row);
if ($result['REQUISITE_ID'] > 0)
{
try
{
if ($isMyCompany)
{
self::checkConsistence(
\CCrmOwnerType::Undefined, 0,
0, 0,
$result['REQUISITE_ID'], $result['BANK_DETAIL_ID'],
[
'ENTITY_CHECK' => false,
'CLIENT_SELLER_INFO' => [
'CLIENT_ENTITY_TYPE_ID' => \CCrmOwnerType::Undefined,
'CLIENT_ENTITY_ID' => 0,
'MYCOMPANY_ID' => $entityId
]
]
);
}
else
{
self::checkConsistence(
\CCrmOwnerType::Undefined, 0,
$result['REQUISITE_ID'], $result['BANK_DETAIL_ID'],
0, 0,
[
'ENTITY_CHECK' => false,
'CLIENT_SELLER_INFO' => [
'CLIENT_ENTITY_TYPE_ID' => $entityTypeId,
'CLIENT_ENTITY_ID' => $entityId,
'MYCOMPANY_ID' => 0
]
]
);
}
}
catch (Main\SystemException $e)
{
$resetBankDetail = false;
switch ($e->getCode())
{
case self::ERR_INVALID_BANK_DETAIL_ID:
case self::ERR_BANK_DETAIL_NOT_ASSIGNED_WO_REQUISITE:
case self::ERR_BANK_DETAIL_NOT_FOUND:
case self::ERR_BANK_DETAIL_NOT_ASSIGNED:
case self::ERR_INVALID_MC_BANK_DETAIL_ID:
case self::ERR_MC_BANK_DETAIL_NOT_ASSIGNED_WO_MC_REQUISITE:
case self::ERR_MC_BANK_DETAIL_NOT_FOUND:
case self::ERR_MC_BANK_DETAIL_NOT_ASSIGNED:
$resetBankDetail = true;
}
if ($resetBankDetail)
{
$result['BANK_DETAIL_ID'] = 0;
if ($bankDetail === null)
$bankDetail = EntityBankDetail::getSingleInstance();
$res = $bankDetail->getList(
array(
'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
'filter' => array(
'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
'=ENTITY_ID' => $result['REQUISITE_ID']
),
'select' => array('ID'),
'limit' => 1
)
);
if ($row = $res->fetch())
$result['BANK_DETAIL_ID'] = (int)$row['ID'];
unset($resetBankDetail, $res, $row);
break;
}
$result['REQUISITE_ID'] = 0;
$result['BANK_DETAIL_ID'] = 0;
continue;
}
if ($result['REQUISITE_ID'] === 0
|| ($requisiteId > 0
&& $requisiteId === $result['REQUISITE_ID']
&& $result['BANK_DETAIL_ID'] === 0))
{
continue;
}
break;
}
}
else if ($entityTypeId === \CCrmOwnerType::Company
|| $entityTypeId === \CCrmOwnerType::Contact)
{
if ($requisite === null)
{
$requisite = EntityRequisite::getSingleInstance();
}
if ($result['REQUISITE_ID'] <= 0 || $result['BANK_DETAIL_ID'] <= 0)
{
$requisiteId = $result['REQUISITE_ID'];
$bankDetailId = $result['BANK_DETAIL_ID'];
$settings = $requisite->loadSettings($entityTypeId, $entityId);
if (is_array($settings))
{
if ($result['REQUISITE_ID'] <= 0 && isset($settings['REQUISITE_ID_SELECTED']))
{
$requisiteId = (int)$settings['REQUISITE_ID_SELECTED'];
if ($requisiteId < 0)
$requisiteId = 0;
}
if (isset($settings['BANK_DETAIL_ID_SELECTED'])
&& ($result['REQUISITE_ID'] <= 0
|| (isset($settings['REQUISITE_ID_SELECTED'])
&& $result['REQUISITE_ID'] === (int)$settings['REQUISITE_ID_SELECTED'])))
{
$bankDetailId = (int)$settings['BANK_DETAIL_ID_SELECTED'];
if ($bankDetailId < 0)
$bankDetailId = 0;
}
}
$result['REQUISITE_ID'] = $requisiteId;
$result['BANK_DETAIL_ID'] = $bankDetailId;
unset($requisiteId, $bankDetailId, $settings);
}
try
{
if ($isMyCompany)
{
self::checkConsistence(
\CCrmOwnerType::Undefined, 0,
0, 0,
$result['REQUISITE_ID'], $result['BANK_DETAIL_ID'],
[
'ENTITY_CHECK' => false,
'CLIENT_SELLER_INFO' => [
'CLIENT_ENTITY_TYPE_ID' => \CCrmOwnerType::Undefined,
'CLIENT_ENTITY_ID' => 0,
'MYCOMPANY_ID' => $entityId
]
]
);
}
else
{
self::checkConsistence(
\CCrmOwnerType::Undefined, 0,
$result['REQUISITE_ID'], $result['BANK_DETAIL_ID'],
0, 0,
[
'ENTITY_CHECK' => false,
'CLIENT_SELLER_INFO' => [
'CLIENT_ENTITY_TYPE_ID' => $entityTypeId,
'CLIENT_ENTITY_ID' => $entityId,
'MYCOMPANY_ID' => 0
]
]
);
}
}
catch (Main\SystemException $e)
{
$resetBankDetail = false;
switch ($e->getCode())
{
case self::ERR_INVALID_BANK_DETAIL_ID:
case self::ERR_BANK_DETAIL_NOT_ASSIGNED_WO_REQUISITE:
case self::ERR_BANK_DETAIL_NOT_FOUND:
case self::ERR_BANK_DETAIL_NOT_ASSIGNED:
case self::ERR_INVALID_MC_BANK_DETAIL_ID:
case self::ERR_MC_BANK_DETAIL_NOT_ASSIGNED_WO_MC_REQUISITE:
case self::ERR_MC_BANK_DETAIL_NOT_FOUND:
case self::ERR_MC_BANK_DETAIL_NOT_ASSIGNED:
$resetBankDetail = true;
}
if ($resetBankDetail)
{
$result['BANK_DETAIL_ID'] = 0;
if ($bankDetail === null)
$bankDetail = EntityBankDetail::getSingleInstance();
$res = $bankDetail->getList(
array(
'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
'filter' => array(
'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
'=ENTITY_ID' => $result['REQUISITE_ID']
),
'select' => array('ID'),
'limit' => 1
)
);
if ($row = $res->fetch())
$result['BANK_DETAIL_ID'] = (int)$row['ID'];
unset($resetBankDetail, $res, $row);
}
else
{
$result['REQUISITE_ID'] = 0;
$result['BANK_DETAIL_ID'] = 0;
}
}
if ($result['REQUISITE_ID'] === 0)
{
if ($requisite === null)
{
$requisite = EntityRequisite::getSingleInstance();
}
$res = $requisite->getList(
array(
'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
'filter' => array(
'=ENTITY_TYPE_ID' => $entityTypeId,
'=ENTITY_ID' => $entityId
),
'select' => array('ID'),
'limit' => 1
)
);
if ($row = $res->fetch())
$result['REQUISITE_ID'] = (int)$row['ID'];
unset($res, $row);
}
if ($result['REQUISITE_ID'] > 0)
{
if ($result['BANK_DETAIL_ID'] === 0)
{
if ($bankDetail === null)
$bankDetail = EntityBankDetail::getSingleInstance();
$res = $bankDetail->getList(
array(
'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
'filter' => array(
'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
'=ENTITY_ID' => $result['REQUISITE_ID']
),
'select' => array('ID'),
'limit' => 1
)
);
if ($row = $res->fetch())
$result['BANK_DETAIL_ID'] = (int)$row['ID'];
unset($res, $row);
}
break;
}
}
}
}
return $result;
}