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));
        }
示例#2
0
        static public void SetAllPlayersTrue()
        {
            //string gameId = CurrentFirm.ExternalId;

            GetAllDTO games = GameEngineService.Instance.GetAll(0, 10000, "*****@*****.**");

            foreach (GameEngineDTO game in games.List.game)
            {
                List <WorkerDTO> workers = WorkerRepository.Instance.GetWorkerDTOByExternalGameId(game.Id);
                string           errors  = "";

                foreach (WorkerDTO workerDTO in workers)
                {
                    try
                    {
                        PlayerEngineDTO player = PlayerEngineService.Instance.GetById(workerDTO.ExternalId, "*****@*****.**");
                        player.Active = true;
                        player.Role   = workerDTO.Role;
                        PlayerEngineService.Instance.CreateOrUpdate(player, "*****@*****.**");

                        WorkerEntity worker = WorkerRepository.Instance.GetById(workerDTO.IdWorker);
                        worker.Status = GenericStatus.ACTIVE;
                        WorkerRepository.Instance.UpdateWorker(worker);
                    }
                    catch (Exception e)
                    {
                        errors += workerDTO.Email + " -> " + e.Message + "<br/>";
                    }
                }
            }
        }
示例#3
0
        public ActionResult Edit(string playerId, string teamId, string episodeId)
        {
            try
            {
                PlayerEngineDTO player = PlayerEngineService.Instance.GetById(playerId);
                ViewBag.WorkerName = player.Nick;

                List <WorkerTypeMetricDTO> metricsWorkerType = WorkerTypeMetricRepository.Instance.GetAllFromWorkerByPlayerId(playerId);

                List <MetricEngineDTO> metrics = new List <MetricEngineDTO>();

                foreach (WorkerTypeMetricDTO metric in metricsWorkerType)
                {
                    try
                    {
                        MetricEngineDTO m = MetricEngineService.Instance.GetById(metric.MetricExternalId);
                        metrics.Add(m);
                    }
                    catch (Exception ex)
                    {
                        continue;
                    }
                }

                RunEngineDTO run = RunEngineService.Instance.GetRunByPlayerAndTeamId(playerId, teamId);

                List <GoalEngineDTO> goals = new List <GoalEngineDTO>();
                foreach (MetricEngineDTO metric in metrics)
                {
                    try
                    {
                        GoalEngineDTO goal = GoalEngineService.Instance.GetByRunIdAndMetricId(run.Id, metric.Id);
                        goals.Add(goal);
                    }
                    catch (Exception ex)
                    {
                        GoalEngineDTO goal = new GoalEngineDTO
                        {
                            Goal       = 0,
                            MetricId   = metric.Id,
                            RunId      = run.Id,
                            MetricIcon = metric.Icon,
                            MetricName = metric.Name,
                        };
                        goals.Add(goal);
                        Logger.LogException(ex);
                    }
                }


                return(PartialView("_Edit", goals));
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
                Error("Ocorreu um erro ao tentar adicionar uma meta.", ex);
            }

            return(Redirect("/admin/metas"));
        }
示例#4
0
        public ActionResult Remove(int workerId)
        {
            try
            {
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
                {
                    WorkerEntity worker = WorkerRepository.Instance.GetById(workerId);
                    worker.Status = GenericStatus.INACTIVE;
                    WorkerRepository.Instance.UpdateWorker(worker);
                    //WorkerRepository.Instance.RemoveWorker(worker.Id);

                    //AccountRepository.Instance.RemoveAccount(worker.UserId);

                    //PlayerEngineService.Instance.DeleteById(worker.ExternalId);
                    PlayerEngineDTO player = PlayerEngineService.Instance.GetById(worker.ExternalId);
                    player.Active = false;
                    PlayerEngineService.Instance.CreateOrUpdate(player);

                    scope.Complete();
                }
            }
            catch (Exception e)
            {
                Error("Ocorreu um erro ao remover.");
            }

            ViewBag.NumberOfWorkers = WorkerRepository.Instance.GetCountFromFirm(CurrentFirm.Id);

            return(View("Index"));
        }
示例#5
0
        static public void SaveWorld()
        {
            List <WorkerEntity> workers = WorkerRepository.Instance.GetAll(1);

            foreach (WorkerEntity worker in workers)
            {
                try
                {
                    PlayerEngineDTO player = PlayerEngineService.Instance.GetById(worker.ExternalId, "rubens");

                    UserProfileEntity user = new UserProfileEntity()
                    {
                        CPF        = player.Cpf,
                        Id         = worker.UserId,
                        Email      = player.Email,
                        LastUpdate = DateTime.Now,
                        Name       = player.Nick,
                        Phone      = "99999999"
                    };

                    UserProfileRepository.Instance.CreateUserProfile(user);
                }
                catch (Exception e)
                {
                    Debug.Print(e.Message + " - " + worker.Id + "\n");
                }
            }
        }
示例#6
0
        public string LoginMobile(LoginViewModel model)
        {
            AuthResult      result = new AuthResult();
            PlayerEngineDTO player = null;
            string          json   = "";


            result = AccountHandler.Login(new LoginRequest()
            {
                UserName    = model.Email,
                Password    = model.Password,
                TokenMobile = model.tokenMobile,
                Device      = model.tipoDispositivo
            });

            if (result.AuthStatus == AuthStatus.OK)
            {
                try
                {
                    player          = PlayerEngineService.Instance.GetByEmail(model.Email);
                    player.LogoPath = GetImagePath(player.LogoId);
                }
                catch (Exception e)
                {
                }

                json = JsonConvert.SerializeObject(
                    player,
                    Formatting.Indented,
                    new JsonSerializerSettings {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                }
                    );

                return(json);
            }

            json = JsonConvert.SerializeObject(
                new
            {
                error = result.AuthStatus.ToString()
            },
                Formatting.Indented,
                new JsonSerializerSettings {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }
                );

            return(json);
        }
