Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Компонент для ЛК клиента: список документов



в каждой сделке есть 2 доп поля:
"договор" типа файл (если несколько доков, то архив кладут)
"акт" типа файл (если несколько доков, то архив кладут)

Задача:
Вывести список доков клиента, которые клиент может скачать: договор, акт, счета (счета битриксовские используют)
компонент nikaverro:crm.document.list

component.php
UF_CRM_CONTRACT и UF_CRM_ACT  - это константы, в которых прописаны идентификаторы битриксовские доп полей, заданы в init.php
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
/**
 * @global \CMain $APPLICATION
 * @global \CUser $USER
 * @global \CDatabase $DB
 * @var \CUserTypeManager $USER_FIELD_MANAGER
 * @var \CBitrixComponent $this
 * @var array $arParams
 * @var array $arResult
 */

global $USER_FIELD_MANAGER, $USER, $APPLICATION, $DB;

$isErrorOccured = false;
$errorMessage = '';

if (!CModule::IncludeModule('crm'))
{
   $errorMessage = GetMessage('CRM_MODULE_NOT_INSTALLED');
   $isErrorOccured = true;
}

if(!$isErrorOccured){
   $arResult["CONTRACT"] = array();
   $arResult["DOCS"] = array();   
   if(is_object($USER)){   
       $rsUser = CUser::GetList($by, $order,
           array("ID" => $USER->GetID()),
           array(
               "SELECT" => array("ID","NAME","UF_CONTACT"),
           )
       );
       if($arUser = $rsUser->Fetch()){
           $companyId = $arUser["UF_CONTACT"];
           if(intval($companyId)>0){
              $arFilter = array("ID"=>intval($companyId),"CHECK_PERMISSIONS"=>"N");
             $arSelect = array("ID","TITLE", UF_COMPANY_CONTRACT);
             $rsCompany = CCrmCompany::GetList(Array(),$arFilter,$arSelect);
             if($arComp = $rsCompany->Fetch()){   
                if(isset($arComp[UF_COMPANY_CONTRACT]) && (intval($arComp[UF_COMPANY_CONTRACT])>0)){
                  $arResult["CONTRACT"] = array(                     
                     "FILE"=> CFile::GetFileArray($arComp[UF_COMPANY_CONTRACT])
                  );                  
               }
             } 
              $arFilter = array(   
               "CHECK_PERMISSIONS"=>"N",
               "COMPANY_ID" => $companyId,               
            );
            $arSelect = array("ID",UF_CRM_CONTRACT,UF_CRM_ACT);            
            $res = CCrmDeal::GetList(Array("ID"=>"ASC"), $arFilter, $arSelect);
            while($row = $res->Fetch()){
               if(isset($row[UF_CRM_CONTRACT]) && (intval($row[UF_CRM_CONTRACT])>0)){
                  $arResult["DOCS"][] = array(
                     "TYPE"=> "CONTRACT",
                     "DEAL_ID"=> $row["ID"],
                     "FILE"=> CFile::GetFileArray($row[UF_CRM_CONTRACT])
                  );                  
               }
               if(isset($row[UF_CRM_ACT]) && intval($row[UF_CRM_ACT])>0){
                  $arResult["DOCS"][] = array(
                     "TYPE"=> "ACT",
                     "DEAL_ID"=> $row["ID"],
                     "FILE"=> CFile::GetFileArray($row[UF_CRM_ACT])
                  );                     
               }               
            }
            $arFilter = array(   
               "CHECK_PERMISSIONS"=>"N",
               "UF_COMPANY_ID" => $companyId,                  
            );            
            $arSelect = array("ID","ORDER_TOPIC","PRICE","STATUS_ID","CANCELED","DATE_BILL","UF_DEAL_ID");   
            $res2 = CCrmInvoice::GetList($arOrder = Array("ID"=>"DESC"), $arFilter ,false, false, $arSelect);   
            while($row2 = $res2->Fetch()){
               $row2["LINK"] = CCrmInvoice::getPublicLink($row2["ID"]);
               $arResult["INVOICES"][] = $row2;   
            }
         }
      }
   }
   $this->IncludeComponentTemplate();
}
else{
   ShowError($errorMessage);
}
template.php
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();?>
<div class="documents-list">
   <div class="header-content ">
      <h1>Счета и договоры</h1>
   </div>

   <?if(isset($arResult["CONTRACT"])):?>
      <div class="row">
         <div class="col">
            <h2>Основной договор</h2>
            <a href="<?=$arResult["CONTRACT"]["FILE"]["SRC"]?>" target="_blank"><?=$arResult["CONTRACT"]["FILE"]["FILE_NAME"]?></a>
         </div>
      </div>
   <?endif;?>
   <?if(count($arResult["DOCS"])>0):?>
      <div class="row ">
         <div class="col">
            <h2>Договоры, приложения, акты, товарные накладные</h2>
         
            <?foreach($arResult["DOCS"] as $arDoc):?>            
               <div> 
                  <a href="<?=$arDoc["FILE"]["SRC"]?>" target="_blank" class="mr-3"><?=$arDoc["FILE"]["FILE_NAME"]?></a>
                  <?if($arDoc["DEAL_ID"]>0):?>
                     <a href="/client/orders/detail/?id=<?=$arDoc["DEAL_ID"]?>">сделка <?=$arDoc["DEAL_ID"]?></a>
                  <?endif;?>
               </div>
            <?endforeach;?>
         </div>
      </div>
   <?endif;?>
   <?if(count($arResult["INVOICES"])>0):?>
      <div class="row">
         <div class="col">
            <h2>Счета</h2>
            <?foreach($arResult["INVOICES"] as $arInvoice):?>   
               <div>            
                  <a href="<?=$arInvoice["LINK"]?>" target="_blank" class="">
                     Счет №<?=$arInvoice["ID"]?> от <?=$arInvoice["DATE_BILL"]?> на сумму <?=intval($arInvoice["PRICE"])?>руб.
                     <?if($arInvoice["UF_DEAL_ID"]>0):?>                        
                        ,</a> 
                        <a href="/client/orders/detail/?id=<?=$arInvoice["UF_DEAL_ID"]?>">сделка <?=$arInvoice["UF_DEAL_ID"]?></a> 
                        <a href="<?=$arInvoice["LINK"]?>" target="_blank" class="">
                     <?endif;?>
                  <?=str_replace(array("N","S", "P","D"), array("не оплачен","не оплачен","оплачен","отменен"), $arInvoice["STATUS_ID"])?></a>
               </div>         
            <?endforeach;?>   
            
         </div>
      </div>
   <?endif;?>
   <div class="row">
      <div class="col">
         <h2>Типовые договоры</h2>
         <div>
            <a href="/client/docs/Dogovor_na_pochasovoe_obsluzhivanie.docx" target="_blank" class="">Бланк договора на почасовое обслуживание</a>
         </div>
         <div>
            <a href="/client/docs/Dogovor_abonentskogo_obsluzhivania_Minimum.docx" target="_blank" class="">Бланк договора МИНИМУМ</a>
         </div>
         <div>
            <a href="/client/docs/Dogovor_Abonentskogo_obsluzhivania_Standart.docx" target="_blank" class="">Бланк договора СТАНДАРТ</a>
         </div>         
         <div>
            <a href="/client/docs/Dogovor_Abonentskogo_obsluzhivania_Maximum.docx" target="_blank" class="">Бланк договора МАКСИМУМ</a>
         </div>
      </div>
   </div>
</div>
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!