Příklady podmínek

Last modified by Jan Šimeček on 2024/09/02 10:47

Obecné podmínky na dílo, svazek, čtenáře

Popis podmínkyPodmínka FOX/SQLPodmínka v TQL - Tritius Query LanguagePodmínkaSQLAutomatický převod
Titulová podmínka na druh dokumentu kromě AV Mediadruhdoku<>'AV'workTypeId <> -7  
 tsign like 'TK%' or tsign like 'DH%'workLocMark STARTS IN ('TK', 'DH')  
 druhdoku='AV' and tsign not like 'DVDB%'workTypeId = -7 AND workLocMark NOT STARTS 'DVDB'  
Svazková podmínka na kategorii (kategorie<>N)kategorie<>'N'itemBorrowCategoryExternalId IS NULL OR itemBorrowCategoryExternalId <> 'N' Ano
Svazková kategorie jeinlist(kategorie,'N','L')itemBorrowCategoryId IN (4, 1)  
Čtenářská podmínka (kategorie=I) 

userCategoryCode = 'I'

nebo

userCategoryId IN (201, 310, 311, 308)

  
Svazková podmínka (lokace in) itemLocationExternalId IN ('501H', '501H1', '501H2')i.location in (1,4,6) 
  itemLocationId IN (40, 29, 43, 39, 42, 1)  