示例#7
0
        static public void MigrationEmailToEngine()
        {
            List <DataEntity> entityList = DataRepository.Instance.GetAll(0, 100);


            foreach (DataEntity entity in entityList)
            {
                GameEngineDTO game = new GameEngineDTO
                {
                    Adress       = entity.Adress,
                    City         = entity.City,
                    LogoId       = entity.LogoId,
                    Name         = entity.FirmName,
                    Neighborhood = entity.Neighborhood,
                    Phone        = entity.Phone,
                    Id           = entity.ExternalId,
                    LogoPath     = CurrentURL + entity.LogoId
                };
                game = GameEngineService.Instance.CreateOrUpdate(game, "*****@*****.**");

                //List<WorkerDTO> workers = WorkerRepository.Instance.GetAllFromFirm(entity.ExternalId);

                List <WorkerDTO> workers = WorkerRepository.Instance.GetWorkerDTOByExternalGameId(entity.ExternalId);
                string           errors  = "";

                foreach (WorkerDTO worker in workers)
                {
                    try
                    {
                        PlayerEngineDTO player = new PlayerEngineDTO();
                        player.Email    = worker.Email;
                        player.Cpf      = worker.Cpf;
                        player.Role     = worker.Role;
                        player.LogoId   = worker.LogoId;
                        player.LogoPath = CurrentURL + player.LogoId;
                        player.Id       = worker.ExternalId;
                        player.GameId   = entity.ExternalId;
                        player.Nick     = worker.Name;
                        player.Xp       = 1;
                        player.Level    = 1;
                        PlayerEngineService.Instance.CreateOrUpdate(player, "*****@*****.**");
                    }
                    catch (Exception e)
                    {
                        errors += worker.Email + " -> " + e.Message + "<br/>";
                    }
                }
            }
        }
示例#8
0
        public ActionResult Edit(int workerId)
        {
            WorkerDTO        worker       = WorkerRepository.Instance.GetDTOById(workerId);
            PlayerEngineDTO  workerEngine = PlayerEngineService.Instance.GetById(worker.ExternalId);
            WorkerTypeEntity workerType   = WorkerTypeRepository.Instance.GetById(worker.WorkerTypeId);

            worker.Role        = workerType.ProfileName.ToString();
            worker.ProfileName = workerType.ProfileName;

            worker.TotalXp = (int)workerEngine.Xp;

            ViewBag.Types = GetWorkerTypesToSelect(worker.WorkerTypeId);

            return(PartialView("_Edit", worker));
        }
