Assety
Definice assetu (JSON)
Vytvoření definice assetu se nachází v Technické → Definice assetu (role admin). Výběr organizace pro kterou se definice vytváří je pak součást toho portletu definice.
|
JSON obsahuje část s fixními atributy (name a number) a část s volitelnými atributy, viz ukázka níže. |
|
Každý asset může automaticky mít fotografii. Nyní se nastavuje jako atribut s vlastností |
Existující JSON je možné editovat za běhu.
Dostupné zákaznické jsony najdete v adresáři assets-json.
Ukázkový JSON
{
"nameLabel": "Jméno psa", (1)
"numberLabel": "Číslo zápisu", (2)
"fontIcon": "fa fa-dog", (3)
"name": "Pes", (4)
"singular": "Pes", (4)
"plural": "Psi", <4>,
"attributes": [
{
"name": "Klubové číslo", (5)
"type": "TEXT", (6)
"title": "Klubové číslo psa", (8)
"placeholder": "POZOR vyplňujte bez mezer!" (9)
},
{
"name": "Datum narození", (5)
"type": "DATE" (6)
},
{
"name": "Uchovněný", (5)
"type": "SELECT", (6)
"options": [ (7)
"-",
"Ano",
"Ne"
],
"hiddenOptions":["-"], (15)
"coloredOptions":[{
"hex":"#FF0000",
"options":["Ano"]
}] (16)
},
{
"name": "Matka", (5)
"type": "RELATIONSHIP" (6)
},
{
"name": "Otec", (5)
"type": "RELATIONSHIP" (6)
},
{
"name": "Zdraví",
"type": "STRUCTURED", (6)
"subAttributes": [ (12)
{
"name": "Tlak",
"type": "TEXT"
},
{
"name": "Tep",
"type": "NUMBER"
},
{
"name": "Datum posledního očkování",
"type": "DATE"
},
{
"name": "Očkováný na",
"type": "SELECT_MULTI",
"options": ["Škytavka", "Pěnivka"]
},
{
"name": "Obecně zdravý",
"type": "BOOLEAN"
},
{
"name": "Společně očkován s",
"type": "RELATIONSHIP"
}
]
"hiddenAttributes":[]
},
{
"name": "Historie očkování",
"type": "REPEATED", (6)
"repeatedAttribute": { (13)
"type": "STRUCTURED",
"subAttributes": [
{
"name": "Datum",
"type": "DATE"
},
{
"name": "Vakcína",
"type": "SELECT_MULTI",
"options": ["Covid","Vzteklina"]
}
]
}
},
{
"name": "Průkazy v PDF",
"type":"FILE_ENTRIES" (6)
},
{
"name": "Chovatelská stanice",
"type":"MEMBER_REFERENCE" <6>,
"memberSectionType": "PERSON"
},
{
"name": "Fotografie",
"type": "FILE_ENTRIES", (6)
"position": "PRIMARY_PICTURE" (17)
},
{
"name": "Počet zubů",
"type": "INTEGER" (6)
},
{
"name": "Výška",
"type": "NUMBER", (6)
"coloredOptions": [
{
"hex": "#ff0000",
"options": [
"25.0:999.0"
]
}
] (16)
},
],
"attributesConditionsInCards": [ (18)
{
"conditions": {
"Jméno": "abc"
},
"alwaysAdded": true,
"attributes": []
},
],
"attributesVisibleInCards" : [
"visibleByActive": [],
"visibleByNotActive": [],
"visibleByRelatedMember": [],
"visibleByQuest": []
], (14)
"groups": [], (10)
"forms": { (11)
"MS_ASSET_SYNC":[],
"MS_MEMBER_DETAIL":[],
"MS_ASSET_LIST_ADD":[],
"CS_MEMBER_CARD_ADD":[],
"MS_ASSET_DETAIL_EDIT"[
{
"name": "Vykoš",
"fields": [
"Datum narození"
],
"requiredFields": [],
"conditions": {
"Datum narození":"0:1721109029000" (19)
}
}
],
"CS_MEMBER_CARD_EDIT":[],
"MS_ASSET_LIST_BULK_EDIT":[]
}
}
| 1 | Label pro popis textového atributu Name |
| 2 | Label pro popis textového atributu Number |
| 3 | Ikona - zobrazují se v některých dialozích |
| 4 | Názvy assetu - zobrazují se v některých dialozích nebo tlačítkách |
| 5 | Vlastnost name - label custom atributu |
| 6 | Vlastnost type- typ custom atributu
|
| 7 | Vlastnost options - definice nabízených hodnot pro výběr v SELECT a SELECT_MULTI. |
| 8 | Vlastnost title - tooltip s rozšířenou informací. Nepoužije se u typu atributu RELATIONSHIP |
| 9 | Vlastnost placeholder - zástupný text, který se zobrazí v poli formuláře. Nepoužije se u typu atributu SELECT, SELECT_MULTI, RELATIONSHIP |
| 10 | Skupiny - rozdělení atributů do skupin |
| 11 | Formuláře - umístění atributů do formulářů |
| 12 | Typ STRUCTURED podporuje stejně definované typy v subAttributes jako na top level úrovni. Nepodporuje: strukturovaný ve strukturovaném, opakovaný uvnitř strukturovaného. Pozor opakovaný strukturovaný atribut podporován je.
|
| 13 | Typ REPEATED do repeatedAttribute se píše definice jako v top level úrovni, ale bez jména. Nepodporujeme: Opakovaný opakovaného. |
| 14 | Seznam názvů atributů, které se zobrazují v kartě assetu. Název a číslo se zobrazují vždy a nejde konfigurovat jejich pořadí. Pořadí závisí prvně na skupinách, následně na tomto seznamu.
Seznamy se dělí do 4 typů:
|
| 15 | Vlastnost hiddenOptions - definice hodnot, které se nezobrazí a tím způsobí skrytí i daného atributu v ČS|Kartě assetu a MS|Detail assetu. V rámci
formulářů jsou hodnoty stále k dispozici. V rámci tabulek se daná hodnota nevykreslí.
Tato vlastnost je u atributu nepovinná.
Definováno u typů:
|
| 16 | Vlastnost coloredOptions - definice pole takových hodnot, které jsou při vykreslení zabarveny. Skládá se ze seznamu hodnot options a barvy v hex kódu hex (nutný "#").
Tato vlastnost je u atributu nepovinná.
Definováno u typů:
|
| 17 | Vlastnost position - u typu FILE_ENTRIES definuje pozici fotky v ČS|Kartě assetu a MS|Detail assetu.
Tato vlastnost je u typu FILE_ENTRIES nepovinná.
Nabývá dvou hodnot:
|
| 18 | attributesConditionsInCards Viditelnost atributů podle podmínky. Pokud daný asset splňuje podmíku, kombinují se vybrané atributy se seznamem viditelné na kartě assetu.
Struktura se skládá z:
|
| 19 | forms - "conditions" Viditelnost formuláře podle podmínky. Pokud daný asset splňuje podmínku, filtrují se seznamy formulářů. Týká se pouze formulářů pro editaci jednoho assetu
(MS_MEMBER_DETAIL, MS_ASSET_DETAIL_EDIT, CS_MEMBER_CARD_EDIT)
Struktura se skládá z: |
Pokud je hodnota atributu prázdná (hodnota je "" nebo není vyplněna) tak se v ČS|Kartě assetu a MS|Detail assetu atribut nezobrazí. Ve formulářích jsou tyto atributy stále dostupné.
|
U typu FILE_ENTRIES s definovanou pozicí - se vždy vybírá první obrázek v hodnotách atributu (pokud soubor není správného typu (.jpg, .jpeg, .png, .gif), nic se nezobrazí) |
|
Vlastnosti atributů |
Minimální JSON
{
"nameLabel": "Test",
"numberLabel": "Test test",
"fontIcon": "fa fa-help",
"name": "Test",
"singular": "Test",
"plural": "Test",
"attributes": [],
"attributesVisibleInCards" : [],
"groups": [],
"forms": {}
}
Skupiny
Rozdělení atributů do skupin pro lepší přehlednost.
|
Atributy mimo skupiny se zobrazují na konci ve skupině "Ostatní" |
"groups": [
{
"name": "Základní údaje", (1)
"attributeNames": [ (2)
"Jméno psa",
"Číslo zápisu",
"Klubové číslo",
"Datum narození",
"Uchovněný"
],
"collapsed": false (3)
},
{
"name": "Rodiče", (1)
"attributeNames": [ (2)
"Matka",
"Otec"
],
"collapsed": true (3)
}
]
| 1 | Vlastnost name - název skupiny |
| 2 | Vlastnost attributeNames - seznam jmen atributů, v jakém pořadí se ve skupině zobrazí |
| 3 | Vlastnost collapsed - určuje defaultní rozbalení skupiny v ČS|Karta assetu a MS|Detail assetu |
Formuláře
Definice atributů v definovaných formulářich určených k editaci assetu. Pokud nebude atribut uveden, nebude ve formuláři zobrazen.
-
MS_ASSET_LIST_ADD - Nový asset ze Seznamu assetů v MS
-
MS_ASSET_LIST_BULK_EDIT - Hromadná editace assetů ze Seznamu assetů v MS
-
MS_ASSET_DETAIL_EDIT - Editace v Detailu assetu v MS a ze Seznamu assetů v MS
-
MS_MEMBER_DETAIL - Nový na záložce asseti v Detailu osoby v MS
-
CS_MEMBER_CARD_EDIT - Editace assetu na Kartě člena v ČS
-
CS_MEMBER_CARD_add - Nový asset v kartě člena v CS
|
Ve formuláři MS_ASSET_LIST_BULK_EDIT se neprojeví povinné položky, protože si vždy vybírají, kterou hodnotu chtějí hromadně změnit. |
|
Každý atribut musí být použit alespoň v jednom formuláři, jinak pokus o uložení definice vyhodí chybu. |
"forms": {
"MS_MEMBER_DETAIL": [ (1)
{
"name": "Výchozí", (2)
"fields": [ (3)
"Jméno psa",
"Číslo zápisu",
"Klubové číslo",
"Datum narození",
"Uchovněný",
"Matka",
"Otec"
],
"requiredFields": [ (4)
"Jméno psa",
"Číslo zápisu
]
}
]
}
| 1 | Název formuláře z definovaných formulářů |
| 2 | Vlastnost name - název zobrazení (zatím zobrazujeme jen první, ale bude doplňen výběr) |
| 3 | Vlastnost fields - seznam jmen atributů, které se mají ve formuláři zobrazit |
| 4 | Vlastnost requiredFields - seznam jmen atributů, budou ve formuláři povinné |
|
seznam jen názvů assetů "$.attributes.*.name pomocí plug-in JSON path |
Zpříštupnění assetů
Pokud je v organizaci definován asset (asset definice), automaticky se zpřístupní v :
-
Manažerské sekci:
-
v detailu osoby
-
v události - ve formuláři a seznamu účastníků
-
-
Členské sekci:
-
v kartě člena
-
Nastavení custom stránek s assety
Do Custom site v MS a ČS přidat novou stránku + portlet:
-
Seznam assetů - stránka pro ČS + portlet CRM Assets viewer - neumožňuje editaci
-
Správa assetů - stránka pro MS + portlet CRM Assets
-
Karta chovatelské stanice - Stránka pro ČS + portlet Karta chovatelské stanice
-
Karta chovatele - Stránka pro ČS určená pro ČMKU + portlet Karta chovatele
|
U atributu NUMBER a INTEGER je možné filtrovat pomocí matematických znamének
|
Nastavit oprávnění na stránce i na portletu pro role, kterým se mají seznamy zobrazit.
Nastavení opravnění
Nastavení akcí vrámci oprávnění se definuje u role. Může být nastavena pro všechny sity nebo jen pro vybranou custom situ.
-
CRM Assets > Assety v manažerské sekci
-
Action.ADD - Možnost přidat assety na site
-
Action.EDIT (Upravit) - Možnost editovat assety na site
-
Action.SERVICES - Možnost definovat služby pro assety na site
-
-
CRM Assets Viewer > Assety v členské sekci
-
Action.ADD - Možnost přidat assety na site
-
Action.EDIT (Upravit) - Možnost editovat assety na site
-
Action.MY_BREEDS - Možnost zobrazit tlačítko Moje odchovy na site. Bude ZRUŠENO!
-
|
Tlačítko odkazuje natvrdo na stránku |
Odchovy
Karta chovatelské stanice a Karta chovatele obsahují záložku Odchovy, která se definuje přes nastavení portletu stejným způsobem jako AssetViewer.
Pro zobrazení záložky Odchovy v detailu osoby je potřeba do Nastavení detailu osoby přidat záložku s klíčem crm-member-breedings. Na záložce Odchovy
v detailu osoby pak může konfigurátor nastavit zobrazení assetů jako v AssetVieweru.
|
Některá nastavení z AssetViewru nebyla přenesena do MS z důvodu jejich špatné funkčnosti v MS. |
Jak nastavit Kartu assetu
Jedná se o portlet CRM ASSET CARD. Je možné nastavit filtr pro assety, takový, že pokud asset podmínku nesplní tak se karta nezobrazí. Manažerovi a Uživatele se vztahem k assetu se karta zobrazí vždy.
Jak nastavit Seznam assetů pro čtení
Jedná se o portlet CRM ASSETS VIEWER. Nastavuje se zobrazení sloupců, které se na stránce budou zobrazovat. K seznamu se dá nastavit i filtr nebo setřídění.
Filtry
Jedná se o jednoduchý JSON. Zapisuje se {"Slopec": "Hodnota", …}. Pokud se filtr nepoužije, načtou se všechny assety.
-
Základní sloupec - název se zobrazuje v zobrazení sloupců za znakem |. např. Jméno psa|name. Viz. Beagle Club.
-
Podle přihlášeného uživatele - Sloupec typu MEMBER_REFERENCE může obsahovat hodnotu
$current_user. -
Podle konkrétního membera - Sloupec typu MEMBER_REFERENCE může obsahovat hodnotu
$current_member-{}. Pozn. Záměna{}zamemberIdmusí být implementováno, např. u odchovů pro komkrétního membera. -
Datum (DateRangeFilter) - je možné definovat jako JSONObject obsahující
"from"a"to". K tomu je možné použít i dynamická pole:-
$current_dat"- aktuální den -
$minus_days- odečet dní od aktuálního dna. Zapisuje se jako"$minus_days:30"
-
|
Pokud se ve filtru vybírá hodnota, musí být zapsaná jako pole: |
|
U atributu NUMBER a INTEGER je možné filtrovat pomocí matematických znamének
(např.: "<9" - vyfiltruje záznami menší než 9) |
|
Je možné nastavit negativní podmínku, pomocí speciální tokenu např.: |
Setřízení
Jedná se o jednoduchý JSON. Zapisuje se [{"field":"Sloupec","sortOrder":"ASCENDING/DESCENDING"}]. Pokud se setřízení nepoužije, načtou se assety tak, jak byly přídány.
|
Do třízení lze nastavit více sloupců najednou |
Přidání Extra HTML zobrazení
K assetu je možné nastavit HTML, které se zobrazí po rozbalení řádku:
-
portlety CRM Assets viewer a CRM Assets,
-
v členské kartě
-
v detailu osoby
Pro přidání je potřeba:
-
Vytvořit/mít data provider Docgenu, který plní data pro šablonu (jedná se o kus groovy skriptu, viz. níže)
-
Vytvořit šablonu v Docgenu (typicky pro konkrétní organizaci, typu HTML)
-
Název šablony musí odpovídat názvu zobrazení
-
Soubor šablony nastavit s typem FTL
-
Spojit s data providerem
-
-
Nastavit klíč šablony do settingu extra-asset-detail-html (tím se jednoznačně určí že tato organizace bude používat pro generování předanou šablonu)
|
Zobrazení může být i více, oddělené v settingu znakem |. |
Nastavení zobrazovaných atributů:
Každý data provider obsahuje třídu Settings, ve které lze nastavit odlišné chování pro různé organizace. Třída Settings obsahuje proměnou organizationName, která odpovídá aktuálnímu názvu prohlížené organizace. Pomocí této proměnné lze za využití podmínek v funkcích třídy Settings nastavit chování jednotlivých atributů pro každou organizaci zvlášť. Defaultně je nastaveno nezobrazování extra atributů.
Funkce třídy Settings: název funkce (typ : [extraHTML ve kde je použito])
-
getShowLifeStatus (BOOLEAN : [Potenciální rodokmen]): definuje zobrazení ikony pro úmrtí
-
getIsAlive (BOOLEAN : [Rodokmen,Potomci,Sourozenci,Potenciální rodokmen,Potenciální potomci): definuje podmínku pro rozhodnutí, zda je asset živý, nebo mrtvý
-
getExtraAttr (BOOLEAN : [Potomci,Sourozenci,Potenciální rodokmen, Potenciální potomci): definuje zobrazení extra atributu
-
getExtraAttrName (List<String> : [Potomci,Sourozenci,Potenciální rodokmen,Potenciální potomci): definuje hlavičky extra atributů v tabulce
-
getExtraAssetAttrName (List<String> : [Rodokmen,Potomci,Sourozenci,Potenciální rodokmen,Potenciální potomci): definuje názvy extra atributů v assetu, který se má zobrazit
-
renderDescendants (BOOLEAN : [Potenciální rodokmen,Potenciální potomci): definuje zda pod potenticonální rodokmen zobrazit tabulku, která obsahuje potomky vybraných assetů
-
getOneRowAttrName (List<String> : [Potenciální rodokmen): definuje atributy, které se v potenticonálním rodokmenu zobrazí na jeden řadek
-
getShowAge (BOOLEAN : [Potenciální rodokmen): definuje zda zobrazit věk vybraných assetů pro potenticonální rodokmen
-
getChovatelAttr (String : [Kontakty): definuje název atributy Chovatel v konkrétní definici assetu
-
getChovatelAttrName (String : [Kontakty): definuje zobrazený název pro kontakt Chovatel
-
getOwnerAttrName (String : [Kontakty): definuje zobrazený název pro kontakt Majitel
-
getEmptyMsg (String : [Kontakty): definuje text, který se zobrazí, pokud neexistují žádná data k zobrazení
Funkce getExtraAttrName a getExtraAssetAttrName obsahují seznamy do kterých lze přidat více prvků. Každý prvek odpovídá jednomu extra atributu, který se zobrazí v tabulce.
Rodokmen
Jedná se o HTML zobrazení složené z šablony, kde figuruje:
-
data provider: rodokmen.groovy
-
obsah šablony bez obrázků: rodokmen.ftl
-
obsah šablony s obrázky: rodokmen-s-obrazky.ftl
Sourozenci a potomci
-
obsah společné šablony: family.ftl
Sourozenci
-
data provider: siblings.groovy
-
obsah šablony: siblings.ftl
Potomci
-
data provider: descendants.groovy
-
obsah šablony: descendants.ftl
Rodokmen s obrázky se sourozenci a potomky
-
data provider: rodokmen.groovy, siblings.groovy a descendants.groovy
-
obsah společné šablony: all.ftl
Potenciální rodokmen
-
data provider: rodokmen-potencionalni.groovy
-
obsah šablony: rodokmen-potencionalni.ftl
Potenciální potomci
-
Nastavuje se jako optional v Potencionálním rodokmenu
-
data provider: potomci-potencionalni.groovy
-
obsah šablony: rodokmen-potencionalni.ftl
Kontakty
-
data provider: contacts.groovy
-
obsah šablony: contacts.ftl
|
V docgenu je portřeba nastavit označení šablony hodnotu |
Definice vztahu osoba-asset
V LOV existuje číselník MEMBER_ASSET_TYPE. Je možné mít i organizační hodnoty.
Importy
Nachází se v pravé části definice assetu
Import assetů
|
Pojmy číslo, number, numberLabel všechny vyjádřují atribut, který jsme zvolili jako identifikační číslo assetu (např. "Číslo zápisu"). Analogicky jméno, name, nameLabel (např. "Jméno psa"). |
-
Importuje se z CSV. Standardní formát oddělovač čárka, UTF8 encoding.
-
CSV musí obsahovat první řádek s hlavičkou
-
Hlavička musí mýt buď názvy atributů nebo hodnoty ${numberLabel} a ${nameLabel}
-
${numberLabel} sloupec je povinný
-
Pokud číslo asset v DB existuje, budou se atributy aktualizovat
-
Nastaví se pouze atributy, které jsou v importním souboru (pro nové i pro aktualizaci)
-
soubor nemusí obsahovat všechny atributy z JSONu (tzv. částečný, chybějící atributy budou prázdné)
-
soubor nesmí obsahovat extra pole (atributy, které nejsou definované v JSONu)
-
pokud soubor obsahuje duplicity dle čísla, tak se import neprovede a potřeba import opravit
-
SELECT_MULTI - jednotlivé hodnoty jsou odděleny podtržítkem (např. "4 - otevřená srst_5 - mírně zvlněná")
-
NUMBER - formátované česky
-
BOOLEAN - podporuji "true", "t", "y", "on", "1" jako pravdivé hodnoty
-
DATE - formátované česky (tip pro Excel - pokud nejde formát data změnit, tak dej pryč hodiny :D)
-
FILE_ENTRIES: Importuje se pomocí UUID nahraného souboru neboj json pole uuid nahraných souborů
-
MEMBER_REFERENCE - hodnota musí být členské číslo osoby, pokud neexistuje import proběhne, ale vypíše to od logu
|
Příklad url z dokumentů je: https://is-chovatelskyklub.vrk.cz/documents/358118/84d29525-e9b7-41a0-aece-291a22312b0a 84d29525-e9b7-41a0-aece-291a22312b0a je uuid které by se dalo do importního souboru |
-
STRUCTURED
-
dvě možnosti:
-
ve sloupcích
-
pro jeden sub atribut jeden sloupec (nejsou všechny povinné)
-
např. Tlak ve strukturovaném Zdraví importuji pomocí hlavičky sloupce
Zdraví|Tlak
-
-
pomocí Json Objektu (opět se nemusí definovat celý strukturovaný atribut)
-
-
pro hodnoty ať už v json objektu nebo ve sloupcích se používají pravidla pro sub typy, které jsou zmíněné výše
-
příklad:
-
{"Tlak": "100,5", "Datum narození": "11.11.2000"}
-
REPEATED
-
ve sloupci musí být json pole a hodnoty jsou typu string, hodnota je jako opakovaný typ
-
příklad pro typ DATETIME
-
["11.11.2000 11:12", "11.11.2001 11:12"]
-
pro structured zde neplatí import po jednotlivých sloupcích, musí se importovat pomocí json objektu. Př.:
[
{"Datum závodu": "11.11.2000", "Čas uběhnutí": "11,7"},
{"Datum závodu": "11.11.2005", "Čas uběhnutí": "10,7"}
]
|
Ve výsledeném csv to bude divně vypadat s dvojitými uvozovkami, to je v pořádku, CSV editor to vyřeší za vás
|
-
update se provádí dle existujícího čísla (numberlabel)
-
když asset již existuje, tak se aktualizují pouze zmíněné atributy v souboru
-
číslo nesmí být prázdné
# Přejmenování atributu
# Stačí dodat parametry :newName a :oldName (jen název), :assetDefinitionId
-- parametry
\set oldName 'Fotografie'
\set newName 'Profilová fotografie'
\set assetDefinitionId 123
# Kontrola
SELECT attributesinjson =
jsonb_set(
a.attributesinjson::jsonb,
ARRAY[:newName],
a.attributesinjson::jsonb -> :oldName
) - :oldName
FROM PI_CRM_Asset a
WHERE a.assetdefinitionid = :assetDefinitionId
AND a.attributesinjson::jsonb ? :oldName;
# samotný update
UPDATE pi_crm_asset a
SET attributesinjson =
jsonb_set(
a.attributesinjson::jsonb,
ARRAY[:newName],
a.attributesinjson::jsonb -> :oldName
) - :oldName
WHERE a.assetdefinitionid = :assetDefinitionId
AND a.attributesinjson::jsonb ? :oldName;
# Transformace jednoduchého attributu do strukturovaného atributu
# Stačí dodat parametry :newName a :oldName (jen název), :assetDefinitionId
SET @oldName = '';
SET @newName = '';
SET @assetDefinitionId = 0;
# Kontrola
SELECT JSON_SET(
CAST(a.attributesInJson AS JSON), CONCAT('$."', @oldName, '"'),
JSON_OBJECT(@newName, JSON_EXTRACT(
CAST(a.attributesInJson AS JSON), CONCAT('$."', @oldName, '"'))
)
)
FROM PI_CRM_Asset a
WHERE a.assetDefinitionId = @assetDefinitionId
AND JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @oldName, '"')) IS NOT NULL;
# samotný update
UPDATE PI_CRM_Asset a
SET a.attributesInJson = JSON_SET(
CAST(a.attributesInJson AS JSON), CONCAT('$."', @oldName, '"'),
JSON_OBJECT(@newName, JSON_EXTRACT(
CAST(a.attributesInJson AS JSON), CONCAT('$."', @oldName, '"'))
)
)
WHERE a.assetDefinitionId = @assetDefinitionId
AND JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @oldName, '"')) IS NOT NULL;
# Změna hodnoty při změně typu z BOOLEAN na SELECT
# Stačí dodat parametry :name (jen název) a :oldValue a :newValue, :assetDefinitionId
SET @name = '';
SET @oldValue = '';
SET @newValue = '';
SET @assetDefinitionId = 0;
# Kontrola
SELECT JSON_REPLACE(CAST(a.attributesInJson AS JSON), CONCAT('$."', @name, '"'), @newValue)
FROM PI_CRM_Asset a
WHERE a.assetDefinitionId = @assetDefinitionId
AND JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @name, '"')) like @oldValue;
# samotný update
UPDATE PI_CRM_Asset a
SET a.attributesInJson = JSON_REPLACE(CAST(a.attributesInJson AS JSON), CONCAT('$."', @name, '"'), @newValue)
WHERE a.assetDefinitionId = @assetDefinitionId
AND JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @name, '"')) like @oldValue;
# Smazání atributu
# Stačí dodat parametry :name (jen název), :assetDefinitionId
SET @name = '';
SET @assetDefinitionId = 0;
# Kontrola
SELECT JSON_REMOVE(
CAST(a.attributesInJson AS JSON),
CONCAT('$."', @name, '"') )
FROM PI_CRM_Asset a
WHERE a.assetDefinitionId = @assetDefinitionId
AND JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @name, '"')) IS NOT NULL;
# samotný update
UPDATE PI_CRM_Asset a
SET a.attributesInJson = JSON_REMOVE(
CAST(a.attributesInJson AS JSON),
CONCAT('$."', @name, '"') )
WHERE a.assetDefinitionId = @assetDefinitionId
AND JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @name, '"')) IS NOT NULL;
# Přejmenování hodnoty atributu
# Stačí dodat parametry :attributeName (jen název) a :oldValue a :newValue, :assetDefinitionId
SET @attributeName = '""';
SET @oldOption = '""'; #Může být i číslo '0' | Json pole '{"X":"Y"}'
SET @newOption = '""'; #Může být i číslo '0' | Json pole '{"X":"Y"}'
SET @assetDefinitionId = 0;
UPDATE PI_CRM_Asset a
SET a.attributesInJson =
JSON_UNQUOTE(JSON_REPLACE(a.attributesInJson, CONCAT('$.', @attributeName), @newOption))
WHERE a.assetDefinitionId = @assetDefinitionId
AND JSON_UNQUOTE(JSON_EXTRACT(a.attributesInJson, CONCAT('$.', @attributeName))) = @oldOption;
TRUNCATE pi_crm_assetduplicity;
UPDATE counter
SET currentid = 0
WHERE name = 'cz.vrk.pi.crm.model.model.AssetDuplicity';
INSERT INTO PI_CRM_AssetDuplicity(id_, asset1, asset2, duplicityLevel, assetdefinitionid, byattributes)
SELECT row_number() over (order by a.id_), a.id_, a2.id_, 'WEAK', a.assetdefinitionid, pca.numberlabel
FROM PI_CRM_Asset a
JOIN PI_CRM_Asset a2 ON a.number_ = a2.number_
AND a.id_ <> a2.id_
AND a.assetDefinitionId = a2.assetDefinitionId
JOIN pi_crm_assetdefinition pca on a.assetdefinitionid = pca.id_
WHERE a.number_ != '' and a.id_ < a2.id_
GROUP BY a.id_, a2.id_, pca.numberlabel
HAVING (SELECT COUNT(*)
FROM pi_crm_asset a2
WHERE a.assetDefinitionId = a2.assetDefinitionId
and a.number_ = a2.number_ and a.id_ < a2.id_) > 2;
UPDATE counter
SET currentid = (SELECT MAX(id_) FROM pi_crm_assetduplicity)
WHERE name = 'cz.vrk.pi.crm.model.model.AssetDuplicity';
UPDATE pi_crm_assetduplicity ad
SET duplicityLevel = 'STRONG',
byattributes = (SELECT concat(concat(pca.numberlabel, ', '), pca.namelabel)
FROM pi_crm_assetdefinition pca
WHERE ad.assetdefinitionid = pca.id_)
WHERE id_ in (SELECT ad.id_
FROM pi_crm_assetduplicity ad
JOIN PI_CRM_Asset a1 ON ad.asset1 = a1.id_
JOIN PI_CRM_Asset a2 ON ad.asset2 = a2.id_
WHERE a1.name = a2.name);
SET @newName = 'Číslo zápisu';
SET @assetDefinitionId = 0;
#Kontrola
SELECT JSON_UNQUOTE(JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @newName, '"'))), a.*
FROM PI_CRM_Asset a
WHERE a.assetDefinitionId = @assetDefinitionId
#Nastavení hodnoty těm co mají vyplněno
UPDATE PI_CRM_Asset a
SET a.number_ = JSON_UNQUOTE(JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @newName, '"')))
WHERE a.assetDefinitionId = @assetDefinitionId
AND JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @newName, '"')) IS NOT NULL;
#Vynulování hodnoty, těm co nemají vyplněno
UPDATE PI_CRM_Asset a
SET a.number_ = ''
WHERE a.assetDefinitionId = @assetDefinitionId
AND JSON_EXTRACT(CAST(a.attributesInJson AS JSON), CONCAT('$."', @newName, '"')) IS NULL;
-
hodnota pro RELATIONSHIP je z NumberLabel vztaženého assetu (např. Otec = 1143)
-
takový asset buď už je v DB nebo bude obsažen v právě importovaném souboru
-
pokud vztažený asset neexistuje, vyplní se vztah že je prázdný, ale import proběhne
-
pokud vztažený asset existuje vícekrát (= duplicita), tak to skončí chybou (asi :D)
Import vztahů s osobou (= Plátce)
Importní soubor je klasické .csv které obsahuje členské číslo, číslo assetu, datum vytvoření a libovolně služby.
Vzorové csv
-
člen- číslo člena (povinné) -
asset- číslo assetu (povinné) -
vytvořeno- datum vytovření vztahu (povinné) -
typ- typ vztahu z LOVu MEMBER_ASSET_TYPE (povinné) -
služby- názvy služeb (oddělovač více služeb je_)
člen,asset,vytvořeno,typ,služby 243,6,01.02.2020 15:10,OWNER, 243,7,01.02.2020 15:10,OWNER,Krmení_Čištění na sucho 245,8,01.02.2020 15:10,OWNER, 147,9,01.02.2020 15:10,OWNER,Krmení_Čištění na sucho 50,10,01.02.2020 15:10,OWNER,