247 lines
21 KiB
C#
247 lines
21 KiB
C#
using EgwCoreLib.Lux.Data.DbModel.Cost;
|
|
using EgwCoreLib.Lux.Data.DbModel.Utils;
|
|
using EgwCoreLib.Lux.Data.DbModel.Sales;
|
|
using EgwCoreLib.Lux.Data.DbModel.Task;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using EgwCoreLib.Lux.Data.DbModel.Stock;
|
|
using EgwCoreLib.Lux.Data.DbModel.Items;
|
|
|
|
namespace EgwCoreLib.Lux.Data
|
|
{
|
|
public static class ModelBuilderExtensions
|
|
{
|
|
#region Public Methods
|
|
|
|
/// <summary>
|
|
/// Estensione per seed iniziale dei dati nel DB
|
|
/// </summary>
|
|
/// <param name="modelBuilder"></param>
|
|
public static void Seed(this ModelBuilder modelBuilder)
|
|
{
|
|
// inizializzazione dei valori di default x Ruoli/Tags
|
|
modelBuilder.Entity<TagsModel>().HasData(
|
|
new TagsModel { TagID = 1, Description = "Tag 01" },
|
|
new TagsModel { TagID = 2, Description = "Tag 02" },
|
|
new TagsModel { TagID = 3, Description = "Tag 03" },
|
|
new TagsModel { TagID = 4, Description = "Tag 04" },
|
|
new TagsModel { TagID = 5, Description = "Tag 05" }
|
|
);
|
|
|
|
// init classi generiche x gestione liste
|
|
modelBuilder.Entity<GenClassModel>().HasData(
|
|
new GenClassModel { ClassCod = "WoodMat", Description = "Elenco Materiali Legno" },
|
|
new GenClassModel { ClassCod = "WoodCol", Description = "Elenco Colori Legno" }
|
|
);
|
|
|
|
modelBuilder.Entity<GenValueModel>().HasData(
|
|
new GenValueModel { GenValID=1, Ordinal=1, ClassCod = "WoodMat", ValString = "Pine" },
|
|
new GenValueModel { GenValID = 2, Ordinal = 2, ClassCod = "WoodMat", ValString = "Maple" },
|
|
new GenValueModel { GenValID = 3, Ordinal = 1, ClassCod = "WoodCol", ValString = "Legno" },
|
|
new GenValueModel { GenValID = 4, Ordinal = 2, ClassCod = "WoodCol", ValString = "Bianco" },
|
|
new GenValueModel { GenValID = 5, Ordinal = 3, ClassCod = "WoodCol", ValString = "Rosso" },
|
|
new GenValueModel { GenValID = 6, Ordinal = 4, ClassCod = "WoodCol", ValString = "Nero" }
|
|
);
|
|
|
|
|
|
// valori base classi generiche
|
|
|
|
// inizializzazione dei valori di default x Customer
|
|
modelBuilder.Entity<CustomerModel>().HasData(
|
|
new CustomerModel { CustomerID = 1, FirstName = "Customer A", LastName = "Egalware", VAT = "1234567890123456" },
|
|
new CustomerModel { CustomerID = 2, FirstName = "Customer B", LastName = "User", VAT = "1234567890123456" },
|
|
new CustomerModel { CustomerID = 3, FirstName = "Customer C", LastName = "User Test", VAT = "1234567890123456" }
|
|
);
|
|
|
|
// inizializzazione dei valori di default x Dealer
|
|
modelBuilder.Entity<DealerModel>().HasData(
|
|
new DealerModel { DealerID = 1, CompanyName = "Company First", FirstName = "Dealer A", LastName = "Egalware", VAT = "9587362514671527" },
|
|
new DealerModel { DealerID = 2, CompanyName = "Company First", FirstName = "Dealer B", LastName = "User", VAT = "9587362514671527" },
|
|
new DealerModel { DealerID = 3, CompanyName = "Company Second", FirstName = "Dealer C", LastName = "User Test", VAT = "9587362514671527" }
|
|
);
|
|
|
|
// inizializzazione dei valori di default x Supplier
|
|
modelBuilder.Entity<SupplierModel>().HasData(
|
|
new SupplierModel { SupplierID = 1, CompanyName = "Company One", FirstName = "Supplier A", LastName = "Egalware", VAT = "7294857103879254" },
|
|
new SupplierModel { SupplierID = 2, CompanyName = "Company Two", FirstName = "Supplier B", LastName = "User", VAT = "7294857103879254" },
|
|
new SupplierModel { SupplierID = 3, CompanyName = "Company Two", FirstName = "Supplier C", LastName = "User Test", VAT = "7294857103879254" }
|
|
);
|
|
|
|
// inizializzazione dei valori di default x gruppi item
|
|
modelBuilder.Entity<ItemGroupModel>().HasData(
|
|
new ItemGroupModel { CodGroup = "WindowTrunk", Description = "Barre legno per lavorazione" },
|
|
new ItemGroupModel { CodGroup = "WindowGlass", Description = "Vetri serramento" },
|
|
new ItemGroupModel { CodGroup = "WindowVarnish", Description = "Vernici per legno" },
|
|
new ItemGroupModel { CodGroup = "WindowHardware", Description = "Ferramenta serramento" }
|
|
);
|
|
|
|
// inizializzazione tipo mov mag
|
|
modelBuilder.Entity<MovTypeModel>().HasData(
|
|
new MovTypeModel { MovCod = "CAR", Description = "Carico a magazzino" },
|
|
new MovTypeModel { MovCod = "MOV", Description = "Movimento interno (spostamento)" },
|
|
new MovTypeModel { MovCod = "ND", Description = "Non Definito" },
|
|
new MovTypeModel { MovCod = "OFOR", Description = "Ordine Fornitore" },
|
|
new MovTypeModel { MovCod = "RETT", Description = "Rettifica magazzino" },
|
|
new MovTypeModel { MovCod = "SCAR", Description = "Scarico da magazzino" }
|
|
);
|
|
|
|
// inizializzazione dei valori di default x Item di magazzino
|
|
modelBuilder.Entity<ItemModel>().HasData(
|
|
// barre grezzo
|
|
new ItemModel { ItemID = 1, CodGroup = "WindowTrunk", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 1001, Description = "BARRA-60x80 generica", SupplCode = "BARR.001", Cost = 20, Margin = 0.3, UM = "#" },
|
|
new ItemModel { ItemID = 2, CodGroup = "WindowTrunk", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 1002, ExtItemCode = "BARRA-60x80x12000", SupplCode = "ABC.00123.12000", Description = "Barra 60x80, lunghezza 12m", Cost = 16.5, Margin = 0.21, UM = "#" },
|
|
new ItemModel { ItemID = 3, CodGroup = "WindowTrunk", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 1003, ExtItemCode = "BARRA-60x80x8000", SupplCode = "ABC.00123.8000", Description = "Barra 60x80, lunghezza 8m", Cost = 17.5, Margin = 0.22, UM = "#" },
|
|
new ItemModel { ItemID = 4, CodGroup = "WindowTrunk", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 1004, ExtItemCode = "BARRA-60x80x16000", SupplCode = "ABC.00123.16000", Description = "Barra 60x80, lunghezza 16m", Cost = 15.5, Margin = 0.2, UM = "#" },
|
|
|
|
// vetri
|
|
new ItemModel { ItemID = 5, CodGroup = "WindowGlass", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 2001, ExtItemCode = "VETRO-3L-THERMO-800x1000", SupplCode = "V3T.800.1000", Description = "Vetro triplo, basso indice termico, 800x1000", Cost = 300, Margin = 0.20, UM = "m2" },
|
|
new ItemModel { ItemID = 6, CodGroup = "WindowGlass", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 2002, ExtItemCode = "VETRO-2L-800x1000", SupplCode = "V2.800.1000", Description = "Vetro doppio, 800x1000", Cost = 200, Margin = 0.15, UM = "m2" },
|
|
new ItemModel { ItemID = 7, CodGroup = "WindowGlass", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 2003, ExtItemCode = "VETRO-3L-800x1000", SupplCode = "V3.800.1000", Description = "Vetro triplo, 800x1000", Cost = 250, Margin = 0.18, UM = "m2" },
|
|
|
|
// vernici
|
|
new ItemModel { ItemID = 8, CodGroup = "WindowVarnish", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 3001, ExtItemCode = "VERN-TRASP", SupplCode = "VT.STD", Description = "Vernice trasparente", Cost = 20, Margin = 0.20, UM = "l" },
|
|
|
|
// ferramenta
|
|
new ItemModel { ItemID = 9, CodGroup = "WindowHardware", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 5001, ExtItemCode = "KIT-001", SupplCode = "AGB-KIT-001", Description = "Kit standard completo AGB tipo 001", Cost = 65, Margin = 0.20, UM = "#" },
|
|
new ItemModel { ItemID = 10, CodGroup = "WindowHardware", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 5002, ExtItemCode = "CERN-001", SupplCode = "AGB-CERN-001", Description = "Cerniera AGB tipo 001", Cost = 10, Margin = 0.20, UM = "#" },
|
|
new ItemModel { ItemID = 11, CodGroup = "WindowHardware", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 5003, ExtItemCode = "SERR-001", SupplCode = "AGB-SERR-001", Description = "Serratura AGB tipo 001", Cost = 15, Margin = 0.20, UM = "#" },
|
|
new ItemModel { ItemID = 12, CodGroup = "WindowHardware", ItemType = Core.Enums.ItemClassType.Buy, IsService = false, ItemCode = 5004, ExtItemCode = "MAN-001", SupplCode = "AGB-MAN-001", Description = "Maniglia AGB tipo 001", Cost = 25, Margin = 0.20, UM = "#" }
|
|
);
|
|
|
|
// inizializzazione dei valori di default x Item di giacenza
|
|
modelBuilder.Entity<StockStatusModel>().HasData(
|
|
// giacenza barre grezzo
|
|
new StockStatusModel { StockStatusId = 1, ItemID = 1, QtyAvail = 5, IsDeleted = false, IsRemn = false, Location = "B001-001-003" },
|
|
new StockStatusModel { StockStatusId = 2, ItemID = 2, QtyAvail = 8, IsDeleted = false, IsRemn = false, Location = "B001-001-002" },
|
|
new StockStatusModel { StockStatusId = 3, ItemID = 3, QtyAvail = 5, IsDeleted = false, IsRemn = false, Location = "B001-001-001" },
|
|
|
|
// giacenza vetri
|
|
new StockStatusModel { StockStatusId = 4, ItemID = 4, QtyAvail = 1, IsDeleted = false, IsRemn = false, Location = "V002-001-001" },
|
|
new StockStatusModel { StockStatusId = 5, ItemID = 5, QtyAvail = 10, IsDeleted = false, IsRemn = false, Location = "V001-001-002" },
|
|
new StockStatusModel { StockStatusId = 6, ItemID = 6, QtyAvail = 1, IsDeleted = false, IsRemn = false, Location = "V001-001-003" },
|
|
|
|
// giacenza vernici
|
|
new StockStatusModel { StockStatusId = 7, ItemID = 8, QtyAvail = 50, IsDeleted = false, IsRemn = false, Location = "V001-001-003" },
|
|
|
|
// giacenza ferramenta
|
|
new StockStatusModel { StockStatusId = 8, ItemID = 11, QtyAvail = 1, IsDeleted = false, IsRemn = false, Location = "S001-002-001" },
|
|
new StockStatusModel { StockStatusId = 9, ItemID = 9, QtyAvail = 1, IsDeleted = false, IsRemn = false, Location = "S001-002-001" },
|
|
new StockStatusModel { StockStatusId = 10, ItemID = 10, QtyAvail = 1, IsDeleted = false, IsRemn = false, Location = "S001-001-001" }
|
|
);
|
|
|
|
// inizializzazione dei valori di default x movimenti giacenze magazzino
|
|
modelBuilder.Entity<StockMovModel>().HasData(
|
|
// giacenza barre grezzo
|
|
new StockMovModel { StockMovID = 1, StockStatusId = 1, QtyRec = 5, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" },
|
|
new StockMovModel { StockMovID = 2, StockStatusId = 2, QtyRec = 8, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" },
|
|
new StockMovModel { StockMovID = 3, StockStatusId = 3, QtyRec = 5, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" },
|
|
|
|
// giacenza vetri
|
|
new StockMovModel { StockMovID = 4, StockStatusId = 4, QtyRec = 1, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" },
|
|
new StockMovModel { StockMovID = 5, StockStatusId = 5, QtyRec = 10, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" },
|
|
new StockMovModel { StockMovID = 6, StockStatusId = 6, QtyRec = 1, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" },
|
|
|
|
// giacenza vernici
|
|
new StockMovModel { StockMovID = 7, StockStatusId = 7, QtyRec = 50, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" },
|
|
|
|
// giacenza ferramenta
|
|
new StockMovModel { StockMovID = 8, StockStatusId = 8, QtyRec = 1, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" },
|
|
new StockMovModel { StockMovID = 9, StockStatusId = 9, QtyRec = 1, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" },
|
|
new StockMovModel { StockMovID = 10, StockStatusId = 10, QtyRec = 1, MovCod = "CAR", UserId = "samuele.locatelli@egalware.com", Note = "DEMO" }
|
|
);
|
|
|
|
// init cost drivers
|
|
modelBuilder.Entity<CostDriverModel>().HasData(
|
|
// Risorsa principale di calcolo produttività/costi
|
|
new CostDriverModel() { CostDriverID = 1, Name = "WorkHour", Unit = "h", Descript = "Ore lavorate per step/fase"},
|
|
new CostDriverModel() { CostDriverID = 2, Name = "Meter", Unit = "m", Descript = "Metri prodotti per step/fase" },
|
|
new CostDriverModel() { CostDriverID = 3, Name = "Unit", Unit = "#", Descript = "Numero unità prodotte (lavorate) per step/fase" }
|
|
);
|
|
|
|
// inizializzazione risorse
|
|
modelBuilder.Entity<ResourceModel>().HasData(
|
|
new ResourceModel { ResourceID = 1, Name = "Sezionatrice", FixedCost = 12000, VariableCost=6000 , OverHeadCost= 5000, CostDriverID = 1 , CostDriverBudget= 220*4, LaborCost=30, OverHeadPerc=0.15M, EBTPerc=0.15M },
|
|
new ResourceModel { ResourceID = 2, Name = "Linea SAOMAD WoodPecker Just 3500", FixedCost = 100000, VariableCost = 30000, OverHeadCost = 15000, CostDriverID = 1, CostDriverBudget = 220 * 8, LaborCost = 40, OverHeadPerc = 0.15M, EBTPerc = 0.15M },
|
|
new ResourceModel { ResourceID = 3, Name = "Linea Pantografo", FixedCost = 24000, VariableCost = 6000, OverHeadCost = 5000, CostDriverID = 1, CostDriverBudget = 220 * 8, LaborCost = 35, OverHeadPerc = 0.15M, EBTPerc = 0.15M },
|
|
new ResourceModel { ResourceID = 4, Name = "Stazione Verniciatura", FixedCost = 24000, VariableCost = 6000, OverHeadCost = 3000, CostDriverID = 1, CostDriverBudget = 220 * 4, LaborCost = 30, OverHeadPerc = 0.15M, EBTPerc = 0.15M },
|
|
new ResourceModel { ResourceID = 5, Name = "Verniciatura Manuale", FixedCost = 6000, VariableCost = 2000, OverHeadCost = 3000, CostDriverID = 1, CostDriverBudget = 220 * 1, LaborCost = 30, OverHeadPerc = 0.15M, EBTPerc = 0.15M },
|
|
new ResourceModel { ResourceID = 6, Name = "Montaggio Manuale", FixedCost = 500, VariableCost = 500, OverHeadCost = 500, CostDriverID = 1, CostDriverBudget = 220 * 8 * 2, LaborCost = 30, OverHeadPerc = 0.15M, EBTPerc = 0.15M },
|
|
new ResourceModel { ResourceID = 7, Name = "Installatore", FixedCost = 0, VariableCost = 3000, OverHeadCost = 0, CostDriverID = 1, CostDriverBudget = 220 * 8 * 2, LaborCost = 40, OverHeadPerc = 0.15M, EBTPerc = 0.15M }
|
|
);
|
|
|
|
// inizializzazione fasi
|
|
modelBuilder.Entity<PhaseModel>().HasData(
|
|
new PhaseModel { PhaseID = 1, Description = "Taglio tronchetti" },
|
|
new PhaseModel { PhaseID = 2, Description = "Lavorazione pezzi serramento" },
|
|
new PhaseModel { PhaseID = 3, Description = "Verniciatura" },
|
|
new PhaseModel { PhaseID = 4, Description = "Assemblaggio completo" },
|
|
new PhaseModel { PhaseID = 5, Description = "Assemblaggio Ferramenta" },
|
|
new PhaseModel { PhaseID = 6, Description = "Installazione e posa in opera" }
|
|
|
|
);
|
|
|
|
// inizializzazione cicli di lavoro
|
|
modelBuilder.Entity<JobModel>().HasData(
|
|
new JobModel { JobID = 1, Description = "Rivendita / servizi" },
|
|
new JobModel { JobID = 2, Description = "Serramento Completo Legno su linea Saomad e installatore interno" }//,
|
|
//new JobModel { JobID = 2, Name = "Serramento Completo Legno/Alluminio" },
|
|
//new JobModel { JobID = 3, Name = "Persiana Legno" },
|
|
//new JobModel { JobID = 4, Name = "restauro Persiana Esistente" }
|
|
);
|
|
|
|
// init righe ciclo (fasi di ciclo)
|
|
modelBuilder.Entity<JobStepModel>().HasData(
|
|
// per fare 1 finestra singola/semplice taglio 4 tronchetti telaio + 4 tronchetti finestra, considero 1 perché mi arriva dal sistema preventivo/motore
|
|
new JobStepModel { JobStepID = 1, JobID = 2, Index = 1, CostDriverID = 3, PhaseID = 1, ProductivityRate = 1, ResourceID = 1 },
|
|
// taglio profilo su linea saomad, considero 1 perché mi arriva dal sistema preventivo/motore
|
|
new JobStepModel { JobStepID = 2, JobID = 2, Index = 2, CostDriverID = 2, PhaseID = 2, ProductivityRate = 1, ResourceID = 2 },
|
|
// verniciatura automatica, considero 1 perché mi arriva dal sistema preventivo/motore
|
|
new JobStepModel { JobStepID = 3, JobID = 2, Index = 3, CostDriverID = 3, PhaseID = 3, ProductivityRate = 1, ResourceID = 4 },
|
|
// assemblaggio
|
|
new JobStepModel { JobStepID = 4, JobID = 2, Index = 4, CostDriverID = 3, PhaseID = 4, ProductivityRate = 1, ResourceID = 6 },
|
|
// installazione
|
|
new JobStepModel { JobStepID = 5, JobID = 2, Index = 5, CostDriverID = 3, PhaseID = 6, ProductivityRate = 1, ResourceID = 7 }
|
|
);
|
|
|
|
// init item righe ciclo (articoli + prodotti delle fasi del ciclo)
|
|
modelBuilder.Entity<JobStepItemModel>().HasData(
|
|
// eventuale scarto del materiale tra grezzo e finito--> porta ad un numero >1 (QUI NON USATO, ho il valore calcolato dal motore)
|
|
new JobStepItemModel { JobStepItemID = 1, JobStepID = 1, Index = 1, ItemID = 1, Qty = 1, Description = "Grezzo legno abete" },
|
|
// 1/10 litro di vernice per metro lineare prodotto
|
|
new JobStepItemModel { JobStepItemID = 2, JobStepID = 3, Index = 2, ItemID = 8, Qty = 0.1, Description = "Vernice trasparente standard 1L" },
|
|
// uso un KIT intero (vs specifico n prodotti singoli) x questo modello; se dal preventivo arrivano n pezzi spcifici, qui li esplodiamo
|
|
new JobStepItemModel { JobStepItemID = 3, JobStepID = 4, Index = 3, ItemID = 9, Qty = 1, Description = "Ferramenta AGB - rif. AGFD.00000.00000" }
|
|
);
|
|
|
|
// inizializzazione dei valori di default x SellingItem
|
|
modelBuilder.Entity<SellingItemModel>().HasData(
|
|
new SellingItemModel { SellingItemID = 1, IsService = false, Description = "Finestra anta Singola", Cost = 820, Margin = 0.2, JobID = 2 },
|
|
new SellingItemModel { SellingItemID = 2, IsService = false, Description = "Persiana anta singola", Cost = 150, Margin = 0.1, JobID = 1 },
|
|
new SellingItemModel { SellingItemID = 3, IsService = true, Description = "Installazione", Cost = 200, Margin = 0.3, JobID = 1 }
|
|
);
|
|
|
|
// inizializzazione dei valori di default x Offer
|
|
modelBuilder.Entity<OfferModel>().HasData(
|
|
new OfferModel { OfferID = 1, RefYear = 2024, RefNum = 1, RefRev = 1, Description = "Offerta per tre serramenti", CustomerID = 2, DealerID = 2 }
|
|
//new OfferModel { OfferID = 2, RefYear = 2025, RefNum = 2, RefRev = 1, Name = "Offerta per un serramento + installazione", CustomerID = 1, DealerID = 1 },
|
|
//new OfferModel { OfferID = 3, RefYear = 2025, RefNum = 3, RefRev = 1, Name = "Offerta per tre serramenti", CustomerID = 2, DealerID = 1 },
|
|
//new OfferModel { OfferID = 5, RefYear = 2025, RefNum = 4, RefRev = 2, Name = "Offerta per cinque serramenti + installazione", CustomerID = 3, DealerID = 2 }
|
|
);
|
|
|
|
// inizializzazione dei valori di default x OfferRow
|
|
modelBuilder.Entity<OfferRowModel>().HasData(
|
|
new OfferRowModel { OfferRowID = 1, OfferID = 1, OfferRowUID = $"OFF{DateTime.Today:yy}0000000001", Inserted = DateTime.Now, Modified = DateTime.Now, BomCost = 950, SellingItemID = 1, Qty = 3, RowNum = 1, SerStruct = "{}", Note = "Finestra anta singola 2025", ItemSteps = "{}", BomOk = true, ItemOk = true },
|
|
new OfferRowModel { OfferRowID = 2, OfferID = 1, OfferRowUID = $"OFF{DateTime.Today:yy}0000000002", Inserted = DateTime.Now, Modified = DateTime.Now, BomCost = 160, SellingItemID = 2, Qty = 3, RowNum = 2, SerStruct = "{}", Note = "Persiana per Finestra anta singola 2025", ItemSteps = "{}", BomOk = true, ItemOk = true },
|
|
new OfferRowModel { OfferRowID = 3, OfferID = 1, OfferRowUID = $"OFF{DateTime.Today:yy}0000000003", Inserted = DateTime.Now, Modified = DateTime.Now, BomCost = 200, SellingItemID = 3, Qty = 3, RowNum = 3, SerStruct = "{}", Note = "Installazione serramento", ItemSteps = "{}", BomOk = true, ItemOk = true }
|
|
);
|
|
|
|
|
|
}
|
|
|
|
#endregion Public Methods
|
|
}
|
|
} |