Svazková podmínka na signaturusign in ('M PK','IS','BI','PE','NA','KA','RE','EK','PK','OS')itemLocMarkValueShow IN ('M PK', 'IS', 'BI', 'PE', 'NA', 'KA', 'RE', 'EK', 'PK', 'OS')  
Titulová podmínka druh dokumentu (v tomto případě MVS itemType = 'ILS'  
Poznámka začíná textempoznamka='Novink'itemNote STARTS 'Novink'  
Podmínka prezenčnosti posledního čísla periodika 

workTypeId = -8

Poslední čísla periodik: 1

  
Čtenářská podmínka (do 15 let)DekodVek(rcislo)<15userAge < 15 Ano
Do 27 let a profese student userAge < 27 AND userProfessionId = -8  
Signatura začíná itemLocMarkValueShow STARTS 'PK'lm.value_show like "PK%" 
Povolání důchodce userProfessionId = -2  
Povolání Důchodce, Student nebo V domácnostiinlist(prof,'d','s','V')userProfessionId IN (-2, -8, -11)  
Škola (id 3)skola='b'userSchoolId = 3  
Domovské oddělení čtenáře je (kde="D"); userDefaultDepartmentShortcut = 'D'  

Signatura  je (sign in ('PK','RR','S','X')

 

 itemLocMarkValueShow STARTS IN ('PK', 'RR', 'S', 'X')  
Kategorie X, M nebo ccislo > 9999799inlist(kategorie,'X','M') or ccislo>9999799userCategoryCode IN ('X', 'M') OR userReaderNumberValue > 9999799 Ano
Kategorie I, Ninlist(kategorie,'I','N')userCategoryCode IN ('I', 'N') Ano
 DekodVek(rcislo)<15userAge < 15 Ano
 DekodVek(rcislo)<16userAge < 16 Ano
 prof='s'userProfessionId = -8 Ano
 prof='d'userProfessionId = -2 Ano
 druhdoku='AV'workTypeId = -7 Ano
 druhdoku='PE'workTypeId = -8 Ano
 druhdoku='VS'itemType = 'ILS' Ano
 druhdoku<>'AV' and druhdoku<>'VS'workTypeId <> -7 AND itemType <> 'ILS' Ano
 sign like 'BIS%'itemLocMarkValueShow STARTS 'BIS' Ano
 sign in ('BIS')itemLocMarkValueShow = 'BIS'  
 lokace in ('BIS','PK')itemLocationExternalId IN ('BIS', 'PK') Ano
 lokace not like '%m%'itemLocationCode NOT CONTAINS 'm'  
 sign like '%H'itemLocMarkValueShow ENDS 'H'  
 kategorie='M'userCategoryCode = 'M' Ano
 kategore <> MuserCategoryCode IS NULL OR userCategoryCode <> 'M'  
 lokace<>'HO' and kategorie<>'N'itemLocationCode <> 'HO' AND (itemBorrowCategoryExternalId IS NULL OR itemBorrowCategoryExternalId <> 'N')  
Čtenář starší 70 letDekodVek(rcislo)>=70userAge >= 70  
Podmínka kategorie operací pro AV médiadruhdoku='AV' and nosic='CD'workTypeId = -7 AND workMedium STARTS 'CD' Ano
Podmínka webové definiceS.kategorie<>'*' and S.lokace not in ('VF')itemType <> 'ILS' AND itemLibraryId = 1 AND itemLocationId <> 3 AND (itemBorrowCategoryId IS NULL OR itemBorrowCategoryId <> 3)  
Podmínka prohledávaných oblastíS.lokace in ('DOSP')itemLocationCode = 'DOSP'  
-- dtto --S.lokace='M'itemLocationCode = 'M'  
-- dtto --S.lokace='HUD'itemLocationCode = 'HUD'  
 cena>=700itemPrice >= 700.0  
Poslední návštěva pod čtenáře.
Nastavení - Vlastní informace
 UserVisit lastUserVisit = userVisitService.loadLastVisit(reader, department, now);  
Registrace do

Nastavení - Vlastní informace

 

if (charge != null) {

            result += ", " + readerContainer.translate("Reg_until") + ": " + DateHelper.formatDate(charge.getDateTo());

        }

  
Cena svazku je větší než 500 itemPrice > 500return item.getPrice() != null && item.getPrice().compareTo(new java.math.BigDecimal(500)) > 0; 
tematika =tematika='6'itemThematicGroupId IS NULL OR itemThematicGroupId = 3return item.getThematicGroup() == null || item.getThematicGroup().getId().equals(3L)
Nevyplněná adresa čtenáře s vyloučenými kategoriemi a čtenářské číslo menší než 9999000(tulice=' ' or tmesto=' ' or tpsc=' ') and  !inlist(kategorie,'h','M','X') and ccislo < 9999000 (userStreetNumberPermanent = '' OR userCityPermanent = '' OR userPostNumberPermanent = '')
AND (userCategoryCode IS NULL OR userCategoryCode NOT IN ('h', 'M', 'X'))
AND userReaderNumberValue < 9999000
return (user.getStreetNumberPermanent().isEmpty() || user.getCityPermanent().isEmpty() || user.getPostNumberPermanent().isEmpty())
&& !((user.getCategory() != null && user.getCategory().getCode().equals("h")) || (user.getCategory() != null && user.getCategory().getCode().equals("M")) || (user.getCategory() != null && user.getCategory().getCode().equals("X")))
&& (user.getReaderNumber() != null && user.getReaderNumber().getValue() < 9999000);
Nevyplněná občanka u čtenářů starších 15 let s vyloučenými kategoriemi a čtenářské číslo menší než 9999000obcanka=' ' and DekodVek(rcislo)>=15 and !inlist(kategorie,'M','h','X') and ccislo < 9999000 userIdentityCardNumber IS NULL
AND userAge >= 15
AND (userCategoryCode IS NULL OR userCategoryCode NOT IN ('h', 'M', 'X'))
AND userReaderNumberValue < 9999000
return !(user.getIdentityCardNumber() != null)
&& (user.getAge(now) != null && user.getAge(now) >= 15)
&& !((user.getCategory() != null && user.getCategory().getCode().equals("h")) || (user.getCategory() != null && user.getCategory().getCode().equals("M")) || (user.getCategory() != null && user.getCategory().getCode().equals("X")))
&& (user.getReaderNumber() != null && user.getReaderNumber().getValue() < 9999000);

Podmínka na aktuální datum a čas.

2.3.2020 00:00:00 - 6.3.2020 23:59:59

  boolean afterStart =cz.effectiva.tritius.shared.DateHelper.parse("2.3.2020 00:00:00", "dd.MM.yyyy HH:mm:ss").compareTo(now) <= 0;
boolean beforeEnd = cz.effectiva.tritius.shared.DateHelper.parse("6.3.2020 23:59:59", "dd.MM.yyyy HH:mm:ss").compareTo(now) >= 0;
return afterStart && beforeEnd;
Podmínka pro anonymní vracení, kdy svazek není půjčený userId = -147return user.getId() != null && user.getId() == -147;
Podmínka pro více čtenářských čísel userReaderNumberValue IN (9999967, 7980, 7981, 7982, 7983, 7984)return userResult.getUser().getReaderNumber() != null
&& java.util.Arrays.asList(9999967L, 7980L, 7981L, 7982L, 7983L,7984L).contains(userResult.getUser().getReaderNumber().getValue());
Pravidlo registrací na určité datum, rozsah datumů nebo rozsah časů currentDate = '14.02.2022' OR currentDate BETWEEN ('01.03.2022', '31.03.2022') OR currentTime BETWEEN ('16:00', '17:00')return user.isDate("14.02.2022") || user.isBetweenDate("01.03.2022", "31.03.2022") || user.isTimeBetween("16:00", "17:00");
Svazek je starší než dva roky itemDateCreated <= nowAddMonths(-24)return item.isOlderThan("dateCreated", 2, 0, 0);
Čtenář má 2 a více e-knih (výpůjčka 3. a další e-knihy) ze sklízeného zdroje ID -3, -4 za posledních 31 dní.Poslední návštěva pod čtenáře. 

// Titulová podmínka
workTypeId = -31

// Čtenářská podmínka
userElectronicBorrowingsCount(31, -3, -4) >= 2

// Titulová podmínka
return work.isInWorkType(-31L);

// Čtenářská podmínka
return getElectronicBorrowingsCount(user, department, now, 31, -3L, -4L) >= 2;

Čtenář má 2 a více e-knih (výpůjčka 3. a další e-knihy) ze sklízeného zdroje ID -3 a -4 za aktuální kalendářní měsíc. 

// Titulová podmínka
workTypeId = -31

// Čtenářská podmínka
userElectronicBorrowingsCurrentMonthCount(-3, -4) >= 2

// Titulová podmínka
return work.isInWorkType(-31L);

// Čtenářská podmínka
return getElectronicBorrowingsCurrentMonthCount(user,  department, now, -3L, -4L) >= 2;

Každá výpůjčka e-knihy ze sklízeného zdroje ID -3 a -4 za posledních 31 dní. 

// Titulová podmínka
workTypeId = -31

// Čtenářská podmínka
userElectronicBorrowingsCount(31, -3, -4) >= 0

// Titulová podmínka
return work.isInWorkType(-31L);

// Čtenářská podmínka
return getElectronicBorrowingsCount(user, department, now, 31, -3L, -4L) >= 0;

Čtenář má dohromady 2 a více e-knih nebo audioknih (výpůjčka 3. a dalšího e-dokumentu) ze sklízeného zdroje ID -6 za posledních 31 dní. 

// Titulová podmínka
workTypeId IN (-31, -32)

// Čtenářská podmínka
userElectronicBorrowingsCount(31, -6) >= 2

 
Kontrola abecedy na regálech v revizi // V revizi je potřeba povolit použítí regálů
// Pro každé písmeno abecedy je potřeba vytvořit vlastní regál
// Titulová podmínka
workAuthorShow STARTS 'A' OR (workAuthorShow = '' AND workTitleShow STARTS 'A')
// V revizi je potřeba povolit použítí regálů
// Pro každé písmeno abecedy je potřeba vytvořit vlastní regál
// Titulová podmínka
return work.getAuthorShow() != null && !work.getAuthorShow().isEmpty() ? work.getAuthorShow().startsWith("A") : work.getTitleShow().startsWith("A");
Dílo/svazek má přiřazený alespoň jeden z uvedených štítků (zadává se ID štítku) 

// Titulová podmínka
workHasAnyLabelIds(5, 8)

// Svazková podmínka
itemHasAnyLabelIds(5, 8)

 
Dílo/svazek má přiřazené všechny uvedené štítky (zadává se ID štítku) 

// Titulová podmínka
workHasAllLabelIds(3, 6)

// Svazková podmínka
itemHasAllLabelIds(3, 6)

 
 

SQL podmínky (na díla, svazky, ...)

  • Používají se u některých definic.
    • Např. prohledávané oblasti, webové definice, revize, ...
  • Takto zadané podmínky musí jít transformovat:
    1. Do ujormu - používá používá jiné aliasy než se zadávají v podmínkách.
    2. Do javy - svazky/díla se načítají hromadně a pak se teprve vyhodnocuje, zda patří/nepatří k dané definici (revizi, oblasti apod.).
  • SQL konstrukce tedy nejsou podporovány automaticky, ale musí se pro ně podpora programovat → ne každé SQL jde vždy použít!

Podmínky na čas

  • Může být potřeba omezit např. revizi jen na nové/staré svazky - do svazková podmínka omezená pod data vytvoření.
  • Příklad: i.date_created < '2015-06-15'
  • Časové podmínky podporují tyto operátory: 
    • =, <. <=, >, >=.
  • Jdou podporovány následující formáty datumu:
    • '2020-03-26'
    • '2020-03-26 14:50:00'
    • '2020-03-26 14:50:00.000'
       
  • Pokud bude použit jiný operátor nebo formát datumu, nebude SQL podmínka validní, popř. nemusí fungovat správně!

Pravidla akcí - Změny před/po akci

PopisTQL - Tritius Query Language před akcí od verze 6.1.0TQL - Tritius Query Language po akci od verze 6.1.0JAVA podmínka před akcíJAVA podmínka po akciPoznámka
Přepůjčení svazku čtenáři s id = 1  skipReservations(params);borrowToReader(1L, item, department, now);Od verze 1.22.0
Přepůjčení svazku čtenáři s id = 1 pokud neexistuje rezervace   borrowToReaderIfNotReserved(1L, item, department, now);Od verze 1.28.0
Změna kategorie svazku po vrácení   item.setBorrowCategory(serviceProvider.getBorrowCategoryService().load(1102L));-
Změna lokace svazku po vrácení   item.setLocation(serviceProvider.getLocationService().load(1L));-
Změna lokace a vlastnící lokace svazku po vrácení   

item.setLocation(serviceProvider.getLocationService().load(245L));

item.setLocationOwner(serviceProvider.getLocationService().load(245L));

-
PopisTQL - Tritius Query LanguageJAVA podmínkaPoznámka
Čtenářská podmínka, zda má čtenář platnou registraci na oddělení, na které přichází. cz.effectiva.tritius.server.ao.contexts.ServiceContext context = cz.effectiva.tritius.utils.UserContext.createCurrentContext(now); cz.effectiva.tritius.server.usecase.registration.CheckRegistrationRequest request = cz.effectiva.tritius.server.usecase.registration.CheckRegistrationRequest.lastEndingActiveOf(userResult.getUser(), department, context); return serviceProvider.getRegistrationService().checkRegistration(request).isHasActiveRegistration();-
Čtenářská podmínka, zda má čtenář platnou registraci na oddělení id=123. cz.effectiva.tritius.server.ao.contexts.ServiceContext context = cz.effectiva.tritius.utils.UserContext.createCurrentContext(now); department = serviceProvider.getDepartmentService().load(123L); cz.effectiva.tritius.server.usecase.registration.CheckRegistrationRequest request = cz.effectiva.tritius.server.usecase.registration.CheckRegistrationRequest.lastEndingActiveOf(userResult.getUser(), department, context); return serviceProvider.getRegistrationService().checkRegistration(request).isHasActiveRegistration();-

 
Automatické přepůjčení na karanténu

https://confluence.tritius.cz/download/attachments/35815451/image2021-3-23_12-8-7.png?version=1&modificationDate=1616497688000&api=v2

Dispečink internetu

Popis příkazuPodmínka v TQL - Tritius Query LanguageJava podmínkaPoznámka
Podmínka na konkrétního uživateleuserReaderNumberValue= 644return (userResult != null && userResult.getUser() != null && userResult.getUser().getReaderNumber() !=null) ? userResult.getUser().getReaderNumber().getValue().equals(644L) : false; 

Vlastní informace

Používá se FreeMarker. Viz Google a psaní podmínek.

PopisKódNáhled

Čtenářské číslo; - Jméno čtenáře

Datum narození; Datum poslední návštěvy; - Počet čekajících rezervací a odložení; - Text z kolonky POZOR

<#if container.getBirthdate()??>
${container.getBirthdate()?datetime?string('dd.MM.yy')}
</#if>

${container.getInfoLastVisit()}

<#if container.getWaitingRequestsCount()!=0>
<font color="red"> - ${container.translate("Waiting_reservations/retrievals")} - ${container.getWaitingRequestsCount()}</font>
</#if>

<#if container.hasCautionNote()>
- <font color="red"> ${container.getCautionNote()}</font>
</#if>

https://confluence.tritius.cz/download/attachments/35815451/image2019-9-3%209%3A29%3A14.png?version=1&modificationDate=1567495748000&api=v2

Čtenářské číslo; - Jméno čtenáře

Věk čtenáře; @ pokud má čtenář vyplněný email; Datum poslední návštěvy; Datum konce registrace

<#if container.getAgeFormated()??>
Věk: ${container.getAgeFormated()}
</#if>
${container.getInfoMailLastVisitEndingRegistration()}

https://confluence.tritius.cz/download/attachments/35815451/image2019-9-3%209%3A33%3A56.png?version=1&modificationDate=1567496030000&api=v2

Čtenářské číslo; - Jméno čtenáře

Počet čekajících rezervací a odložení; Datum poslední návštěvy; Datum konce registrace

<#if container.getWaitingRequestsCount()!=0>
<font color="red">${container.translate("Waiting_retrievals")}: ${container.getWaitingRequestsCount()}
</font>
</#if>

${container.getInfoMailLastVisitEndingRegistration()}

https://confluence.tritius.cz/download/attachments/35815451/image2019-9-3%209%3A37%3A5.png?version=1&modificationDate=1567496219000&api=v2

Čtenářské číslo; - Jméno čtenáře

@ pokud má čtenář vyplněný email; Datum poslední návštěvy; Datum konce registrace (zeleně pokud platí, červeně pokud již skončila)

${container.getInfoMailLastVisit()}
<#if container.isRegistrationExpired() && container.loadLastEndingRegistrationCharge()??>
<font color="red">${container.loadLastEndingRegistrationCharge()?string("dd.MM.yyyy")}</font>
</#if>
<#if container.isRegistrationExpired()==false && container.loadLastEndingRegistrationCharge()??>
<font color="green">${container.loadLastEndingRegistrationCharge()?string("dd.MM.yyyy")}</font>
</#if>

https://confluence.tritius.cz/download/attachments/35815451/image2019-9-6%2011%3A1%3A21.png?version=1&modificationDate=1567760475000&api=v2

Čtenářské číslo; - Jméno čtenáře

@ pokud má čtenář vyplněný email; Datum poslední návštěvy; Datum konce registrace (zeleně pokud platí, červeně pokud během 31 dní vyprší)

${container.getInfoMailLastVisit()}

<#if container.getWaitingRequestsCount()!=0>
<font color="red"> - ${container.translate("Waiting_reservations/retrievals")} - ${container.getWaitingRequestsCount()}</font>
</#if>

<#if container.loadLastEndingRegistrationCharge()?? >
Reg. do:
<#if container.loadLastEndingRegistrationCharge()?long lt .now?long + (31 * 86400000) >
<font color="red">
<#else>
<font color="green">
</#if>
${container.loadLastEndingRegistrationCharge()?string("dd.MM.yyyy")}</font>
</#if>

https://confluence.tritius.cz/download/attachments/35815451/snimek-vlastni-info.png?version=1&modificationDate=1602765335000&api=v2

Věk obarvený podle let. Nad 15 (a zároveň) červený, pod 15 modrý. <#if container.getAgeFormated()??>
  <#if container.getAgeFormated()?number gte 15>
    Věk: <font color="red"> ${container.getAgeFormated()}</font>
  <#else>
    Věk: <font color="blue"> ${container.getAgeFormated()}</font>
  </#if>
</#if>
 

Rozpis počtu čekajících objednávek čtenáře.

Jednotlivé typy objednávek se oddělují lomenem.

Odložení z poličky a objednávky ze skladu sčítá dohromady.

Daný typ se zobrazuje pouze pokud pro daný typ existuje alespoň jedna čekající objednávka.

 

${container.getInfoMailLastVisit()}

<#if (container.getWaitingRequestsCount() != 0 ||
container.getInsertedBoxRetrievalRequestsDepartmentCount() != 0)>
    <font color="red"> - Ček.

    <#if container.getWaitingReservationCount() != 0>
        rez. ${container.getWaitingReservationCount()}
    </#if>

    <#if (container.getWaitingShelfRetrievalRequestsDepartmentCount() != 0 ||
    container.getWaitingStackRetrievalRequestsDepartmentCount() != 0)>
        <#if container.getWaitingReservationCount() != 0> / </#if>
        odl. ${(container.getWaitingShelfRetrievalRequestsDepartmentCount() +
        container.getWaitingStackRetrievalRequestsDepartmentCount())}
    </#if>

    <#if container.getInsertedBoxRetrievalRequestsDepartmentCount() != 0>
        <#if (container.getWaitingReservationCount() != 0 ||
        container.getWaitingShelfRetrievalRequestsDepartmentCount() != 0 ||
        container.getWaitingStackRetrievalRequestsDepartmentCount() != 0)> / </#if>
        box ${container.getInsertedBoxRetrievalRequestsDepartmentCount()}
    </#if>

    <#if container.getWaitingIlsDepartmentCount() != 0>
        <#if (container.getWaitingReservationCount() != 0 ||
        container.getWaitingShelfRetrievalRequestsDepartmentCount() != 0 ||
        container.getWaitingStackRetrievalRequestsDepartmentCount() != 0 ||
        container.getInsertedBoxRetrievalRequestsDepartmentCount() != 0)> / </#if>
        MVS ${container.getWaitingIlsDepartmentCount()}
    </#if>

    </font>
