示例#1
0
        public ActionResult Edit(string episodeId)
        {
            EpisodeEngineDTO episode = EpisodeEngineService.Instance.GetById(episodeId);

            if (episode.Active.Equals(0) || episode.Active == false)
            {
                //episode.Active = true;
            }
            else
            {
                episode.GameId = CurrentFirm.ExternalId;

                episode.initDateAux = new DateTime(episode.initDate);

                episode.finishDateAux = new DateTime(episode.finishDate);


                ViewBag.Icons = Enum.GetValues(typeof(Icons)).Cast <Icons>().Select(i => new SelectListItem
                {
                    Text  = i.ToString(),
                    Value = i.ToString()
                }).ToList();
            }

            if (episode.DaysOfWeek == null || episode.Active == false)
            {
                episode.DaysOfWeek = "";
            }

            return(PartialView("_edit", episode));
        }
        public ActionResult Details(string episodeId, string metricId, string teamId, string playerId)
        {
            MetricEngineDTO metric = MetricEngineService.Instance.GetById(metricId);

            metric.Icon = metric.Icon.Replace("_", "-");

            ViewBag.EpisodeId = episodeId;
            ViewBag.TeamId    = teamId;
            ViewBag.PlayerId  = playerId;

            if (playerId != "empty")
            {
                PlayerEngineDTO player = PlayerEngineService.Instance.GetById(playerId);
                ViewBag.Name = player.Nick;
            }
            else if (teamId != "empty")
            {
                TeamEngineDTO team = TeamEngineService.Instance.GetById(teamId);
                ViewBag.Name = team.Nick;
            }
            else
            {
                EpisodeEngineDTO episode = EpisodeEngineService.Instance.GetById(episodeId);
                ViewBag.Name = episode.Name;
            }

            return(View("Detail", metric));
        }
示例#3
0
        public ActionResult Save(EpisodeEngineDTO episode)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (episode.Active == false)
                    {
                        Success("Campanha não pode ser alterada.");
                    }
                    else
                    {
                        if (episode.Id == null || episode.Id.Equals(""))
                        {
                            episode.Active = true;
                        }


                        episode.initDate = episode.initDateAux.Ticks;

                        episode.finishDate = episode.finishDateAux.Ticks;

                        episode.GameId = CurrentFirm.ExternalId;

                        ValidateModel(episode);

                        EpisodeEngineDTO newEpisode = EpisodeEngineService.Instance.CreateOrUpdate(episode);

                        if (newEpisode == null)
                        {
                            throw new Exception(".");
                        }

                        Success("Campanha atualizada com sucesso.");
                    }
                }
                else
                {
                    episode.Active = true;
                    ViewBag.Icons  = Enum.GetValues(typeof(Icons)).Cast <Icons>().Select(i => new SelectListItem
                    {
                        Text  = i.ToString(),
                        Value = i.ToString()
                    }).ToList();
                    ModelState.AddModelError("", "Alguns campos são obrigatórios para salvar a Campanha.");
                    return(PartialView("_Edit", episode));
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);

                Error("Erro ao atualizar campanha" + ex.Message);
                return(PartialView("_Edit"));
            }

            return(new EmptyResult());
        }
示例#4
0
 public ImplantationDTO()
 {
     Episode    = new EpisodeEngineDTO();
     WorkerType = new WorkerTypeEntity();
     Worker     = new WorkerDTO();
     Team       = new TeamEngineDTO();
     Metric     = new MetricEngineDTO();
     Goal       = new List <GoalEngineDTO>();
 }
示例#5
0
        public ActionResult NewClone(String name, String id)
        {
            long initDate = DateTime.Now.Ticks;

            long finishDate = DateTime.Now.Ticks;

            EpisodeEngineDTO episode = EpisodeEngineService.Instance.Clone(name, id, initDate, finishDate);

            return(new EmptyResult());
        }
