Как я могу удалить части моего списка, если это два раза один и тот же результат?

#freemarker

#freemarker

Вопрос:

Да, я хотел бы знать, как я могу предотвратить, чтобы вывод дважды отображал одну и ту же дату или один и тот же тип контракта. Кроме того, я не знаю, как я могу поставить запятую после последней даты / типа контракта…

На данный момент результат будет:

  • Площадь Алессии: 200 м2, 100 000 евро, Тип контракта: Ограниченный Начало контракта: 2000-01-01 / 2000-01-01 Окончание контракта: 2020-12-31 / 2020-12-31
  • Площадь за январь: 870 м2, 3 400 000 евро, Тип контракта: Ограниченный / неизвестный Начало контракта: 2001-01-09 / 2002-03-10 Окончание контрактов: 2025-12-31

Какой я хотел бы иметь результат:

  • Площадь Алессии: 200 м2, 100 000 евро, Тип контракта: Ограниченный, Начало контракта: 2000-01-01, Окончание контракта: 2020-12-31
  • Январь: 870 м2, 3 400 000 евро, Типы контрактов: Ограничено / Неизвестно, Начало контрактов: 2001-01-09 / 2002-03-10, Конец контрактов: 2025-12-31

Поэтому, если есть два раза одна и та же дата или один и тот же контракт, я хочу, чтобы это было только один раз в моем списке. Если он отличается, он должен отображать их все и в обоих случаях запятую за последним результатом списка. Если бы вы знали, как изменить заголовок в зависимости от того, идет ли за ним 0, 1 или две даты, это было бы потрясающе.

 <#assign translations = {
  "de": {
    "bbo": "Per {0}",
    "sqm":"m²",
    "contract00":"Vertragstyp:",
    "contract01":"Befristet",
    "contract02":"Unbefristet",
    "contract03":"Befristet mit echter Option",
    "contract04":"Befristet mit unechter Option",
    "contract05":"Amortisation Mieterausbau",
    "contract06":"Umsatzmiete",
    "contract07":"Andere",
    "contract08":"Unbekannt",
    "start00":"Vertragsstart:",
    "end00":"Vertragsende"
    },
    
    "en":{
    "bbo": "Per {0}",
    "sqm":"m²",
    "contract00":"Contract type:",
    "contract01":"Limited",
    "contract02":"Unlimited",
    "contract03":"Limited with real option",
    "contract04":"Limited with unreal option",
    "contract05":"Amortisation Mieterausbau",
    "contract06":"Umsatzmiete",
    "contract07":"Other",
    "contract08":"Unknown",
    "start00":"Start of contract:",
    "end00":"End of contract:"
    }
}>
 
<br>
 
<#assign msg = translations[.lang]>
<#assign currency = valuation.valuationSettings.valuationCurrency>
 
<#assign rentalUnits = valuation.draftRul.rentalUnits>
<#assign rentalUnitsWithTenant = []>
    <#list rentalUnits as ru>
        <#if ru.currentLease?? amp;amp;  ru.currentLease.tenant?? >
            <#assign rentalUnitsWithTenant =  rentalUnitsWithTenant   [ru]>
        </#if>
    </#list>
 
<#assign rentalUnitsByTenant = groupBy(rentalUnitsWithTenant, "currentLease.tenant")>
<ul>
<#list rentalUnitsByTenant?keys?sort as tenant>
    <#assign rentalUnitsOfTenant = rentalUnitsByTenant[tenant]>
    <#assign area=sum(rentalUnitsOfTenant, "areaPerUnitValue")>
    <#assign income = sum(rentalUnitsOfTenant, "currentLease.income.income")>
    <#assign units = sum(rentalUnitsOfTenant, "units")>
    <#if income gte 100000>
        <li>
        ${tenant}: ${area} ${msg["sqm"]}, ${currency} ${income?string[",##0"]},
           
            ${msg["contract00"]}
            <#list rentalUnitsOfTenant as ru>
                
                <#if ru.currentLease??>
                    <#if ru.currentLease.contractType= "LIMITED">
                        <#assign contract = msg["contract01"]>
                        <#elseif ru.currentLease.contractType="UNLIMITED">
                        <#assign contract = msg["contract02"]>
                        <#elseif ru.currentLease.contractType="LIMITED_WITH_REAL_OPTION">
                        <#assign contract = msg["contract03"]>
                        <#elseif ru.currentLease.contractType="LIMITED_WITH_UNREAL_OPTION">
                        <#assign contract = msg["contract04"]>
                        <#elseif ru.currentLease.contractType="AMORTISATION">
                        <#assign contract = msg["contract05"]>                        
                        <#elseif ru.currentLease.contractType="UMSATZMIETE">
                        <#assign contract = msg["contract06"]>
                        <#elseif ru.currentLease.contractType="OTHER">
                        <#assign contract = msg["contract07"]>                    
                        <#elseif ru.currentLease.contractType="UNKNOWN">
                        <#assign contract = msg["contract08"]>                    
                    </#if>
                    
                    ${contract}<#sep>/</#sep>
                    
                </#if>
            </#list>
           
         ${msg["start00"]}
            <#list rentalUnitsOfTenant as ru>
                <#if ru.currentLease??>
                    ${ru.currentLease.start!}<#sep>/</#sep>
                </#if>
            </#list>
            
            
           Enddaten:
            <#list rentalUnitsOfTenant as ru>
                <#if ru.currentLease.end??>
                    ${ru.currentLease.end!}<#sep>/</#sep>
                </#if>
            </#list>
        
        
        </li>
    </#if>
</#list>
</ul>  

Если у вас есть решение для одного из моих вопросов, я уже благодарен.

Ответ №1:

Попробуйте создать уникальный список перед печатью значений, это может быть что-то вроде примера ниже. Ключевым моментом является метод seq_contains.

  <#assign uniqueList = []>
 <#list rentalUnitsOfTenant as ru>

    <#if ru.currentLease??>
        <#if ru.currentLease.contractType= "LIMITED">
            <#assign contract = msg["contract01"]>
            ...                  
        </#if>
        <#if !uniqueList?seq_contains(contract) >
            <#assign uniqueList =  uniqueList   [contract]>
        </#if>
    </#if>
</#list>
 <#list uniqueList as contract>
     ${contract}<#sep>/</#sep>
 </#list>