</#if>

https://confluence.tritius.cz/download/attachments/35815451/image2024-3-14_13-23-44.png?version=1&modificationDate=1710419025000&api=v2

Zobrazuje upozornění, že má čtenář dnes narozeniny nebo svátek.

<#if container.hasBirthday()>
    <font color="red"> - narozeniny</font>
</#if>

<#if container.hasNameDay()>
    <font color="red"> - svátek</font>
</#if>

https://confluence.tritius.cz/download/attachments/35815451/image2024-3-14_13-37-46.png?version=1&modificationDate=1710419867000&api=v2

Výchozí stav ( mail, posl. návštěva, svátek, čekající rez./odl. ) + věk různobarevný podle hranice 15let

  • použito v Domažlice

${container.getInfoMailLastVisit()} <#if container.hasNameDay()>     <font color="red"> - ${container.translate("has_nameday_today")}.</font> </#if> <#if container.getWaitingRequestsCount()!=0>     <font color="red"> - ${container.translate("Waiting_reservations/retrievals")} - ${container.getWaitingRequestsCount()}</font> </#if>

<#if container.getAgeFormated()??>
  <#if container.getAgeFormated()?number gte 15>
    Věk: <font color="#95954A"> ${container.getAgeFormated()}</font>
  <#else>
    Věk: <font color="blue"> ${container.getAgeFormated()}</font>
  </#if>