示例#6
0
        public ActionResult Clonar(string episodeId)
        {
            EpisodeEngineDTO episode = EpisodeEngineService.Instance.GetById(episodeId);

            ViewBag.Icons = Enum.GetValues(typeof(Icons)).Cast <Icons>().Select(i => new SelectListItem
            {
                Text  = i.ToString(),
                Value = i.ToString()
            }).ToList();

            return(PartialView("_Clone", episode));
        }
示例#7
0
        public ActionResult Create()
        {
            EpisodeEngineDTO episode = new EpisodeEngineDTO();

            episode.Active = true;

            ViewBag.Icons = Enum.GetValues(typeof(Icons)).Cast <Icons>().Select(i => new SelectListItem
            {
                Text  = i.ToString(),
                Value = i.ToString()
            }).ToList();

            return(PartialView("_Edit", episode));
        }
        public ActionResult Index(string episodeId, string teamId, string playerId)
        {
            GetAllDTO all = EpisodeEngineService.Instance.GetByGameIdAndActive(CurrentFirm.ExternalId, 1);

            if (all.List.episode != null && all.List.episode.Count != 0)
            {
                ViewBag.Episodes = from ep in all.List.episode
                                   select new SelectListItem
                {
                    Value = ep.Id.ToString(),
                    Text  = ep.Name
                };

                EpisodeEngineDTO episode = EpisodeEngineService.Instance.GetById(episodeId);

                //ViewBag.Metrics = MetricEngineService.Instance.GetByGameId(CurrentFirm.ExternalId).List.metric;
                ViewBag.Metrics          = MetricEngineService.Instance.GetAllDTOByGame(CurrentFirm.ExternalId, 0, 100).List.metric;
                ViewBag.State            = episode.Active == true ? 1 : 0;
                ViewBag.EpisodeId        = episodeId;
                ViewBag.TeamId           = teamId;
                ViewBag.PlayerId         = playerId;
                ViewBag.Grafic_itens     = changeVisibilityGraph();
                ViewBag.Grafic_stogram   = changeVisibilityGraphStogram();
                ViewBag.Grafic_evolution = changeVisibilityGraphEvolution();
            }
            else
            {
                ViewBag.Grafic_itens     = false;
                ViewBag.Grafic_stogram   = false;
                ViewBag.Grafic_evolution = false;
            }

            ViewBag.GameId = CurrentFirm.ExternalId;

            return(View("Index"));
        }
        public ActionResult DetailsCheckin(string episodeId, string metricId, string teamId, string playerId)
        {
            List <RunEngineDTO> runners = new List <RunEngineDTO>();

            if (playerId != "empty")
            {
                RunEngineDTO runner = RunEngineService.Instance.GetByEpisodeIdAndPlayerId(episodeId, playerId);

                runners.Add(runner);
            }
            else if (teamId != "empty")
            {
                runners = GetRunsByTeamIdRecursive(teamId);
            }
            else
            {
                GetAllDTO all = TeamEngineService.Instance.FindByEpisodeId(episodeId);

                all.List.team = all.List.team.OrderBy(x => x.Nick).ToList();

                List <string> subTeamsNull = all.List.team.Where(x => x.SubOfTeamId == null).Select(x => x.Id).ToList();

                List <TeamEngineDTO> teams = new List <TeamEngineDTO>();

                foreach (string subTeamNull in subTeamsNull)
                {
                    teams.AddRange(OrganizeHierarchy(all.List.team, subTeamNull));
                }

                foreach (TeamEngineDTO team in teams)
                {
                    runners.AddRange(GetRunsByTeamIdRecursive(team.Id));
                }
            }

            MetricEngineDTO metric = MetricEngineService.Instance.GetById(metricId);

            List <LocationDTO> locations = MetricEngineService.Instance.MapPointsByRunsAndMetric(runners, metric);

            List <LocationViewDTO> locs = new List <LocationViewDTO>();

            foreach (LocationDTO location in locations)
            {
                LocationViewDTO loc = new LocationViewDTO();

                loc.Lat  = location.Latitude;
                loc.Lon  = location.Longitude;
                loc.html = location.Description ?? "Check-in";


                locs.Add(loc);
            }

            ViewBag.EpisodeId = episodeId;
            ViewBag.TeamId    = teamId;
            ViewBag.PlayerId  = playerId;
            ViewBag.Locations = Content(JsonConvert.SerializeObject(locs), "application/json");
            ViewBag.MetricId  = metricId;

            if (playerId != "empty")
            {
                PlayerEngineDTO player = PlayerEngineService.Instance.GetById(playerId);
                ViewBag.Name = player.Nick;
            }
            else if (teamId != "empty")
            {
                TeamEngineDTO team = TeamEngineService.Instance.GetById(teamId);
                ViewBag.Name = team.Nick;
            }
            else
            {
                EpisodeEngineDTO episode = EpisodeEngineService.Instance.GetById(episodeId);
                ViewBag.Name = episode.Name;
            }

            return(View("DetailCheckin"));
        }