示例#9
0
        public ActionResult Save(WorkerDTO entity, HttpPostedFileBase logoUpload)
        {
            try
            {
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
                {
                    if (ModelState.IsValid)
                    {
                        ImageEntity imageSaving = new ImageEntity();
                        if (logoUpload != null && logoUpload.ContentLength > 0)
                        {
                            imageSaving.Status    = GenericStatus.ACTIVE;
                            imageSaving.UpdatedBy = CurrentUserId;

                            byte[] cover = null;
                            using (var memoryStream = new MemoryStream())
                            {
                                logoUpload.InputStream.CopyTo(memoryStream);
                                if (memoryStream.Length > 0)
                                {
                                    using (Image image = Bitmap.FromStream(memoryStream))
                                    {
                                        logoUpload.InputStream.CopyTo(memoryStream);
                                        if (memoryStream.Length > 0)
                                        {
                                            cover = memoryStream.ToArray();
                                        }
                                    }
                                }
                            }

                            //if (entity.LogoId > 0)
                            {
                                //imageSaving.Id = entity.LogoId;
                            }
                            //else
                            {
                                imageSaving = ImageRepository.Instance.CreateImage(imageSaving);
                            }

                            ImageRepository.Instance.SaveOrReplaceLogo(imageSaving.Id, cover);

                            entity.LogoId = imageSaving.Id;
                        }

                        if (entity.IdWorker > 0)
                        {
                            PlayerEngineDTO  player     = PlayerEngineService.Instance.GetById(entity.ExternalId);
                            WorkerTypeEntity workerType = WorkerTypeRepository.Instance.GetById(entity.WorkerTypeId);

                            UserProfileEntity userProfile = new UserProfileEntity();

                            userProfile.Id    = entity.IdUser;
                            userProfile.Name  = entity.Name;
                            userProfile.Email = entity.Email;
                            userProfile.CPF   = entity.Cpf.Replace(".", "").Replace("-", "");
                            userProfile.Phone = entity.Phone;

                            ValidateModel(userProfile);

                            WorkerEntity worker = new WorkerEntity();

                            worker.Status         = GenericStatus.ACTIVE;
                            worker.FirmId         = CurrentFirm.Id;
                            worker.ExternalFirmId = CurrentFirm.ExternalId;
                            worker.WorkerTypeId   = entity.WorkerTypeId;
                            worker.UserId         = entity.IdUser;
                            worker.Id             = entity.IdWorker;
                            worker.LogoId         = entity.LogoId;
                            worker.UpdatedBy      = CurrentUserId;
                            worker.ExternalId     = player.Id;

                            ValidateModel(worker);

                            WorkerRepository.Instance.UpdateWorker(worker);

                            UserProfileRepository.Instance.UpdateUserProfile(userProfile);

                            UserAccountEntity acc = AccountRepository.Instance.GetById(entity.IdUser);

                            acc.UserName = userProfile.Email;

                            AccountRepository.Instance.Update(acc);

                            player.Nick     = userProfile.Name;
                            player.Role     = workerType.ProfileName.ToString();
                            player.LogoId   = worker.LogoId;
                            player.Xp       = entity.TotalXp;
                            player.Email    = entity.Email;
                            player.Cpf      = entity.Cpf;
                            player.LogoPath = CurrentURL + player.LogoId;
                            player.Active   = true;
                            player.GameId   = CurrentFirm.ExternalId;
                            PlayerEngineService.Instance.CreateOrUpdate(player);

                            Success("Funcionário atualizado com sucesso.");
                            scope.Complete();
                        }
                        else
                        {
                            WorkerTypeEntity workerType = WorkerTypeRepository.Instance.GetById(entity.WorkerTypeId);

                            NewRequest request = new NewRequest();
                            AuthResult result  = new AuthResult();

                            request.Cpf      = entity.Cpf.Replace("-", "").Replace(".", "");
                            request.Name     = entity.Name;
                            request.Phone    = entity.Phone;
                            request.Email    = entity.Email;
                            request.Username = entity.Email;
                            request.Password = request.Cpf;

                            result = AccountHandler.CreateFirmUser(request, Roles.WORKER);

                            if (!AuthStatus.OK.Equals(result.AuthStatus))
                            {
                                Error(AccountHelper.HandleError(result));

                                ViewBag.Types = GetWorkerTypesToSelect(entity.WorkerTypeId);

                                ModelState.AddModelError("", "Ocorreu um erro ao salvar o funcionário.");

                                return(PartialView("_Edit", entity));
                            }

                            WorkerEntity worker = new WorkerEntity();

                            worker.Status         = GenericStatus.ACTIVE;
                            worker.FirmId         = CurrentFirm.Id;
                            worker.ExternalFirmId = CurrentFirm.ExternalId;
                            worker.UserId         = result.UserId;
                            worker.WorkerTypeId   = entity.WorkerTypeId;
                            worker.LogoId         = entity.LogoId;
                            worker.UpdatedBy      = CurrentUserId;

                            ValidateModel(worker);

                            PlayerEngineDTO player = PlayerEngineService.Instance.CreateOrUpdate(
                                new PlayerEngineDTO
                            {
                                GameId   = worker.ExternalFirmId,
                                Nick     = request.Name,
                                Role     = workerType.ProfileName.ToString(),
                                Level    = 1,
                                LogoId   = worker.LogoId,
                                Cpf      = entity.Cpf.Replace(".", "").Replace("-", ""),
                                Email    = entity.Email,
                                Xp       = 1,
                                LogoPath = CurrentURL + worker.LogoId,
                                Active   = true
                            });

                            worker.ExternalId = player.Id;

                            WorkerRepository.Instance.CreateWorker(worker);

                            Success("Funcionário criado com sucesso.");
                            scope.Complete();
                        }
                    }
                    else
                    {
                        ViewBag.Types = GetWorkerTypesToSelect(entity.WorkerTypeId);

                        ModelState.AddModelError("", "Alguns campos são obrigatórios para salvar o funcionário.");

                        return(PartialView("_Edit", entity));
                    }
                }
            }
            catch (Exception ex)
            {
                Error("Houve um erro ao salvar funcionário.");

                Logger.LogException(ex);

                ModelState.AddModelError("", "Ocorreu um erro ao tentar salvar o funcionário.");

                ViewBag.Types = GetWorkerTypesToSelect(entity.WorkerTypeId);

                return(PartialView("_Edit", entity));
            }

            return(new EmptyResult());
        }
        public ActionResult Save(UserProfileEntity entity, HttpPostedFileBase logoUpload)
        {
            WorkerEntity currentWorker = CurrentWorker;

            try
            {
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
                {
                    if (ModelState.IsValid)
                    {
                        ImageEntity imageSaving = new ImageEntity();
                        if (logoUpload != null && logoUpload.ContentLength > 0)
                        {
                            imageSaving.Status    = GenericStatus.ACTIVE;
                            imageSaving.UpdatedBy = CurrentUserId;

                            byte[] cover = null;
                            using (var memoryStream = new MemoryStream())
                            {
                                logoUpload.InputStream.CopyTo(memoryStream);
                                if (memoryStream.Length > 0)
                                {
                                    using (Image image = Bitmap.FromStream(memoryStream))
                                    {
                                        logoUpload.InputStream.CopyTo(memoryStream);
                                        if (memoryStream.Length > 0)
                                        {
                                            cover = memoryStream.ToArray();
                                        }
                                    }
                                }
                            }

                            //if (currentWorker.LogoId <= 0)
                            {
                                imageSaving = ImageRepository.Instance.CreateImage(imageSaving);
                            }
                            //else
                            {
                                //imageSaving.Id = currentWorker.LogoId;
                            }

                            ImageRepository.Instance.SaveOrReplaceLogo(imageSaving.Id, cover);

                            currentWorker.LogoId = imageSaving.Id;

                            WorkerRepository.Instance.UpdateWorker(currentWorker);
                        }

                        ViewBag.LogoId = currentWorker.LogoId;

                        ValidateModel(entity);

                        entity.CPF = entity.CPF.Replace(".", "").Replace("/", "");

                        PlayerEngineDTO player = PlayerEngineService.Instance.GetById(currentWorker.ExternalId);

                        player.LogoId   = currentWorker.LogoId;
                        player.LogoPath = CurrentURL + player.LogoId;
                        player.Nick     = entity.Name;
                        player.Cpf      = entity.CPF;

                        player = PlayerEngineService.Instance.CreateOrUpdate(player);

                        UserProfileRepository.Instance.UpdateUserProfile(entity);

                        Success("Perfil atualizado com sucesso.");
                        scope.Complete();
                    }
                    else
                    {
                        Warning("Alguns campos são obrigatórios para salvar o perfil.");
                        return(View("Edit", entity));
                    }
                }
            }
            catch (Exception ex)
            {
                ViewBag.LogoId = currentWorker.LogoId;

                Logger.LogException(ex);
                Error("Ocorreu um erro ao tentar salvar o perfil.", ex);
            }

            ViewBag.LogoId = currentWorker.LogoId;

            if (IsSystemAdmin)
            {
                return(Redirect("/admin/empresas/"));
            }
            else
            {
                if (CurrentWorkerType.ProfileName.Equals(Profiles.ADMINISTRADOR))
                {
                    return(Redirect("/public/dashboard"));
                }
                else
                {
                    return(Redirect("/public/resultadosIndividuais"));
                }
            }
        }
