public ActionResult Validation(int idPeriodo)
        {
            var period = new WS.Period.Period().Get(Settings.AutenticationKeyEarningSystem, idPeriodo);
            var param = new WS.Parameter.Parameter().Get(Settings.AutenticationKeyEarningSystem, 2);//Prazo Devolução
            var dataDevolucao = period.DataTermino.AddDays(int.Parse(param.Valor));

            //IdStatusPeriodo:
            //3 = Fechado Parcial
            //1 = Aberto
            if (DateTime.Now > dataDevolucao && period.IdStatusPeriodo == 3) return Json("closed", JsonRequestBehavior.AllowGet);
            if (DateTime.Now > period.DataTermino && period.IdStatusPeriodo == 1) return Json("partial", JsonRequestBehavior.AllowGet);
            return Json("", JsonRequestBehavior.AllowGet);
        }
        public ActionResult Closing(int idPeriod)
        {
            var period = new WS.Period.Period().Get(Settings.AutenticationKeyEarningSystem, idPeriod);
            var param = new WS.Parameter.Parameter().Get(Settings.AutenticationKeyEarningSystem, 2);//Prazo Devolução
            var dataDevolucao = period.DataTermino.AddDays(int.Parse(param.Valor));

            //IdStatusPeriodo:
            //3 = Fechado Parcial
            //1 = Aberto
            bool isValid = (DateTime.Now > dataDevolucao && period.IdStatusPeriodo == 3) || (DateTime.Now > period.DataTermino && period.IdStatusPeriodo == 1);

            if (isValid)
            {
                return Json(new WS.Period.Period().Closing(Settings.AutenticationKeyEarningSystem, idPeriod)
                    ? new JsonRequestResult { ResultType = JsonRequestResultType.Success, Message = Resources.Resource.GS_Closing_ClosingOK, ReturnUrl = Url.Content(string.Format("~/{0}", "GS/Closing")) } 
                    : new JsonRequestResult { ResultType = JsonRequestResultType.Error, Message = Resources.Resource.GS_Closing_ErrorOnClosing }, JsonRequestBehavior.AllowGet);
            }

            return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Error, Message = Resources.Resource.GS_Closing_NotAllowed }, JsonRequestBehavior.AllowGet);

        }
        public ActionResult Index()
        {
            var periods = new WS.Period.Period().GetAll(Settings.AutenticationKeyEarningSystem).OrderByDescending(m=> m.DataInicio).ToList();

            return View(periods);
        }
        /// <summary>
        /// Method thats build the model with the Commissions for a Period
        /// </summary>
        /// <param name="idPeriod"></param>
        /// <returns></returns>
        public IEnumerable<CommissionModel> MontaModel(string idPeriod)
        {
            try
            {
                if (!String.IsNullOrWhiteSpace(idPeriod))
                {
                    var idPeriodo = Convert.ToInt32(idPeriod);
                    var period = new WS.Period.Period().Get(Settings.AutenticationKeyEarningSystem, idPeriodo);

                    var dtInicio = period != null ? period.DataInicio : DateTime.MinValue;
                    var dtTermino = period != null ? period.DataTermino : DateTime.MaxValue;

                    var promoter = new WS.Promoter.Promoter().GetPromoter(
                        Settings.AutenticationKeyEarningSystem, RetornaidCliente());

                    if (promoter != null)
                    {
                        //Retorna as comissões
                        var commissions = new Commissions().SelectFiltered(
                            Settings.AutenticationKeyEarningSystem, dtInicio, dtTermino, promoter.IdPromoter);

                        var commissionsGroup = (from c in commissions
                                                group c by c.Pedido.IdCliente
                                                    into g
                                                    select new CommissionModel
                                                    {
                                                        Cliente_Pedido = g.Select(m => m.Cliente_Pedido).FirstOrDefault(),
                                                        Cliente = g.Select(m => m.Cliente).FirstOrDefault(),
                                                        Nivel = g.Select(m => m.Nivel).FirstOrDefault(),
                                                        ValorComissao = g.Sum(m => m.ValorComissao),
                                                        ValorPedido = g.Sum(m => m.ValorPedido)
                                                    }).ToArray();



                        return commissions.Any() ? commissionsGroup : new CommissionModel[0];
                    }
                }
            }
            catch (Exception ex)
            {
                LogService.Log("GS.CommissionController.Listing() :: Exception : ", ex);
            }

            return new CommissionModel[0];
        }
        /// <summary>
        /// Returns a View with the Report for print
        /// </summary>
        /// <param name="idPeriod"></param>
        /// <returns></returns>
        public ActionResult PrintReportCommissions(string idPeriod)
        {
            var idPeriodo = Convert.ToInt32(idPeriod);
            var period = new WS.Period.Period().Get(Settings.AutenticationKeyEarningSystem, idPeriodo);

            ViewBag.Periodo = period.DataInicio.ToShortDateString() + "  -  " + period.DataTermino.ToShortDateString();

            return View(MontaModel(idPeriod).ToArray());
        }
        /// <summary>
        /// Opens the SalesTeamReport
        /// </summary>
        /// <returns></returns>
        public ActionResult SalesTeamReport()
        {
            var periodList = new WS.Period.Period().GetAll(Settings.AutenticationKeyEarningSystem);

            ViewBag.Periods = GetPeriodSelectListItem(new List<WS.Period.PeriodModel>(periodList), null);

            return View("SalesTeamReport");
        }