示例#10
0
        public ContentResult GetChartResults(List <string> metricsIds, string campaignId, string teamId, string workerId, string initDate, string endDate)
        {
            List <ChartResultDTO> rtn = new List <ChartResultDTO>();

            EpisodeEngineDTO episodeObj = EpisodeEngineService.Instance.GetById(campaignId);

            List <string> episodesParam = new List <string>();

            episodesParam.Add(campaignId);

            DateTime initDT;

            if (initDate == null || initDate.Length == 0)
            {
                initDT = DateTime.Now.AddDays(-10);
            }
            else
            {
                initDT = DateTime.Parse(initDate);
            }

            DateTime endDT;

            if (endDate == null || endDate.Length == 0)
            {
                endDT = DateTime.Now;
            }
            else
            {
                endDT = DateTime.Parse(endDate);
            }


            initDT = DateTime.Now.AddMonths(-6);
            endDT  = DateTime.Now.AddDays(1);

            List <string> runners = new List <string>();

            if (!string.IsNullOrEmpty(teamId) && !teamId.Equals("empty"))
            {
                if (!string.IsNullOrEmpty(workerId) && !workerId.Equals("empty"))
                {
                    RunEngineDTO run = RunEngineService.Instance.GetByEpisodeIdAndPlayerId(campaignId, workerId);

                    runners.Add(run.Id);
                }
                else
                {
                    List <RunEngineDTO> runnersObj = GetRunsByTeamIdRecursive(teamId);

                    foreach (RunEngineDTO run in runnersObj)
                    {
                        runners.Add(run.Id);
                    }
                }
            }

            List <string> periods = new List <string>();

            foreach (string item in metricsIds)
            {
                ChartResultDTO chartDTO = new ChartResultDTO();

                List <string> metricParam = new List <string>();

                metricParam.Add(item);

                chartDTO = CardEngineService.Instance.GameAndMetricAndPeriod(runners, episodesParam, episodeObj.GameId, metricParam, initDT.Ticks, endDT.Ticks);

                foreach (EpisodeEngineDTO entrie in chartDTO.Entries)
                {
                    if (!periods.Contains(entrie.Name))
                    {
                        periods.Add(entrie.Name);
                    }
                }

                rtn.Add(chartDTO);
            }

            List <LineDTO> linesDTO = new List <LineDTO>();

            foreach (string period in periods)
            {
                LineDTO line = new LineDTO();

                line.Period = period;

                foreach (ChartResultDTO item in rtn)
                {
                    var query = from entrie in item.Entries
                                where entrie.Name.Equals(period)
                                select new LinePointDTO
                    {
                        MetricName = item.Name,
                        Value      = entrie.Value
                    };

                    if (query.ToList().Count <= 0)
                    {
                        LinePointDTO linePoint = new LinePointDTO();
                        linePoint.MetricName = item.Name;
                        linePoint.Value      = 0;

                        line.Points.Add(linePoint);
                    }
                    else
                    {
                        line.Points.Add(query.FirstOrDefault());
                    }
                }

                linesDTO.Add(line);
            }

            foreach (LineDTO aux in linesDTO)
            {
                aux.dateLong = Convert.ToDateTime(aux.Period).Ticks;
            }

            var lineQuery = from line in linesDTO
                            orderby line.dateLong
                            select line;

            linesDTO = lineQuery.ToList();

            return(Content(JsonConvert.SerializeObject(linesDTO), "application/json"));
        }