示例#11
0
        private MemoryStream CreateXls()
        {
            List <UserAccountEntity>    accontEntityResults = AccountRepository.Instance.GetAll();
            List <AccountDevicesEntity> accontDeviceEntitys = AccountDevicesRepository.Instance.FindAll();
            List <UserProfileEntity>    userProfileEntitys  = UserProfileRepository.Instance.GetAllUsers();
            string filename = "Input" + DateTime.Now.ToString("yyyyMMdd_hhss") + ".xls";

            /*var workbook = new Workbook();
             *
             *
             * workbook.FileName = filename;
             *
             * var worksheetResults = workbook.Worksheets[0];
             *
             * int rowsCount = 40000;
             *
             * worksheetResults.Cells.HideColumns(5, 16384);
             * worksheetResults.Cells.HideRows(rowsCount, 1048576);
             * worksheetResults.Cells.StandardWidth = 35.0;
             *
             * worksheetResults.Name = "Contra_Relatorio";
             *
             * var cellsResults = worksheetResults.Cells;
             *
             * cellsResults["A1"].PutValue("Nome");
             * cellsResults["B1"].PutValue("Email");
             * cellsResults["C1"].PutValue("Empresa");
             * cellsResults["D1"].PutValue("Web");
             * cellsResults["E1"].PutValue("Mobile");
             *
             * var validations = worksheetResults.Validations;
             *
             * var validationName = validations[validations.Add()];
             * validationName.Type = ValidationType.List;
             * validationName.Operator = OperatorType.Between;
             * validationName.InCellDropDown = true;
             * validationName.ShowError = true;
             * validationName.AlertStyle = ValidationAlertType.Stop;
             * CellArea areaName;
             * areaName.StartRow = 1;
             * areaName.EndRow = rowsCount;
             * areaName.StartColumn = 0;
             * areaName.EndColumn = 0;
             * validationName.AreaList.Add(areaName);
             *
             * var validationEmail = validations[validations.Add()];
             * validationEmail.Type = ValidationType.TextLength;
             * validationEmail.Operator = OperatorType.None;
             * validationEmail.InCellDropDown = false;
             * validationEmail.ShowError = true;
             * validationEmail.AlertStyle = ValidationAlertType.Stop;
             * CellArea areaEmails;
             * areaEmails.StartRow = 1;
             * areaEmails.EndRow = rowsCount;
             * areaEmails.StartColumn = 1;
             * areaEmails.EndColumn = 1;
             * validationEmail.AreaList.Add(areaEmails);
             *
             * var validationEmpresa = validations[validations.Add()];
             * validationEmpresa.Type = ValidationType.WholeNumber;
             * validationEmpresa.Operator = OperatorType.Between;
             * validationEmpresa.Formula1 = 0.ToString();
             * validationEmpresa.Formula2 = Int32.MaxValue.ToString();
             * validationEmpresa.InCellDropDown = false;
             * validationEmpresa.ShowError = true;
             * validationEmpresa.AlertStyle = ValidationAlertType.Stop;
             * CellArea areaEmpresa;
             * areaEmpresa.StartRow = 1;
             * areaEmpresa.EndRow = rowsCount;
             * areaEmpresa.StartColumn = 2;
             * areaEmpresa.EndColumn = 2;
             * validationEmpresa.AreaList.Add(areaEmpresa);
             *
             * var validationWeb = validations[validations.Add()];
             * validationWeb.Type = ValidationType.Date;
             * validationWeb.Operator = OperatorType.Between;
             * DateTime firstDate = DateTime.MinValue;
             * validationWeb.Formula1 = firstDate.AddYears(1899).ToString().Split(' ')[0];
             * validationWeb.Formula2 = DateTime.Now.ToString().Split(' ')[0];
             * validationWeb.InCellDropDown = false;
             * validationWeb.ShowError = true;
             * validationWeb.AlertStyle = ValidationAlertType.Stop;
             * CellArea areaWeb;
             * areaWeb.StartRow = 1;
             * areaWeb.EndRow = rowsCount;
             * areaWeb.StartColumn = 3;
             * areaWeb.EndColumn = 3;
             * validationWeb.AreaList.Add(areaWeb);
             *
             * var validationMobile = validations[validations.Add()];
             * validationMobile.Type = ValidationType.Date;
             * validationMobile.Operator = OperatorType.Between;
             * DateTime secondDate = DateTime.MinValue;
             * validationMobile.Formula1 = secondDate.AddYears(1899).ToString().Split(' ')[0];
             * validationMobile.Formula2 = DateTime.Now.ToString().Split(' ')[0];
             * validationMobile.InCellDropDown = false;
             * validationMobile.ShowError = true;
             * validationMobile.AlertStyle = ValidationAlertType.Stop;
             * CellArea areaMobile;
             * areaMobile.StartRow = 1;
             * areaMobile.EndRow = rowsCount;
             * areaMobile.StartColumn = 4;
             * areaMobile.EndColumn = 4;
             * validationMobile.AreaList.Add(areaMobile);
             */
            MemoryStream ms = new MemoryStream();
            //int row = 2;

            string util = "<table>";

            util = util + "<tr> <th>Nome</th> <th>Email</th> <th>Empresa</th> <th>Web</th> <th>Mobile</th> </tr>";
            foreach (UserProfileEntity userProfileEntity in userProfileEntitys)
            {
                util = util + "<tr>";
                PlayerEngineDTO      player = null;
                AccountDevicesEntity device = null;
                bool token = true;
                try
                {
                    player = PlayerEngineService.Instance.GetByEmail(userProfileEntity.Email, true);
                    //player = PlayerEngineService.Instance.GetByEmail("*****@*****.**", true);
                }
                catch (Exception ex)
                {
                    token = false;
                }

                try
                {
                    //device = AccountDevicesRepository.Instance.FindByPlayerIdDescending(player.Id).First();
                }
                catch (Exception ex)
                {
                    device = null;
                }


                //cellsResults["A" + row].PutValue(userProfileEntity.Name);
                //cellsResults["B" + row].PutValue(userProfileEntity.Email);
                util = util + "<th>" + userProfileEntity.Name + "</th>";
                util = util + "<th>" + userProfileEntity.Email + "</th>";
                //util = util + "<th>" + player.Nick + "</th>";
                //util = util + "<th>" + player.Email + "</th>";

                if (token)
                {
                    GameEngineDTO game = GameEngineService.Instance.GetById(player.GameId, player.Email);
                    util = util + "<th>" + game.Name + "</th>";
                }
                else
                {
                    util = util + "<th>" + "------" + "</th>";
                }



                try
                {
                    //cellsResults["D" + row].PutValue(accontEntityResult.LastLogin);
                    util = util + "<th>" + AccountRepository.Instance.FindByUserName(player.Email).LastUpdate + "</th>";
                }catch (Exception ex)
                {
                    util = util + "<th>" + "--------" + "</th>";
                }



                try
                {
                    //cellsResults["E" + row].PutValue(device.Last_Update);
                    util = util + "<th>" + device.Last_Update + "</th>";
                }
                catch (Exception ex)
                {
                    //cellsResults["E" + row].PutValue("----");
                    util = util + "<th>" + "-----" + "</th>";
                }



                //row++;
                util = util + "</tr>";
            }

            //ms = workbook.SaveToStream();

            //Send(new EmailSupportDTO { Msg = util , Category = "", Subject = "Contra-relatorio" },"*****@*****.**", ms, filename);
            Send(new EmailSupportDTO {
                Msg = util, Category = "", Subject = "Contra-relatorio"
            }, "*****@*****.**", ms, filename);
            Send(new EmailSupportDTO {
                Msg = util, Category = "", Subject = "Contra-relatorio"
            }, "*****@*****.**", ms, filename);
            //Send(new EmailSupportDTO { Msg = util , Category = "", Subject = "Contra-relatorio" }, "*****@*****.**", ms, filename);


            return(null); //ms;
        }