</#if>

 

Mail, posl. návštěva, končící registrace , povolání, vzdělání, škola, svátek a čekající rez./odl.

  • použito v Chotěboř

${container.getInfoMailLastVisitEndingRegistration()}
<#if container.hasProfession()>
    <font color="green">${container.getProfession()}</font>
</#if>
<#if container.hasEducationLevel()>
    <font color="orange">${container.getEducationLevel()}</font>
</#if>
<#if container.getSchool()??>
    <font color="yellow">${container.getSchool()}</font>
</#if>
<#if container.hasNameDay()>     <font color="red"> - ${container.translate("has_nameday_today")}.</font> 
</#if> <#if container.getWaitingRequestsCount()!=0>     <font color="red"> - ${container.translate("Waiting_reservations/retrievals")} - ${container.getWaitingRequestsCount()}</font> </#if>

 

 

Mail, posl. návštěva, vzdělání, povolání, svátek, čekající rez./odl.

  • použito v UNYP
${container.getInfoMailLastVisit()} 
<#if container.hasEducationLevel()>
    <font color="orange">${container.getEducationLevel()}</font>
</#if>
<#if container.hasProfession()>
    <font color="green">${container.getProfession()}</font>
</#if>
<#if container.hasNameDay()>     <font color="red"> - ${container.translate("has_nameday_today")}.</font> </#if> <#if container.getWaitingRequestsCount()!=0>     <font color="red"> - ${container.translate("Waiting_reservations/retrievals")} - ${container.getWaitingRequestsCount()}</font> </#if>