# Vrh.Common
A modul a Vonalkód Rendszerház fejlesztési környezetében szabványosított és
hasznosan alkalmazható eszközeinek gyűjtőhelye.

> Igényelt minimális framework verzió: **4.5**

> Teljes funkcionalitás és hatékonyság kihasználásához szükséges legalacsonyabb framework verzió: **4.5**

# Főbb összetevők
### Interfészek
* **[IManage](##IManage)**

### Standard osztályok
* **[CheckListJSON](##CheckListJSON)**
* **[ReturnInfoJSON](##ReturnInfoJSON)**
* **[SelectListJSON](##SelectListJSON)**

## IManage
Generikus interfész, melyben azt a típust kell megadni, amely menedzselését végzi.
```javascript
/// <summary>
/// Meghatározza és előírja egy karbantartást és hozzáférést 
/// biztosító osztály elvárt tulajdonságait és módszereit.
/// </summary>
public interface IManage<T>
{
    /// <summary>
    /// A kezelt típust össze egyedét szolgáltató tulajdonság.
    /// </summary>
    List<T> All { get; }

    /// <summary>
    /// A kezelt típus egy elemét adja vissza az egyedi azonosító segítségével.
    /// </summary>
    /// <param name="id">Az elem egyedi azonosítója.</param>
    /// <returns></returns>
    T Get(int id);
    /// <summary>
    /// A kezelt típus egy elemét adja vissza a megadott név segítségével.
    /// </summary>
    /// <param name="name">Az elem egyedi neve.</param>
    /// <returns></returns>
    T Get(string name);

    /// <summary>
    /// Létrehozza a kezelt típus egy elemét.
    /// </summary>
    /// <param name="item">A kezelt típus egy eleme, amit hozzá kell adni.</param>
    void Create(T item);

    /// <summary>
    /// A kezelt típus egy elemét törli az egyedi azonosító alapján.
    /// </summary>
    /// <param name="id">A törlendő elem egyedi azonosítója.</param>
	void Delete(int id);
    /// <summary>
    /// A kezelt típus egy elemét törli az egyedi neve alapján.
    /// </summary>
    /// <param name="name">A törlendő elem egyedi neve.</param>
	void Delete(string name);

    /// <summary>
    /// A kezelt típus egy elemének módosítása.
    /// Ha nem létezik az hiba.
    /// </summary>
    /// <param name="item">A kezelt típus egy eleme.</param>
    void Update(T item);
}
```

## CheckListJSON
```javascript
/// <summary>
/// Egy meghívott akció válaszüzenetének egy lehetséges meghatározott szerkezete.
/// Valamely lista ellenőrzéshez használható, amelyben a Checked oszlopban jelölhető az ellenőrzés eredménye.
/// </summary>
public class CheckListJSON
{
    /// <summary>
    /// Az ellenőrzendő illetve ellenőrzött azonosító.
    /// </summary>
    public string Value { get; set; }

    /// <summary>
    /// Az ellenőrzéskor megtalált név vagy leíró.
    /// </summary>
    public string Text { get; set; }

    /// <summary>
    /// Az ellenőrzés eredményét jelző logikai érték, mely a felhasználáskor
    /// az üzleti logikától függ.
    /// </summary>
    public bool Checked { get; set; }
}
```

## ReturnInfoJSON
```javascript
/// <summary>
/// Egy meghívott akció válaszüzenetének egy lehetséges meghatározott szerkezete.
/// A válasz érték (ReturnValue) és üzenet (ReturnMessage) formájú. 
/// Sikeres végrehajtás esetén mindig 0 legyen a ReturnValue.
/// Sikertelen esetben ettől eltérő, de ha nincs egyéb ok, akkor hiba esetén legyen -1.
/// Alapértelmezett érték: 0, "Az indított akció sikeresen lezajlott!" }
/// </summary>
public class ReturnInfoJSON
{
    /// <summary>
    /// Egy reprezentatív értéke, mely a sikerességtől függ.
    /// Ha nincs hiba az akció végrehajtásában, akkor 0 legyen az értéke.
    /// Alapértelmezett értéke: 0
    /// </summary>
    public int ReturnValue { get; set; } = 0;

    /// <summary>
    /// Az akció üzenete. Hiba esetén a hibaüzenet szövege.
    /// Alapértelmezett értéke: "Az indított akció sikeresen lezajlott!"
    /// </summary>
    public string ReturnMessage { get; set; } = "Az indított akció sikeresen lezajlott!";
}
```

## SelectListJSON
```javascript
/// <summary>
/// Egy meghívott akció válaszüzenetének egy lehetséges meghatározott szerkezete.
/// Egy listához használható, mely értékeit és azonosítóit fel lehet használni.
/// </summary>
/// <remarks>
/// Egyenértékű a System.Web.Mvc.SelectListItem osztállyal, de nem onnan származik.
/// Az ott szereplő leírás: 
/// "Represents the selected item in an instance of the System.Web.Mvc.SelectList class."
/// </remarks>
public class SelectListJSON 
{
    /// <summary>
    /// Jelzi, hogy ez az elem a listában letiltott.
    /// </summary>
    public bool Disabled { get; set; }

    /// <summary>
    /// A csoport jelölése. Alapértelmezett értéke: null
    /// </summary>
    public SelectListGroup Group { get; set; }

    /// <summary>
    /// Jelzi, hogy ez az elem a listában kiválasztott.
    /// </summary>
    public bool Selected { get; set; }

    /// <summary>
    /// A listelem szövege, ami megjelenik.
    /// </summary>
    public string Text { get; set; }

    /// <summary>
    /// A listelem értéke.
    /// </summary>
    public string Value { get; set; }
}

#region SelectListGroup public class
/// <summary>
/// Represents the optgroup HTML element and its attributes. In a select list, 
/// multiple groups with the same name are supported. 
/// They are compared with reference equality.
/// </summary>
/// <remarks>
/// A System.Mvc.SelectListItem-mel való kompatibilitás miatt van itt.
/// A 'summary' szövege is onnan másolt.
/// </remarks>
public class SelectListGroup
{
    /// <summary>
    /// Beállítja, hogy az adott csoport engedélyezett-e.
    /// </summary>
    public bool Disabled { get; set; }

    /// <summary>
    /// A csoport neve.
    /// </summary>
    public string Name { get; set; }
}
#endregion SelectListGroup public class
```


### Version History:
#### 2.25.0 (2022.10.23) Compatible change:
- SmartOrder kiterjesztés kibővítése úgy, hogy navigációs tulajdonságok rendezését is elvégezze.
Például mostantól elfogadja a propertyName paraméterben a "Warehouse.Name" vagy "Warehouse.Type.Name"
rendezésre vonatkozó rendezési kérést is.  
#### 2.24.1 Patch (nuget: 2022.10.11):
#### 2.24.0 Compatible (nuget: 2022.10.11):
- WildCardToRegex osztály létrehozása
#### 2.23.1 Compatible (nuget: 2022.05.25):
SelectListJSON strukturába a Value alias-aként az Id mező beillesztése
#### 2.23.0 Compatible (nuget: 2022.01.31):
- VrhCommon / LoadProperties metódus beillesztése
- Extensions.IQueriable / ToTraceQuery és ToTraceString beillesztése
#### 2.22.0 Compatible (nuget: 2021.12.03):
-StringConstructorban regex group alapú ResolveConstructor megvalósítása
#### 2.21.3 Patch (nuget):
#### 2.21.2 Patch (nuget):
- a StringConstructor.ResolveConstructor metódusok nem voltak rekurzívak, tehát ha egy változó értékében másik változó hivatkozás volt,
akkor azt már nem oldotta fel; bevezetésre kerültek az azonos paraméterezésű ResolveConstructorR metódusok, amelyek már ebben az értelemben rekurzívan működnek
#### 2.21.1 Patch (nuget):
#### 2.21.0 Compatible (nuget):
-StringConstructorban az adatrész kijelölés formátumának módosítása és a feldolgozás ennek megfelelő átalakítása
#### 2.20.1 Patch (nuget):
-StringConstructor.ResolveConstructor azonnal visszatér a megadott constructor értékével, ha az null, vagy nincs benne más csak whitespace, vagy ha a helyettesítő szótár üres;
#### 2.20.0 Patch (nuget):
- StringConstructor.ResolveConstructor-nak több varname separatort is meg lehet adni; a paraméterben
a karakterpárok jelentik az alternatívákat, tehát a "{}@@" varnameseparator string a {} és a @@ karakterpárokat jelöli ki szeparátoroknak
- ezen kívül javításra került egy hiba, ami az azonos bal és jobb zárókarakterekkel rendelkező varnameseparator értékenél hibás működést eredményezett
#### 2.19.1 Patch (nuget):
- CommandLine osztályban egy string indexelési hiba javítása
#### 2.19.0  Compatible change (nuget):
- XmlEscapes és AsciiControlCharacters string extension osztályok megvalósítása
#### 2.18.1  Patch (nuget):
#### 2.18.0  Compatible change (nuget):
- ReturnInfoJSON struktúra kiegészítése egy "object ReturnData" mezővel.
#### 2.17.1  Patch (nuget):
#### 2.17.0  Patch (nuget):
- A ResolveConstructor metódusok rendberakása; volt benne egy felesleges funkció, amit kitöröltem, emiatt azonban ez a metódus
nem kompatibilis a 16.xx verziókkal, de a használó program újrafordítás után (mindennemű változtatás nélkül) ismét menni fog.
Bocs, nem akartam 3-as verzióra térni.
#### 2.16.2  Patch (nuget):
#### 2.16.1  Compatible change (nuget):
- Bekerült egy újabb ResolveConstructor metódus a StringConstructor osztályba
#### 2.16.0  Compatible change (nuget):
- Bekerült egy újabb ResolveConstructor metódus a StringConstructor osztályba, ami lehetővé teszi, hogy
a konstruktor egy adatelem egy részkaraktersorozatának (substring) kiemelését írja elő {DENAME:from,len} formában

#### 2.15.0-2 Compatible change (nuget):
- Adding extension methods for integral types

#### 2.14.1-3 Compatible change (nuget):
- StringConstructor osztályban a nevekben lehet . (pont) karaktert használni, hogy megengedje a minősített neveket

#### 2.14.0 Compatible change (nuget):
- StringConstructor osztály hozzáadása

#### 2.13.2 (2020.03.27) Patches:    
- NuGet csomag módosítása úgy, hogy a modul ReadMe.md "Build Action" tulajdonsága "None" legyen a telepítés után. Install.ps1 hozzáadása.

#### 2.13.1 (2020.03.26) Patches:    
- Felesleges függések törlése.
- XML comment dokumentáció pontosítása.

#### 2.13.0 (2020.03.19) Compatible changes:    
- Vrh.Web.Common.Lib egyes elemeinek átemelése ide

#### 2.12.1 (2020.02.13) Patches:    
- SelectListJSON egyenlőség vizsgálat javítása

#### 2.12.0 (2020.02.13) Compatible changes:    
- SelectListJSON struktúrába beépítésre került egy speciális egyenlőség vizsgálat, amely a Value, a Text és a Group mezők értékének egyenlősége
esetén ad igaz értéket; a Disabled és a Selected mezők értéke az egyenlőség vizsgálatban nem játszik szerepet
- CheckListJSON és ReturnInfoJSON strukturákhoz analóg módon, mely ugyanezekkel a feltételekkel dolgozik.

#### 2.11.1-3 (2019.12.19) Compatible changes:    
- CommandLine class hibák javítása.

#### 2.11.0 (2019.12.17) Compatible changes:    
- Topshelf formátumú parancssori paraméterek kezelése: -NAME:value
 
#### 2.10.1 (2019.12.17) Patches:    
- CommandLine osztályban egy javítás

#### 2.10.1 (2019.12.05) Patches:    
- SerializeObject metódusban a string-ek külön kezelése.

#### 2.10.0 (2019.10.08) Compatible changes:      
- ToEnum string extension hozzáadása, amelyik egy stringből megadott tipusú enumra konvertál, vagy a típus (Enum) defaultját adja

#### 2.9.0 (2019.09.12) Compatible changes:      
- EntryAsseblyFixer static class hozzáadása, ami beállítja  amegfelelő EntryAssembly-t, ha az alakalmazás tér dinamikus hostolású, ahol null, vagy dynamic az EntryAssembly
- EntryAsseblyFixer egység tesztjei

## 2.8.1 (2019.09.07):
### Patch:
- Name property típusa javítva.

## v2.8.0 (2019.09.06):
### Compatibility API changes:
- ReturnDictJSON adatstruktúra hozzáadva.

## 2.7.0 (2019.08.15) Compatible changes:      
### Compatibility API changes:      
- Az EntityFramework extension bővítése az AlreadyOrdered függvénynel, amely megmondja egy IQueryable-ről, hogy rendezett-e már (tehát a további rendezéséhez az OrderBy, vagy a ThenBy-t kell-e használni)

## 2.6.0 (2019.08.01) Compatible changes:      
### Compatibility API changes:      
- Extensions bővítése az EntityFramework extension-nel, EntityFrameworkQueryHelper bővítő osztály, SmartOrder bővítő metódus (IQueryable típusra)

## 2.5.0 (2019.07.10) Compatible changes:      
### Compatibility API changes:      
- ExtensionMethods bővítése az Enum extensionssel, Enumdata attribútum osztály

## 2.3.0 (2019.05.14) Compatible changes:      
- IManage interfész áthelyezése Vrh.Web.Common.Lib 1.18.1-es változatából.
- Standard osztályok (CheckListJSON, ReturnInfoJSON, SelectListJSON) áthelyezése Vrh.Web.Common.Lib 1.18.1-es változatából.

## 2.2.0 (2018.12.17)
### Compatible changes:      
- VrhConvert.SerializeObject Private metódus publikussá tétele.

## 2.1.0 (2018.12.17)
### Compatible changes:      
- Új függvények beillesztése a conversion részbe. 

## 2.0.1 (2018.12.12)
### Patches:      
- ConnandLine osztály metóduasdinak kommentezése és egy apró javítás: a GetCommandLineArgument lekezeli, ha az argumentname paramétere üres string.

## 2.0.0 (2018.11.28)
### Braking change:
- 3.5-ös .Net framwork verzi támogatásának megszüntetése új target verzió: 4.5
### Compatibility API changes:      
- CommandLine static segéd osztály hozzáadása 

## 1.13.0 (2017.04.04)
### Compatibility API changes:      
- String Extension method: FromHexOrThis      

## 1.12.0 (2017.03.29)     
### Compatibility API changes:      
- FixStack class hozzáadása
### Patches:
- UnitTest method elnevezések javítása (konvenció kidolgozása)

## 1.11.0 (2017.03.28)     
### Compatibility API changes:      
- Assembly Extension methodok: Version, AssemblyAttribute

## 1.10.0 (2017.03.16)     
### Compatibility API changes:      
- StringBuilder Extension methodok: AppendWithSeparator, Reverse      
### Patches:
- Extension methodok helyének hozzáadása.
- Test projekt hozzáadása 

## V1.9.2 (2017.02.21)
### Patches:
- Projekt könyvrtárszerkezet rendbetétele.
- AutoBuild Vrh Nuget csomaggá alakítás (összes Nuget-tel kapcsolatos elvárás átvezetése)
- MinFramweork meghatározás 



 