示例#12
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);
        }
示例#13
0
 public PlayerEngineDTO CreateOrUpdate(PlayerEngineDTO player, string email)
 {
     return(PostDTO <PlayerEngineDTO>(ref player, email));
 }
示例#14
0
 public PlayerEngineDTO CreateOrUpdate(PlayerEngineDTO player)
 {
     return(PostDTO <PlayerEngineDTO>(ref player));
 }
示例#15
0
        public ActionResult Save(FirmDTO entity, HttpPostedFileBase logoUpload)
        {
            try
            {
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
                {
                    if (ModelState.IsValid)
                    {
                        ImageEntity imageSaving = new ImageEntity();
                        if (logoUpload != null && logoUpload.ContentLength > 0)
                        {
                            imageSaving.Status    = GenericStatus.ACTIVE;
                            imageSaving.UpdatedBy = CurrentUserId;

                            byte[] cover = null;
                            using (var memoryStream = new MemoryStream())
                            {
                                logoUpload.InputStream.CopyTo(memoryStream);
                                if (memoryStream.Length > 0)
                                {
                                    using (Image image = Bitmap.FromStream(memoryStream))
                                    {
                                        logoUpload.InputStream.CopyTo(memoryStream);
                                        if (memoryStream.Length > 0)
                                        {
                                            cover = memoryStream.ToArray();
                                        }
                                    }
                                }
                            }

                            if (entity.DataInfo.LogoId > 0)
                            {
                                imageSaving.Id = entity.DataInfo.LogoId;
                            }
                            else
                            {
                                imageSaving = ImageRepository.Instance.CreateImage(imageSaving);
                            }

                            ImageRepository.Instance.SaveOrReplaceLogo(imageSaving.Id, cover);

                            entity.DataInfo.LogoId = imageSaving.Id;
                        }

                        entity.DataInfo.UpdatedBy = CurrentUserId;

                        if (entity.DataInfo.Id > 0)
                        {
                            if (entity.Status == 0)
                            {
                                entity.DataInfo.Status = GenericStatus.INACTIVE;
                            }
                            else
                            {
                                entity.DataInfo.Status = GenericStatus.ACTIVE;
                            }

                            ValidateModel(entity.DataInfo);

                            GameEngineDTO game = new GameEngineDTO
                            {
                                Adress       = entity.DataInfo.Adress,
                                City         = entity.DataInfo.City,
                                LogoId       = entity.DataInfo.LogoId,
                                Name         = entity.DataInfo.FirmName,
                                Neighborhood = entity.DataInfo.Neighborhood,
                                Phone        = entity.DataInfo.Phone,
                                Id           = entity.DataInfo.ExternalId,
                                LogoPath     = CurrentURL + entity.DataInfo.LogoId,
                                Description  = entity.DataInfo.Cnpj
                            };

                            try
                            {
                                game = GameEngineService.Instance.CreateOrUpdate(game, "*****@*****.**");
                            }
                            catch (Exception e)
                            {
                                Logger.LogError(e.Message);
                            }


                            List <WorkerDTO> workers = WorkerRepository.Instance.GetAllFromFirm(entity.DataInfo.Id);

                            if (entity.DataInfo.Status == GenericStatus.ACTIVE)
                            {
                                foreach (WorkerDTO item in workers)
                                {
                                    UserAccountEntity acc = AccountRepository.Instance.GetById(item.IdUser);

                                    acc.Status = GenericStatus.ACTIVE;

                                    AccountRepository.Instance.Update(acc);
                                }
                            }
                            else
                            {
                                foreach (WorkerDTO item in workers)
                                {
                                    UserAccountEntity acc = AccountRepository.Instance.GetById(item.IdUser);

                                    acc.Status = GenericStatus.INACTIVE;

                                    AccountRepository.Instance.Update(acc);
                                }
                            }

                            DataRepository.Instance.UpdateFirm(entity.DataInfo);
                        }
                        else
                        {
                            if (!entity.Password.Equals(entity.PasswordConfirmation))
                            {
                                Warning("As duas senhas digitadas não conferem.");
                            }

                            NewRequest request = new NewRequest();

                            AuthResult result = new AuthResult();

                            request.Cpf      = entity.ProfileInfo.CPF;
                            request.Name     = entity.ProfileInfo.Name;
                            request.Phone    = entity.ProfileInfo.Phone;
                            request.Password = entity.Password;
                            request.Email    = entity.ProfileInfo.Email;
                            request.Username = entity.Username;

                            result = AccountHandler.CreateFirmUser(request, Roles.WORKER);

                            if (!AuthStatus.OK.Equals(result.AuthStatus))
                            {
                                Error(AccountHelper.HandleError(result));

                                return(View("Create", entity));
                            }

                            ValidateModel(entity.DataInfo);

                            GameEngineDTO game = new GameEngineDTO
                            {
                                Adress       = entity.DataInfo.Adress,
                                City         = entity.DataInfo.City,
                                LogoId       = entity.DataInfo.LogoId,
                                Name         = entity.DataInfo.FirmName,
                                Neighborhood = entity.DataInfo.Neighborhood,
                                Phone        = entity.DataInfo.Phone,
                                Id           = entity.DataInfo.ExternalId,
                                Description  = entity.DataInfo.Cnpj
                            };
                            game = GameEngineService.Instance.CreateOrUpdate(game, "*****@*****.**");



                            entity.DataInfo.ExternalId = game.Id;

                            entity.DataInfo.Status = GenericStatus.ACTIVE;

                            entity.DataInfo = DataRepository.Instance.CreateFirm(entity.DataInfo);

                            WorkerEntity worker = new WorkerEntity();

                            WorkerTypeEntity workerType = new WorkerTypeEntity();

                            workerType.FirmId      = entity.DataInfo.Id;
                            workerType.ProfileName = Profiles.ADMINISTRADOR;
                            workerType.Status      = GenericStatus.ACTIVE;
                            workerType.TypeName    = "ADMINISTRADOR";
                            workerType.UpdatedBy   = CurrentUserId;

                            workerType = WorkerTypeRepository.Instance.CreateWorkerType(workerType);

                            worker.WorkerTypeId = workerType.Id;
                            worker.UserId       = result.UserId;
                            worker.UpdatedBy    = CurrentUserId;
                            worker.FirmId       = entity.DataInfo.Id;
                            worker.Status       = GenericStatus.ACTIVE;
                            worker.LogoId       = entity.DataInfo.LogoId;

                            PlayerEngineDTO player = new PlayerEngineDTO
                            {
                                Nick   = request.Name,
                                Xp     = 1,
                                Level  = 1,
                                Role   = workerType.TypeName,
                                GameId = game.Id,
                                LogoId = worker.LogoId,
                                Email  = entity.ProfileInfo.Email,
                                Cpf    = entity.ProfileInfo.CPF,
                                Active = true
                            };
                            player = PlayerEngineService.Instance.CreateOrUpdate(player, "*****@*****.**");

                            worker.ExternalId     = player.Id;
                            worker.ExternalFirmId = game.Id;

                            worker = WorkerRepository.Instance.CreateWorker(worker);
                        }

                        Success("Empresa salva com sucesso.");
                        scope.Complete();
                    }
                    else
                    {
                        Warning("Alguns campos são obrigatórios para salvar a empresa.");

                        if (entity.DataInfo.Id > 0)
                        {
                            ViewBag.Status = GetStatusToSelect(entity.DataInfo.Status == GenericStatus.ACTIVE ? 1 : 0);

                            return(View("Edit", entity));
                        }
                        else
                        {
                            return(View("Create", entity));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
                Error("Ocorreu um erro ao tentar salvar a empresa.", ex);

                if (entity.DataInfo.Id > 0)
                {
                    ViewBag.Status = GetStatusToSelect(entity.DataInfo.Status == GenericStatus.ACTIVE ? 1 : 0);

                    return(View("Edit", entity));
                }
                else
                {
                    return(View("Create", entity));
                }
            }

            return(View("Index"));
        }
示例#16
0
        public ActionResult SaveWorkersArchive(HttpPostedFileBase workersArchive)
        {
            try
            {
                string gameId = CurrentFirm.ExternalId;

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

                string path = Path.Combine(Server.MapPath("~/App_Data"), workersArchive.FileName);

                var archive = new ExcelQueryFactory(path);

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

                foreach (var row in rows)
                {
                    if (!string.IsNullOrWhiteSpace(row[0].ToString()) && !string.IsNullOrWhiteSpace(row[1].ToString()) && !string.IsNullOrWhiteSpace(row[2].ToString()) && !string.IsNullOrWhiteSpace(row[4].ToString()))
                    {
                        NewRequest request = new NewRequest();

                        AuthResult result = new AuthResult();

                        request.Cpf      = row[3].ToString();
                        request.Name     = row[0].ToString();
                        request.Phone    = row[2].ToString();
                        request.Password = "******";
                        request.Email    = row[1].ToString();
                        request.Username = row[1].ToString();

                        result = AccountHandler.CreateFirmUser(request, Roles.WORKER);

                        WorkerTypeEntity workerType = WorkerTypeRepository.Instance.GetByGameIdAndTypeName(gameId, row[4].ToString());

                        if (AuthStatus.OK.Equals(result.AuthStatus))
                        {
                            WorkerEntity worker = new WorkerEntity();

                            worker.Status         = GenericStatus.ACTIVE;
                            worker.FirmId         = CurrentFirm.Id;
                            worker.UserId         = result.UserId;
                            worker.ExternalFirmId = CurrentFirm.ExternalId;
                            worker.WorkerTypeId   = workerType.Id;
                            worker.UpdatedBy      = CurrentUserId;

                            ValidateModel(worker);

                            PlayerEngineDTO dto = new PlayerEngineDTO
                            {
                                Level    = 1,
                                Xp       = 1,
                                Nick     = request.Name,
                                Role     = workerType.ProfileName.ToString(),
                                GameId   = worker.ExternalFirmId,
                                LogoId   = worker.LogoId,
                                Cpf      = request.Cpf,
                                Email    = request.Email,
                                LogoPath = CurrentURL + worker.LogoId,
                                Active   = true
                            };

                            dto = PlayerEngineService.Instance.CreateOrUpdate(dto);

                            worker.ExternalId = dto.Id;

                            worker = WorkerRepository.Instance.CreateWorker(worker);
                        }
                    }
                }

                Success("Funcionários criados com sucesso.");
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);

                ModelState.AddModelError("", "Ocorreu um erro ao tentar salvar os funcionários via arquivo.");

                return(PartialView("_WorkersArchive"));
            }

            return(new EmptyResult());
        }
示例#17
0
        public string UploadImage(string playerId, byte[] image)
        {
            try
            {
                WorkerDTO       worker = WorkerRepository.Instance.GetDTOByExternalId(playerId);
                PlayerEngineDTO player = PlayerEngineService.Instance.GetById(playerId, worker.Email);

                ImageEntity imageSaving = new ImageEntity
                {
                    Status    = GenericStatus.ACTIVE,
                    UpdatedBy = CurrentUserId
                };

                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
                {
                    //if (player.LogoId > 0)
                    {
                        // imageSaving.Id = player.LogoId;
                    }
                    //else
                    {
                        imageSaving     = ImageRepository.Instance.CreateImage(imageSaving);
                        player.LogoId   = imageSaving.Id;
                        player.LogoPath = GetImagePath(player.LogoId);

                        WorkerEntity workerEntity = WorkerRepository.Instance.GetByExternalId(player.Id);
                        workerEntity.LogoId = player.LogoId;
                        WorkerRepository.Instance.UpdateWorker(workerEntity);

                        PlayerEngineService.Instance.CreateOrUpdate(player, player.Email);
                    }

                    ImageRepository.Instance.SaveOrReplaceLogo(player.LogoId, image);

                    scope.Complete();
                }

                string json = JsonConvert.SerializeObject(
                    new
                {
                    message  = "Sucess",
                    logoPath = GetImagePath(player.LogoId)
                },
                    Formatting.Indented,
                    new JsonSerializerSettings {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                });

                return(json);
            }
            catch (Exception e)
            {
                string json = JsonConvert.SerializeObject(
                    new
                {
                    error = "Error: " + e.Message
                },
                    Formatting.Indented,
                    new JsonSerializerSettings {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                });

                return(json);
            }
        }
示例#18
0
        public ActionResult SearchCheckIn(JQueryDataTableRequest jqueryTableRequest, string episodeId, string metricId, string teamId, string playerId)
        {
            if (jqueryTableRequest != null)
            {
                GetAllDTO all = new GetAllDTO();

                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
                {
                    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 <CheckInDTO> checkIns = new List <CheckInDTO>();

                foreach (LocationDTO location in locations)
                {
                    CheckInDTO ci = new CheckInDTO();



                    DateTime date = new DateTime(((location.Date - 10800000) * 10000) + 621355968000000000l);
                    ci.Date = date.ToString("dd'/'MM'/'yyyy HH':'mm':'ss");

                    PlayerEngineDTO player = PlayerEngineService.Instance.GetById(location.PlayerId);
                    ci.PlayerName  = player.Nick;
                    ci.Description = location.Description ?? "Check-in";
                    ci.Place       = location.Place;
                    checkIns.Add(ci);
                }

                JQueryDataTableResponse response = new JQueryDataTableResponse()
                {
                    Draw            = jqueryTableRequest.Draw,
                    RecordsTotal    = locations.Count,
                    RecordsFiltered = locations.Count,
                    Data            = checkIns.OrderByDescending(r => DateTime.Parse(r.Date)).Select(r => new string[] { r.Date, r.PlayerName, r.Description, r.Place }).ToArray()
                };

                return(new DataContractResult()
                {
                    Data = response, JsonRequestBehavior = JsonRequestBehavior.AllowGet
                });
            }

            return(Json(null, JsonRequestBehavior.AllowGet));
        }
示例#19
0
        private string CreateIndividualResultsTable(TeamEngineDTO team, PlayerEngineDTO player, string gameId, Profiles perfil)
        {
            RunEngineDTO         run;
            List <GoalEngineDTO> goals = new List <GoalEngineDTO>();
            List <CardEngineDTO> results;

            if (perfil == Profiles.JOGADOR)
            {
                results = CardEngineService.Instance.PlayerWithEmail(gameId, team.Id, player.Id, email);
                run     = RunEngineService.Instance.GetRunByPlayerAndTeamId(player.Id, team.Id, email);
                goals   = GoalEngineService.Instance.GetByRunId(run.Id, email).List.goal;//GoalRepository.Instance.GetByRunId(run.Id);
            }
            else if (perfil == Profiles.LIDER)
            {
                results = CardEngineService.Instance.TeamWithEmail(gameId, team.Id, email);
                GetAllDTO     all    = RunEngineService.Instance.GetRunsByTeamId(team.Id, email);
                List <string> runIds = all.List.run.Select(x => x.Id).ToList();
                foreach (string runId in runIds)
                {
                    goals.AddRange(GoalEngineService.Instance.GetByRunId(runId, email).List.goal); //GoalRepository.Instance.GetByRunId(runIds);
                }
            }
            else
            {
                results = new List <CardEngineDTO>();
                run     = new RunEngineDTO();
                goals   = new List <GoalEngineDTO>();
            }


            results = (from result in results

                       select new CardEngineDTO
            {
                IconMetric = result.IconMetric.Replace("_", "-"),
                MetricId = result.MetricId,
                MetricName = result.MetricName,
                TotalPoints = result.TotalPoints,
                Goal = result.Goal,
                PercentGoal = result.PercentGoal,
                IsAverage = result.IsAverage
            }).ToList();


            string emailBody = "<table align='center' cellpadding = '5px'><tr>";

            emailBody += "<td></td><td>Objetivo</td><td>Alcançado</td><td>Porcentagem</td>";
            emailBody += "</tr>";

            foreach (CardEngineDTO result in results)
            {
                if (result.PercentGoal < 0.3f)
                {
                    emailBody += "<tr class='alert-goal'>";
                }
                else if (result.PercentGoal < 1.0f)
                {
                    emailBody += "<tr class='normal-goal'>";
                }
                else
                {
                    emailBody += "<tr class='sucess-goal'>";
                }

                emailBody += "<td class='name'>" + result.MetricName + "</td>";
                emailBody += "<td>" + result.Goal.ToString("###,###,###,###") + "</td>";
                emailBody += "<td>" + result.TotalPoints.ToString("###,###,###,###") + "</td>";
                emailBody += "<td>" + (result.PercentGoal * 100) + "%</td>";
                emailBody += "</tr>";
            }

            emailBody += "</table>";

            return(emailBody);
        }
示例#20
0
        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"));
        }
        public ActionResult Save(List <RunMetricEngineDTO> resultList, string runId, string date, string itemId)
        {
            DateTime      dateTime   = Convert.ToDateTime(date);
            long          time       = dateTime.Ticks;
            ItemEngineDTO itemEngine = null;

            try {
                itemEngine = ItemEngineService.Instance.GetById(itemId);
            } catch (Exception e)
            {
                itemEngine = null;
            }

            float valorVendas = 0f;

            string gameId = CurrentFirm.ExternalId;

            if (gameId == "5880a1743a87783b4f0ba709") //pelegrini
            {
                valorVendas = resultList.Where(x => x.Name == "VENDAS").Select(y => y.Points).FirstOrDefault();
            }

            bool flag = false;

            foreach (RunMetricEngineDTO result in resultList)
            {
                if (result.Points > 0)
                {
                    flag         = true;
                    result.Score = 0;
                    result.RunId = runId;
                    result.Date  = time;
                    if (itemEngine != null)
                    {
                        result.ItemId   = itemEngine.Id;
                        result.ItemName = itemEngine.Name;
                    }
                    result.ArithmeticMultiplier = valorVendas > 0 ? valorVendas : 1;
                    RunMetricEngineService.Instance.CreateOrUpdate(result);
                }
            }

            if (gameId == "58e623fe3a877804f5b6bf22" && flag == true) //duplov
            {
                List <AccountDevicesDTO> devices = AccountDevicesRepository.Instance.FindAllByGameId(gameId);

                PlayerEngineDTO player  = PlayerEngineService.Instance.GetById(resultList.First().PlayerId);
                string          message = player.Nick + " está acelerando, veja seus novos resultados!";

                foreach (AccountDevicesDTO device in devices)
                {
                    NotificationPushDTO notification = new NotificationPushDTO
                    {
                        Token    = device.Notification_Token,
                        PlayerId = device.External_User_Id,
                        Message  = message,
                        Title    = "Gamific - Novos Resultados"
                    };

                    NotificationPushService.Instance.SendPush(notification);
                }
            }

            return(Json(new { Success = true }, JsonRequestBehavior.AllowGet));
        }