public function map(EntityConversionMap $map, array $options = null) { $srcFields = $this->getSourceFields(); if (empty($srcFields)) { return array(); } $dstFields = array(); $dstEntityTypeID = $map->getDestinationEntityTypeID(); foreach ($map->getItems() as $item) { $dstFieldID = $item->getDestinationField(); //Skip empty binding if ($dstFieldID === '-') { continue; } $srcFieldID = $item->getSourceField(); if ((!isset($srcFields[$srcFieldID]) || $srcFields[$srcFieldID] === '') && $srcFieldID !== 'PRODUCT_ROWS') { $altSrcFieldID = ''; foreach ($item->getAlternativeSourceFields() as $fieldID) { if (isset($srcFields[$fieldID])) { $altSrcFieldID = $fieldID; break; } } if ($altSrcFieldID !== '') { $srcFieldID = $altSrcFieldID; } } if ($dstFieldID === '') { $dstFieldID = $srcFieldID; } if (strpos($srcFieldID, 'UF_') === 0 && strpos($dstFieldID, 'UF_') === 0) { self::mapUserField(\CCrmOwnerType::Deal, $srcFieldID, $srcFields, $dstEntityTypeID, $dstFieldID, $dstFields, $options); } elseif ($srcFieldID === 'PRODUCT_ROWS') { $productRows = \CCrmDeal::LoadProductRows($this->srcEntityID); if (count($productRows) > 0) { if ($dstEntityTypeID === \CCrmOwnerType::Invoice) { $currencyID = isset($srcFields['CURRENCY_ID']) ? $srcFields['CURRENCY_ID'] : ''; if ($currencyID === '' || !\CCrmCurrency::IsExists($currencyID)) { $currencyID = \CCrmCurrency::GetBaseCurrencyID(); } $actualRows = \CCrmInvoice::ProductRows2BasketItems($productRows, $currencyID, \CCrmInvoice::GetCurrencyID()); if (count($actualRows) > 0) { foreach ($actualRows as &$productRow) { unset($productRow['ID']); } unset($productRow); $dstFields[$dstFieldID] = $actualRows; } } else { foreach ($productRows as &$productRow) { unset($productRow['ID']); } unset($productRow); $dstFields[$dstFieldID] = $productRows; } } } elseif (isset($srcFields[$srcFieldID])) { $dstFields[$dstFieldID] = $srcFields[$srcFieldID]; } } if (!empty($dstFields)) { if ($dstEntityTypeID === \CCrmOwnerType::Invoice) { $dstFields['UF_DEAL_ID'] = $this->srcEntityID; //region Prepare Invoice Properties $dstFields['INVOICE_PROPERTIES'] = array(); $invoiceEntity = new \CCrmInvoice(false); $companyID = isset($dstFields['UF_COMPANY_ID']) ? (int) $dstFields['UF_COMPANY_ID'] : 0; $contactID = isset($dstFields['UF_CONTACT_ID']) ? (int) $dstFields['UF_CONTACT_ID'] : 0; $personTypeID = 0; $personTypes = \CCrmPaySystem::getPersonTypeIDs(); if ($companyID > 0 && isset($personTypes['COMPANY'])) { $personTypeID = $personTypes['COMPANY']; } elseif (isset($personTypes['CONTACT'])) { $personTypeID = $personTypes['CONTACT']; } $properties = $invoiceEntity->GetProperties(0, $personTypeID); if (is_array($properties)) { \CCrmInvoice::__RewritePayerInfo($companyID, $contactID, $invoiceProperties); foreach ($properties as $property) { $dstFields['INVOICE_PROPERTIES'][$property['FIELDS']['ID']] = $property['VALUE']; } } //endregion } elseif ($dstEntityTypeID === \CCrmOwnerType::Quote) { $dstFields['DEAL_ID'] = $this->srcEntityID; } } return $dstFields; }
public static function PrepareInvoiceItem(&$item, &$params, $enums = array(), $options = array()) { $itemID = intval($item['~ID']); if (isset($params['INVOICE_SHOW_URL_TEMPLATE'])) { $item['SHOW_URL'] = CComponentEngine::makePathFromTemplate($params['INVOICE_SHOW_URL_TEMPLATE'], array('invoice_id' => $itemID)); } if (isset($params['INVOICE_EDIT_URL_TEMPLATE'])) { $item['EDIT_URL'] = CComponentEngine::makePathFromTemplate($params['INVOICE_EDIT_URL_TEMPLATE'], array('invoice_id' => $itemID)); } if (!isset($item['~ACCOUNT_NUMBER'])) { $item['~ACCOUNT_NUMBER'] = $item['ACCOUNT_NUMBER'] = ''; } if (!isset($item['~DATE_BILL'])) { $item['~DATE_BILL'] = $item['DATE_BILL'] = ''; } else { $item['~DATE_BILL'] = ConvertTimeStamp(MakeTimeStamp($item['~DATE_BILL']), 'SHORT', SITE_ID); $item['DATE_BILL'] = htmlspecialcharsbx($item['~DATE_BILL']); } if (!isset($item['~DATE_PAY_BEFORE'])) { $item['~DATE_PAY_BEFORE'] = $item['DATE_PAY_BEFORE'] = ''; $item['DATE_PAY_BEFORE_STAMP'] = 0; } if ($item['~DATE_PAY_BEFORE'] !== '') { $item['~DATE_PAY_BEFORE'] = ConvertTimeStamp(MakeTimeStamp($item['~DATE_PAY_BEFORE']), 'SHORT', SITE_ID); $item['DATE_PAY_BEFORE'] = htmlspecialcharsbx($item['~DATE_PAY_BEFORE']); } if (!isset($item['~ORDER_TOPIC'])) { $item['~ORDER_TOPIC'] = $item['ORDER_TOPIC'] = ''; } // COMMENTS --> if (!isset($item['~COMMENTS'])) { $item['~COMMENTS'] = $item['COMMENTS'] = ''; } if (!isset($item['~USER_DESCRIPTION'])) { $item['~USER_DESCRIPTION'] = $item['USER_DESCRIPTION'] = ''; } //<-- COMMENTS // STATUS --> if (!isset($item['~STATUS_ID'])) { $item['~STATUS_ID'] = $item['STATUS_ID'] = ''; } $statusID = $item['~STATUS_ID']; if ($statusID !== '') { $statuses = self::GetStatusList('INVOICE_STATUS'); if (!isset($statuses[$statusID])) { $item['~STATUS_TEXT'] = $item['STATUS_TEXT']; } else { $item['~STATUS_TEXT'] = $statuses[$statusID]; $item['STATUS_TEXT'] = htmlspecialcharsbx($item['~STATUS_TEXT']); } } //<-- STATUS //PRICE, CURRENCY --> $price = isset($item['~PRICE']) ? doubleval($item['~PRICE']) : 0.0; $item['~PRICE'] = $item['PRICE'] = $price; $currencyID = isset($item['~CURRENCY']) ? $item['~CURRENCY'] : ''; if ($currencyID === '') { $currencyID = $item['~CURRENCY'] = CCrmCurrency::GetBaseCurrencyID(); $item['CURRENCY'] = htmlspecialcharsbx($currencyID); } $item['~CURRENCY_NAME'] = CCrmCurrency::GetCurrencyName($currencyID); $item['CURRENCY_NAME'] = htmlspecialcharsbx($item['~CURRENCY_NAME']); $item['~FORMATTED_PRICE'] = CCrmCurrency::MoneyToString($price, $currencyID); $item['FORMATTED_PRICE'] = strip_tags($item['~FORMATTED_PRICE']); //<-- PRICE, CURRENCY //DEAL --> $dealID = isset($item['~UF_DEAL_ID']) ? intval($item['~UF_DEAL_ID']) : 0; $item['~DEAL_ID'] = $item['DEAL_ID'] = $dealID; if ($dealID <= 0) { $item['~DEAL_TITLE'] = $item['DEAL_TITLE'] = ''; } else { $item['~DEAL_TITLE'] = CCrmOwnerType::GetCaption(CCrmOwnerType::Deal, $dealID); $item['DEAL_TITLE'] = htmlspecialcharsbx($item['~DEAL_TITLE']); } //<-- DEAL // LOCATION --> if (is_array($options) && isset($options['ENABLE_LOCATION']) && $options['ENABLE_LOCATION']) { $properties = is_array($enums) && isset($enums['INVOICE_PROPERTIES']) && is_array($enums['INVOICE_PROPERTIES']) ? $enums['INVOICE_PROPERTIES'] : null; $locationID = is_array($properties) && isset($properties['PR_LOCATION']) ? intval($properties['PR_LOCATION']['VALUE']) : 0; $item['~LOCATION_ID'] = $item['LOCATION_ID'] = $locationID; $item['~LOCATION_NAME'] = $locationID > 0 ? CCrmInvoice::ResolveLocationName($locationID) : ''; $item['LOCATION_NAME'] = htmlspecialcharsbx($item['~LOCATION_NAME']); } //<-- LOCATION $enableMultiFields = is_array($options) && isset($options['ENABLE_MULTI_FIELDS']) && $options['ENABLE_MULTI_FIELDS']; //CONTACT --> $contactID = isset($item['UF_CONTACT_ID']) ? intval($item['UF_CONTACT_ID']) : 0; $item['~CONTACT_ID'] = $item['CONTACT_ID'] = $contactID; $contact = null; if ($contactID > 0) { $dbContact = CCrmContact::GetListEx(array(), array('=ID' => $contactID), false, false, array('NAME', 'SECOND_NAME', 'LAST_NAME', 'POST', 'PHOTO')); $contact = $dbContact ? $dbContact->Fetch() : null; } if (!$contact) { $item['~CONTACT_FULL_NAME'] = $item['CONTACT_FULL_NAME'] = $item['~CONTACT_POST'] = $item['CONTACT_POST'] = ''; $item['~CONTACT_PHOTO'] = $item['CONTACT_PHOTO'] = 0; if ($enableMultiFields) { $item['CONTACT_FM'] = array(); } } else { $item['~CONTACT_FULL_NAME'] = CUser::FormatName(\Bitrix\Crm\Format\PersonNameFormatter::getFormat(), array('LOGIN' => '', 'NAME' => isset($contact['NAME']) ? $contact['NAME'] : '', 'SECOND_NAME' => isset($contact['SECOND_NAME']) ? $contact['SECOND_NAME'] : '', 'LAST_NAME' => isset($contact['LAST_NAME']) ? $contact['LAST_NAME'] : ''), false, false); $item['CONTACT_FULL_NAME'] = htmlspecialcharsbx($item['~CONTACT_FULL_NAME']); $item['~CONTACT_POST'] = isset($contact['POST']) ? $contact['POST'] : ''; $item['CONTACT_POST'] = htmlspecialcharsbx($item['~CONTACT_POST']); $item['~CONTACT_PHOTO'] = $item['CONTACT_PHOTO'] = isset($contact['PHOTO']) ? intval($contact['PHOTO']) : 0; if ($enableMultiFields) { $item['CONTACT_FM'] = array(); $dbMultiFields = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => 'CONTACT', 'ELEMENT_ID' => $contactID)); if ($dbMultiFields) { while ($multiFields = $dbMultiFields->Fetch()) { $item['CONTACT_FM'][$multiFields['TYPE_ID']][] = array('VALUE' => $multiFields['VALUE'], 'VALUE_TYPE' => $multiFields['VALUE_TYPE']); } } } } //<-- CONTACT //COMPANY --> $companyID = isset($item['UF_COMPANY_ID']) ? intval($item['UF_COMPANY_ID']) : 0; $item['~COMPANY_ID'] = $item['COMPANY_ID'] = $companyID; $company = null; if ($companyID > 0) { $dbCompany = CCrmCompany::GetListEx(array(), array('=ID' => $companyID), false, false, array('TITLE', 'LOGO')); $company = $dbCompany ? $dbCompany->Fetch() : null; } if (!$company) { $item['~COMPANY_TITLE'] = $item['COMPANY_TITLE'] = ''; $item['~COMPANY_LOGO'] = $item['COMPANY_LOGO'] = 0; } else { $item['~COMPANY_TITLE'] = isset($company['TITLE']) ? $company['TITLE'] : ''; $item['COMPANY_TITLE'] = htmlspecialcharsbx($item['~COMPANY_TITLE']); $item['~COMPANY_LOGO'] = $item['COMPANY_LOGO'] = isset($company['LOGO']) ? intval($company['LOGO']) : 0; if ($enableMultiFields) { $item['COMPANY_FM'] = array(); $dbMultiFields = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => 'COMPANY', 'ELEMENT_ID' => $companyID)); if ($dbMultiFields) { while ($multiFields = $dbMultiFields->Fetch()) { $item['COMPANY_FM'][$multiFields['TYPE_ID']][] = array('VALUE' => $multiFields['VALUE'], 'VALUE_TYPE' => $multiFields['VALUE_TYPE']); } } } } //<-- COMPANY $personTypeID = CCrmInvoice::ResolvePersonTypeID($companyID, $contactID); // PAYER_INFO --> if (is_array($options) && isset($options['ENABLE_PAYER_INFO']) && $options['ENABLE_PAYER_INFO']) { if ($companyID <= 0 && $contactID <= 0) { $item['~PAYER_INFO'] = $item['PAYER_INFO'] = ''; } else { // Get invoice properties $properties = isset($item['INVOICE_PROPERTIES']) ? $item['INVOICE_PROPERTIES'] : null; if (!is_array($properties) && $personTypeID > 0) { $properties = CCrmInvoice::GetProperties($itemID, $personTypeID); if ($itemID <= 0) { CCrmInvoice::__RewritePayerInfo($companyID, $contactID, $properties); } } $item['~PAYER_INFO'] = is_array($properties) ? CCrmInvoice::__MakePayerInfoString($properties) : ''; $item['PAYER_INFO'] = htmlspecialcharsbx($item['~PAYER_INFO']); } } //<-- PAYER_INFO // PAY_SYSTEM --> if (!isset($item['~PAY_SYSTEM_ID'])) { $item['~PAY_SYSTEM_ID'] = $item['PAY_SYSTEM_ID'] = ''; } $paySystemID = $item['~PAY_SYSTEM_ID']; $paySystems = is_array($enums) && isset($enums['PAY_SYSTEMS']) && is_array($enums['PAY_SYSTEMS']) ? $enums['PAY_SYSTEMS'] : ($personTypeID > 0 ? CCrmPaySystem::GetPaySystemsListItems($personTypeID) : array()); if (isset($paySystems[$paySystemID])) { $item['~PAY_SYSTEM_NAME'] = $paySystems[$paySystemID]; $item['PAY_SYSTEM_NAME'] = htmlspecialcharsbx($item['~PAY_SYSTEM_NAME']); } else { $item['~PAY_SYSTEM_NAME'] = $item['PAY_SYSTEM_NAME'] = ''; } //<-- PAY_SYSTEM // RESPONSIBLE --> $responsibleID = isset($item['~RESPONSIBLE_ID']) ? intval($item['~RESPONSIBLE_ID']) : 0; $item['RESPONSIBLE_SHOW_URL'] = ''; $item['~RESPONSIBLE_FORMATTED_NAME'] = ''; if ($responsibleID > 0) { $item['RESPONSIBLE_SHOW_URL'] = $params['USER_PROFILE_URL_TEMPLATE'] !== '' ? CComponentEngine::makePathFromTemplate($params['USER_PROFILE_URL_TEMPLATE'], array('user_id' => $responsibleID)) : ''; $item['~RESPONSIBLE_FORMATTED_NAME'] = CUser::FormatName($params['NAME_TEMPLATE'], array('LOGIN' => isset($item['~RESPONSIBLE_LOGIN']) ? $item['~RESPONSIBLE_LOGIN'] : '', 'NAME' => isset($item['~RESPONSIBLE_NAME']) ? $item['~RESPONSIBLE_NAME'] : '', 'LAST_NAME' => isset($item['~RESPONSIBLE_LAST_NAME']) ? $item['~RESPONSIBLE_LAST_NAME'] : '', 'SECOND_NAME' => isset($item['~RESPONSIBLE_SECOND_NAME']) ? $item['~RESPONSIBLE_SECOND_NAME'] : ''), true, false); } $item['RESPONSIBLE_FORMATTED_NAME'] = htmlspecialcharsbx($item['~RESPONSIBLE_FORMATTED_NAME']); //<-- RESPONSIBLE }
// PAY_SYSTEM --> $arResult['PAY_SYSTEMS'] = CCrmPaySystem::GetPaySystemsListItems($personTypeID); if ($entityID > 0) { $paySystemID = isset($arFields['~PAY_SYSTEM_ID']) ? intval($arFields['~PAY_SYSTEM_ID']) : 0; } elseif (!empty($arResult['PAY_SYSTEMS'])) { $paySystemID = $arFields['~PAY_SYSTEM_ID'] = $arFields['PAY_SYSTEM_ID'] = array_shift(array_keys($arResult['PAY_SYSTEMS'])); } //<-- PAY_SYSTEM // INVOICE_PROPERTIES --> $arFields['INVOICE_PROPERTIES'] = array(); $properties = CCrmInvoice::GetProperties($entityID, $personTypeID); if (!is_array($properties)) { $properties = array(); } if ($entityID === 0) { CCrmInvoice::__RewritePayerInfo($companyID, $contactID, $properties); } $arFields['INVOICE_PROPERTIES'] = $properties; $arResult['PAYER_REQUISITES'] = $personTypeID > 0 ? CCrmMobileHelper::PrepareInvoiceClientRequisites($personTypeID, $properties) : array(); //<-- INVOICE_PROPERTIES CCrmMobileHelper::PrepareInvoiceItem($arFields, $arParams, array('PAY_SYSTEMS' => $arResult['PAY_SYSTEMS'], 'INVOICE_PROPERTIES' => $properties), array('ENABLE_MULTI_FIELDS' => true, 'ENABLE_PAYER_INFO' => true, 'ENABLE_LOCATION' => true)); $arResult['ENABLE_LOCATION'] = $taxMode === 'EXT'; // PRODUCT_ROWS, TAX_INFOS, SUM_BRUTTO, SUM_NETTO --> $arResult['PRODUCT_ROWS'] = array(); if ($entityID > 0) { $rows = CCrmInvoice::GetProductRows($entityID); foreach ($rows as &$row) { $price = isset($row['PRICE']) ? round(doubleval($row['PRICE']), 2) : 0.0; $qty = isset($row['QUANTITY']) ? intval($row['QUANTITY']) : 0; $sum = $item['SUM'] = $price * $qty; $item = array('ID' => isset($row['ID']) ? intval($row['ID']) : 0, 'PRODUCT_ID' => isset($row['PRODUCT_ID']) ? intval($row['PRODUCT_ID']) : 0, 'PRODUCT_NAME' => isset($row['PRODUCT_NAME']) ? $row['PRODUCT_NAME'] : '', 'PRICE' => $price, 'QUANTITY' => $qty, 'SUM' => $sum, 'VAT_RATE' => isset($row['VAT_RATE']) ? round(doubleval($row['VAT_RATE']) * 100, 2) : 0.0);
if ($bTaxMode) { // PAYER LOCATION $sLocationHtml = ''; CModule::IncludeModule('sale'); $locValue = isset($arResult['ELEMENT']['PR_LOCATION']) ? $arResult['ELEMENT']['PR_LOCATION'] : ''; ob_start(); CSaleLocation::proxySaleAjaxLocationsComponent(array('AJAX_CALL' => 'N', 'COUNTRY_INPUT_NAME' => 'LOC_COUNTRY', 'REGION_INPUT_NAME' => 'LOC_REGION', 'CITY_INPUT_NAME' => 'LOC_CITY', 'CITY_OUT_LOCATION' => 'Y', 'LOCATION_VALUE' => $locValue, 'ORDER_PROPS_ID' => $arInvoiceProperties['FIELDS']['ID'], 'ONCITYCHANGE' => 'BX.onCustomEvent(\'CrmProductRowSetLocation\', [\'LOC_CITY\']);', 'SHOW_QUICK_CHOOSE' => 'N'), array("CODE" => "", "ID" => $locValue, "PROVIDE_LINK_BY" => "id", "JS_CALLBACK" => 'CrmProductRowSetLocation'), 'popup', true, 'locationpro-selector-wrapper'); $sLocationHtml = ob_get_contents(); ob_end_clean(); $arResult['FIELDS']['tab_1'][] = array('id' => 'LOCATION_ID', 'name' => GetMessage('CRM_FIELD_LOCATION'), 'type' => 'custom', 'value' => $sLocationHtml . '<div>' . '<span class="bx-crm-edit-content-location-description">' . GetMessage('CRM_FIELD_LOCATION_DESCRIPTION') . '</span>' . '</div>', 'required' => true); } // Rewrite payer information (invoice properties) from contact or company $companyId = intval($arResult['ELEMENT']['UF_COMPANY_ID']); $contactId = intval($arResult['ELEMENT']['UF_CONTACT_ID']); if (!$bEdit && !$bCopy && !$bCreateFromQuote && empty($arResult['ERROR_MESSAGE'])) { CCrmInvoice::__RewritePayerInfo($companyId, $contactId, $arInvoiceProperties); } if ($bCreateFromQuote && empty($arResult['ERROR_MESSAGE'])) { // Rewrite payer information from quote fields if ($companyId > 0) { foreach ($arInvoiceProperties as $propertyKey => $property) { if ($property['FIELDS']['PERSON_TYPE_ID'] == $personTypeId) { switch ($property['FIELDS']['CODE']) { case 'COMPANY': case 'COMPANY_NAME': // ua company name hack if (isset($arQuoteClientFields['CLIENT_TITLE'])) { $arInvoiceProperties[$propertyKey]['VALUE'] = $arQuoteClientFields['CLIENT_TITLE']; } break; case 'CONTACT_PERSON':