示例#11
0
        private string CreateEmail(GameEngineDTO game, string episodeId, string teamId, string playerId, WorkerDTO worker)
        {
            PlayerEngineDTO  player  = playerId == null ? null : PlayerEngineService.Instance.GetById(playerId, email);
            TeamEngineDTO    team    = teamId == null ? null : TeamEngineService.Instance.GetById(teamId, email);
            EpisodeEngineDTO episode = episodeId == null ? null : EpisodeEngineService.Instance.GetById(episodeId, email);
            GetAllDTO        runs    = RunEngineService.Instance.GetAllRunScore(teamId, "", email);
            GetAllDTO        teams   = TeamEngineService.Instance.GetAllTeamScoreByEpisodeId(episode.Id, "", email, 0, 10);

            if (runs.List != null)
            {
                List <PlayerEngineDTO> players = new List <PlayerEngineDTO>();

                foreach (RunEngineDTO run in runs.List.run)
                {
                    try
                    {
                        PlayerEngineDTO p = PlayerEngineService.Instance.GetById(run.PlayerId, email);
                        if (p != null)
                        {
                            players.Add(p);
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }

                runs.List.result = (from run in runs.List.run
                                    from p in players
                                    where p.Id == run.PlayerId
                                    select new ResultEngineDTO
                {
                    Id = p.Id,
                    Nick = p.Nick,
                    Score = run.Score,
                    LogoId = p.LogoId
                }).ToList();

                if (player.Id != null && worker.ProfileName == Profiles.JOGADOR && runs.List.result.Find(x => x.Id == player.Id) == null)
                {
                    RunEngineDTO    playerRun = RunEngineService.Instance.GetRunByPlayerAndTeamId(player.Id, team.Id, email);
                    ResultEngineDTO result    = new ResultEngineDTO
                    {
                        Id     = player.Id,
                        Nick   = player.Nick,
                        Score  = playerRun.Score,
                        LogoId = player.LogoId
                    };

                    runs.List.result.Add(result);
                }
            }

            if (teams.List != null)
            {
                teams.List.result = (from t in teams.List.team
                                     select new ResultEngineDTO
                {
                    Id = t.Id,
                    Nick = t.Nick,
                    Score = t.Score,
                    LogoId = t.LogoId
                }).ToList();
            }

            string emailBody = "<!DOCTYPE html><html xmlns = 'http://www.w3.org/1999/xhtml'><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8;'/><style>body{color: #000000; font-family: Roboto, sans-serif;} h1{font-size: 30px;} h2{font-size: 24px;}h3{font-size: 18px;} strong{color: #1cb29b;} a{text-decoration: none; color: #153643; font-weight: 700;} td{text-align: center;} .image-icon{width:48px;height:48px !important;border-radius:100%;margin-right: 10px;} .score{text-align: right !important; padding-left:15px;} .name{text-align:left !important;} .sucess-goal{color: #1cb29b !important; font-weight: bold;} .alert-goal{color: firebrick;font-weight: bold;} .normal-goal{color: orange; font-weight:bold;}</style></head>";

            emailBody += "<body style = 'margin: 0; padding: 0;'><table align = 'center' border = '0' cellpadding = '0' cellspacing = '0' width = '1000'>";
            emailBody += "</td></tr><tr><td style='padding: 0 0 0 0;' align='center'>";
            emailBody += "</td></tr><tr><td>";
            emailBody += "<table border='0' cellpadding='0' cellspacing='0' width='100%'><tr><td width='260' valign='top'>";
            emailBody += "<tr><td align='center'><img src = 'https://s3.amazonaws.com/gamific-prd/images/logos/empresas/logo-1' width = '340' height = '223'/></td></tr>";
            emailBody += "<tr><td><table border='0' cellpadding='0' cellspacing='0' width='100%'><tr><td><h1 align='center'> Olá " + player.Nick + "!<br/> Aqui estão seus resultados diários</h1></td></tr>";
            emailBody += "<tr><td><h2 align='center'> Campanha " + episode.Name + " </h2></td></tr>";
            emailBody += "<tr><td><h2 align='center'>" + team.Nick + " </h2></td></tr>";
            emailBody += "<tr><td><h3 align='center'> Resultados individuais </h3>";
            emailBody += CreateIndividualResultsTable(team, player, game.Id, worker.ProfileName);
            emailBody += "<h3 align='center'>Ranking dos membros da equipe</h3>";
            emailBody += CreateRankingPlayersFromTeamResultsTable(runs.List != null ? runs.List.result : null, playerId);
            emailBody += "<h3 align='center'>Ranking das equipes na campanha</h3>";
            emailBody += CreateRankingTeamsFromCampaignResultsTable(teams.List != null ? teams.List.result : null, teamId);
            emailBody += "</td></tr></table></td></tr>";
            emailBody += "<tr><td><p align='center'>Acesse o site: <a href='http://www.gamific.com.br/'> Gamific </a></p></td></tr>";
            emailBody += "</table></body></html>";

            return(emailBody);
        }
示例#12
0
        public ContentResult GetCampaign(string campaignId)
        {
            EpisodeEngineDTO rtn = EpisodeEngineService.Instance.GetById(campaignId);

            return(Content(JsonConvert.SerializeObject(rtn), "application/json"));
        }
示例#13
0
 public EpisodeEngineDTO CreateOrUpdate(EpisodeEngineDTO episode)
 {
     return(PostDTO <EpisodeEngineDTO>(ref episode));
 }
        //Sol bebidas
        /// <summary>
        /// Salva as informações do resultado via arquivo
        /// </summary>
        /// <param name="resultsArchive"></param>
        /// <param name="episodeId"></param>
        /// <returns></returns>
        //[Route("salvarResultadoArquivo")]
        //[HttpPost]
        //[CustomAuthorize(Roles = "WORKER,ADMINISTRADOR,SUPERVISOR DE CAMPANHA,SUPERVISOR DE EQUIPE")]
        public ActionResult SaveResultArchiveSolBebidas(HttpPostedFileBase resultsArchive, string episodeId)
        {
            int ANO                = 0;
            int MES                = 1;
            int REPRESENTANTE      = 2;
            int EMAIL              = 3;
            int CLIENTE            = 4;
            int COD_PRODUTO        = 5;
            int PRODUTO            = 6;
            int QTDE_OBJ           = 7;
            int QTDE_REAL          = 8;
            int PERCENT_QTDE       = 9;
            int VLR_OBJ            = 10;
            int VLR_BRUTO_REAL     = 11;
            int PERCENT_VALOR      = 12;
            int VLR_MEDIO_OBJETIVO = 13;
            int VLR_MEDIO_REAL     = 14;
            int TIPO_PRODUTO       = 15;

            EpisodeEngineDTO episode = EpisodeEngineService.Instance.GetById(episodeId);
            string           gameId  = CurrentFirm.ExternalId;

            string errors = "Erros: {0}<br/>";

            List <GoalEngineDTO> goalsTotalFat = new List <GoalEngineDTO>();
            List <GoalEngineDTO> goalsTotalVol = new List <GoalEngineDTO>();

            MetricEngineDTO metricFat;
            MetricEngineDTO metricVol;

            int line        = 1;
            int errorsCount = 0;

            string productType = resultsArchive.FileName.Split(' ')[0];

            try
            {
                metricFat = MetricEngineService.Instance.GetDTOByGameAndName(gameId, productType + " FATURAMENTO");
            }
            catch (Exception e)
            {
                errors += "Metrica (Faturamento) não encontrado.<br/>";
                errorsCount++;
                metricFat = new MetricEngineDTO();
                Debug.Print("Error metric: " + e.Message);
            }

            try
            {
                metricVol = MetricEngineService.Instance.GetDTOByGameAndName(gameId, productType + " VOLUME");
            }
            catch (Exception e)
            {
                errors += "Metrica (Volume) não encontrado.<br/>";
                errorsCount++;
                metricVol = new MetricEngineDTO();
                Debug.Print("Error metric: " + e.Message);
            }

            try
            {
                //EpisodeEngineService.Instance.DeleteAllScoreByEpisodeId(episodeId);

                resultsArchive.SaveAs(Path.Combine(Server.MapPath("~/App_Data"), resultsArchive.FileName));

                var archive = new ExcelQueryFactory(Path.Combine(Server.MapPath("~/App_Data"), Path.GetFileName(resultsArchive.FileName)));

                var rows = from x in archive.WorksheetRange("A1", "O" + rowsCount, "Plan1") select x;

                float points;

                foreach (var row in rows)
                {
                    line++;

                    PlayerEngineDTO player;
                    RunEngineDTO    run;

                    if (row[PRODUTO].ToString().ToLower().Contains("uvinha"))
                    {
                        continue;
                    }

                    try
                    {
                        player = PlayerEngineService.Instance.GetByEmail(row[EMAIL].ToString().Trim().ToLower());
                    }
                    catch (Exception e)
                    {
                        Debug.Print("Error player: " + e.Message);
                        errors += "(Linha -> " + line + "°, Coluna -> 'Representante') " + "Jogador: " + row[EMAIL].ToString().Trim() + " não encontrado.<br/>";
                        errorsCount++;
                        continue;
                    }

                    try
                    {
                        run = RunEngineService.Instance.GetByEpisodeIdAndPlayerId(episodeId, player.Id);
                    }
                    catch (Exception e)
                    {
                        Debug.Print("Error run: " + e.Message);
                        errors += "(Linha -> " + line + "°, Coluna -> 'Email') " + "Jogador: " + row[EMAIL].ToString().Trim() + " não participa desta campanha.<br/>";
                        errorsCount++;
                        continue;
                    }

                    float.TryParse(row[VLR_OBJ].ToString(), out points);
                    if (goalsTotalFat.Find(x => x.RunId == run.Id) != null)
                    {
                        goalsTotalFat.Find(x => x.RunId == run.Id).Goal += points;
                    }
                    else
                    {
                        GoalEngineDTO goalFat;
                        try
                        {
                            goalFat      = GoalEngineService.Instance.GetByRunIdAndMetricId(run.Id, metricFat.Id);
                            goalFat.Goal = points;
                        }
                        catch (Exception e)
                        {
                            goalFat = new GoalEngineDTO
                            {
                                Goal       = points,
                                MetricIcon = metricFat.Icon,
                                MetricId   = metricFat.Id,
                                MetricName = metricFat.Name,
                                Percentage = 0,
                                RunId      = run.Id
                            };

                            Debug.Print("Goal faturamento: " + e.Message);
                        }

                        goalsTotalFat.Add(goalFat);
                    }

                    float.TryParse(row[QTDE_OBJ].ToString(), out points);
                    if (goalsTotalVol.Find(x => x.RunId == run.Id) != null)
                    {
                        goalsTotalVol.Find(x => x.RunId == run.Id).Goal += points;
                    }
                    else
                    {
                        GoalEngineDTO goalVol;
                        try
                        {
                            goalVol      = GoalEngineService.Instance.GetByRunIdAndMetricId(run.Id, metricVol.Id);
                            goalVol.Goal = points;
                        }
                        catch (Exception e)
                        {
                            goalVol = new GoalEngineDTO
                            {
                                Goal       = points,
                                MetricIcon = metricVol.Icon,
                                MetricId   = metricVol.Id,
                                MetricName = metricVol.Name,
                                Percentage = 0,
                                RunId      = run.Id
                            };

                            Debug.Print("Goal volume: " + e.Message);
                        }

                        goalsTotalVol.Add(goalVol);
                    }

                    ItemEngineDTO item = new ItemEngineDTO
                    {
                        GameId = gameId,
                        Name   = row[PRODUTO].ToString().Trim()
                    };

                    try
                    {
                        item = ItemEngineService.Instance.FindByNameAndGameId(item.Name, item.GameId);
                    }
                    catch (Exception e)
                    {
                        item = ItemEngineService.Instance.CreateOrUpdate(item);
                        Debug.Print("Error metric: " + e.Message);
                    }

                    float.TryParse(row[VLR_BRUTO_REAL].ToString(), out points);
                    RunMetricEngineDTO resultFaturamento = new RunMetricEngineDTO
                    {
                        Ceiling     = metricFat.Ceiling,
                        Description = metricFat.Description,
                        Floor       = metricFat.Floor,
                        MetricId    = metricFat.Id,
                        Multiplier  = metricFat.Multiplier,
                        Name        = metricFat.Name,
                        Xp          = 0,
                        Score       = 0,
                        Points      = (int)points,
                        Date        = DateTime.Now.Ticks,
                        PlayerId    = player.Id,
                        ItemId      = item.Id,
                        ItemName    = item.Name,
                        RunId       = run.Id
                    };

                    float.TryParse(row[QTDE_REAL].ToString(), out points);
                    RunMetricEngineDTO resultVolume = new RunMetricEngineDTO
                    {
                        Ceiling     = metricVol.Ceiling,
                        Description = metricVol.Description,
                        Floor       = metricVol.Floor,
                        MetricId    = metricVol.Id,
                        Multiplier  = metricVol.Multiplier,
                        Name        = metricVol.Name,
                        Xp          = 0,
                        Score       = 0,
                        Points      = (int)points,
                        Date        = DateTime.Now.Ticks,
                        PlayerId    = player.Id,
                        ItemId      = item.Id,
                        ItemName    = item.Name,
                        RunId       = run.Id
                    };

                    RunMetricEngineService.Instance.CreateOrUpdate(resultFaturamento);
                    RunMetricEngineService.Instance.CreateOrUpdate(resultVolume);
                }

                foreach (GoalEngineDTO goal in goalsTotalVol)
                {
                    GoalEngineService.Instance.CreateOrUpdate(goal);
                }

                foreach (GoalEngineDTO goal in goalsTotalFat)
                {
                    GoalEngineService.Instance.CreateOrUpdate(goal);
                }

                errors = string.Format(errors, errorsCount);
                string emailFrom = ParameterCache.Get("SUPPORT_EMAIL");
                string subject   = errorsCount >= 1 ? "Erros ao subir planilha de resultados" : "O lançamento de resultados foi um sucesso.";
                subject = CurrentFirm.FirmName + ": " + subject;
                bool r = EmailDispatcher.SendEmail(emailFrom, subject, new List <string>()
                {
                    emailFrom, CurrentUserProfile.Email
                }, errors);

                return(Json(new { Success = true }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception e)
            {
                Debug.Print("Geral Error: " + e.Message);

                return(Json(new { Success = false, Exception = e.Message }, JsonRequestBehavior.DenyGet));
            }
        }