private string GetGemName()
        {
            var retour = "";

            if (this.IsNotLoot && this.IsDefined && !this.IsFifthBonus)
            {
                CraftBonusModel craftbonus = null;
                GemQualityModel gemQuality = null;
                CaracModel      carac      = null;
                ResistModel     resist     = null;
                SkillModel      skill      = null;
                var             main       = ServiceLocator.Current.GetInstance <MainViewModel>();
                var             realm      = DataProvider.Current.Realms.FirstOrDefault(o => o.Code == main.SelectedTemplate.Realm);

                craftbonus = DataProvider.Current.CraftBonuses.FirstOrDefault(o => o.Stat == this.TypeBonus && o.Value == this.Value);
                if (craftbonus != null)
                {
                    gemQuality = DataProvider.Current.LstGemQualities.FirstOrDefault(o => o.Code == craftbonus.GemQuality);
                    if (gemQuality != null)
                    {
                        if (!string.IsNullOrEmpty(this.Bonus) && this.TypeBonus == "STA")
                        {
                            carac = DataProvider.Current.Caracs.FirstOrDefault(o => o.Code == this.Bonus);
                            if (carac != null)
                            {
                                retour = carac.GemName.ToLower();
                            }
                        }
                        else if (!string.IsNullOrEmpty(this.Bonus) && this.TypeBonus == "RES")
                        {
                            resist = DataProvider.Current.Resists.FirstOrDefault(o => o.Code == this.Bonus);
                            if (resist != null)
                            {
                                retour = resist.GemName.ToLower();
                            }
                        }
                        else if (!string.IsNullOrEmpty(this.Bonus) && this.TypeBonus == "SKI")
                        {
                            skill = DataProvider.Current.Skills.FirstOrDefault(o => o.Code == this.Bonus);
                            if (skill != null)
                            {
                                retour = skill.GemNames.FirstOrDefault(o => o.Realm == "ALL" || o.Realm == realm.Code).Name.ToLower();
                            }
                        }
                        else if (this.TypeBonus == "HP" || this.TypeBonus == "MAN")
                        {
                            carac = DataProvider.Current.Caracs.FirstOrDefault(o => o.Code == this.TypeBonus);
                            if (carac != null)
                            {
                                retour = carac.GemName.ToLower();
                            }
                        }

                        retour = " - " + gemQuality.Full + " " + retour;
                    }
                }
            }
            return(retour);
        }
        private string GetMaterials()
        {
            var retour = "";

            this.LstMaterials.Clear();
            if (this.IsNotLoot && this.IsDefined && !this.IsFifthBonus)
            {
                CraftBonusModel craftbonus = null;
                GemQualityModel gemQuality = null;
                CaracModel      carac      = null;
                ResistModel     resist     = null;
                SkillModel      skill      = null;
                var             main       = ServiceLocator.Current.GetInstance <MainViewModel>();
                var             realm      = DataProvider.Current.Realms.FirstOrDefault(o => o.Code == main.SelectedTemplate.Realm);
                var             type       = DataProvider.Current.TypeBonuses.FirstOrDefault(o => o.Code == this.TypeBonus);
                craftbonus = DataProvider.Current.CraftBonuses.FirstOrDefault(o => o.Stat == this.TypeBonus && o.Value == this.Value);

                if (craftbonus != null && type != null)
                {
                    gemQuality = DataProvider.Current.LstGemQualities.FirstOrDefault(o => o.Code == craftbonus.GemQuality);
                    if (gemQuality != null)
                    {
                        if (!string.IsNullOrEmpty(this.Bonus) && this.TypeBonus == "STA")
                        {
                            carac = DataProvider.Current.Caracs.FirstOrDefault(o => o.Code == this.Bonus);
                            if (carac != null)
                            {
                                retour = "1 " + DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = 1, Material = DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem), Type = 1
                                });
                                retour += "\t" + craftbonus.NbDusts + " " + DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == type.Dust).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = craftbonus.NbDusts, Material = DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == type.Dust), Type = 2
                                });
                                retour += "\t" + craftbonus.NbAgents + " " + DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == carac.Agent).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = craftbonus.NbAgents, Material = DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == carac.Agent), Type = 3
                                });
                            }
                        }
                        else if (!string.IsNullOrEmpty(this.Bonus) && this.TypeBonus == "RES")
                        {
                            resist = DataProvider.Current.Resists.FirstOrDefault(o => o.Code == this.Bonus);
                            if (resist != null)
                            {
                                retour = "1 " + DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = 1, Material = DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem), Type = 1
                                });
                                retour += "\t" + craftbonus.NbDusts + " " + DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == type.Dust).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = craftbonus.NbDusts, Material = DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == type.Dust), Type = 2
                                });
                                retour += "\t" + craftbonus.NbAgents + " " + DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == resist.Agent).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = craftbonus.NbAgents, Material = DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == resist.Agent), Type = 3
                                });
                            }
                        }
                        else if (!string.IsNullOrEmpty(this.Bonus) && this.TypeBonus == "SKI")
                        {
                            skill = DataProvider.Current.Skills.FirstOrDefault(o => o.Code == this.Bonus);
                            if (skill != null && skill.GemNames.Count == 1)
                            {
                                retour = "1 " + DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = 1, Material = DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem), Type = 1
                                });
                                retour += "\t" + craftbonus.NbDusts + " " + DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == skill.GemNames.FirstOrDefault(s => s.Realm == "ALL").Dust).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = craftbonus.NbDusts, Material = DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == skill.GemNames.FirstOrDefault(s => s.Realm == "ALL").Dust), Type = 2
                                });
                                retour += "\t" + craftbonus.NbAgents + " " + DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == skill.GemNames.FirstOrDefault(s => s.Realm == "ALL").Agent).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = craftbonus.NbAgents, Material = DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == skill.GemNames.FirstOrDefault(s => s.Realm == "ALL").Agent), Type = 3
                                });
                            }
                            else if (skill != null)
                            {
                                retour = "1 " + DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = 1, Material = DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem), Type = 1
                                });
                                retour += "\t" + "1 " + DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == skill.GemNames.FirstOrDefault(s => s.Realm == realm.Code).Dust).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = 1, Material = DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == skill.GemNames.FirstOrDefault(s => s.Realm == realm.Code).Dust), Type = 2
                                });
                                foreach (var codeAgent in skill.GemNames.FirstOrDefault(o => o.Realm == realm.Code).Agent.Split(';'))
                                {
                                    retour += "\t" + "1 " + DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == codeAgent).Full + Environment.NewLine;
                                    this.LstMaterials.Add(new MaterialModel()
                                    {
                                        Quantity = 1, Material = DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == codeAgent), Type = 3
                                    });
                                }
                            }
                        }
                        else if (this.TypeBonus == "HP" || this.TypeBonus == "MAN")
                        {
                            carac = DataProvider.Current.Caracs.FirstOrDefault(o => o.Code == this.TypeBonus);
                            if (carac != null)
                            {
                                retour = "1 " + DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = 1, Material = DataProvider.Current.LstGems.FirstOrDefault(o => o.Code == gemQuality.Gem), Type = 1
                                });
                                retour += "\t" + craftbonus.NbDusts + " " + DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == type.Dust).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = craftbonus.NbDusts, Material = DataProvider.Current.LstDusts.FirstOrDefault(o => o.Code == type.Dust), Type = 2
                                });
                                retour += "\t" + craftbonus.NbAgents + " " + DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == type.Agent).Full + Environment.NewLine;
                                this.LstMaterials.Add(new MaterialModel()
                                {
                                    Quantity = craftbonus.NbAgents, Material = DataProvider.Current.LstAgents.FirstOrDefault(o => o.Code == type.Agent), Type = 3
                                });
                            }
                        }
                    }
                    retour = this.GemNameReport + " : \n\t" + retour;
                }
            }
            return(retour);
        }