public JsonResult RevenueView(DateTime month, string source)
        {
            OwnerPayoutRevenueProvider provider = new OwnerPayoutRevenueProvider(_dbContext);
            var view = provider.Retrieve(month, source);

            return(Json(view, JsonRequestBehavior.AllowGet));
        }
        public JsonResult DeleteRevenue(int id)
        {
            if (!AuthorizationProvider.CanEditRevenue())
            {
                string message = string.Format("User '{0}' does not have permission to delete Owner Payout {1:d}.", this.User.Identity.Name, id);
                DojoLogger.Warn(message, typeof(OwnerPayoutController));
                Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden;
                return(Json(string.Empty, JsonRequestBehavior.AllowGet));
            }

            try
            {
                var dataProvider = new OwnerPayoutRevenueProvider(_dbContext);
                dataProvider.Delete(id);
                dataProvider.Commit();
                return(Json("success", JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                string message = string.Format("Delete Owner Payout {0} fails. {1}", id.ToString(), ex.Message + ex.StackTrace);
                DojoLogger.Error(message, typeof(OwnerPayoutController));
                Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
                return(Json("fail", JsonRequestBehavior.AllowGet));
            }
        }
        public JsonResult SavePayoutAmount(int id, float amount)
        {
            if (!AuthorizationProvider.CanEditRevenue())
            {
                string message = string.Format("User '{0}' does not have permission to save Owner Payout {1}.", this.User.Identity.Name, id.ToString());
                DojoLogger.Warn(message, typeof(OwnerPayoutController));
                Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden;
                return(Json(string.Empty, JsonRequestBehavior.AllowGet));
            }

            try
            {
                var dataProvider = new OwnerPayoutRevenueProvider(_dbContext);
                var entity       = dataProvider.Retrieve(id);
                entity.PayoutAmount = amount;
                dataProvider.Update(id, entity);

                dataProvider.Commit(); // OwnerPayoutId will be filled for new OwnerPayout by EF

                return(Json(id.ToString(), JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                var    innerErrorMessage = ex.InnerException != null ? ex.InnerException.Message : string.Empty;
                string message           = string.Format("Saving Owner Payout {0} fails. {1},{2}", id.ToString(), ex.Message, innerErrorMessage);
                DojoLogger.Error(message, typeof(OwnerPayoutController));
                Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
                return(Json(string.Empty, JsonRequestBehavior.AllowGet));
            }
        }
        public JsonResult SaveRevenue(OwnerPayoutRevenueModel form)
        {
            if (!AuthorizationProvider.CanEditRevenue())
            {
                string message = string.Format("User '{0}' does not have permission to save Owner Payout {1}.", this.User.Identity.Name, form.OwnerPayoutId.ToString());
                DojoLogger.Warn(message, typeof(OwnerPayoutController));
                Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden;
                return(Json(string.Empty, JsonRequestBehavior.AllowGet));
            }

            try
            {
                // treat checkin and checkout date as Hawaii time zone and covert it to UTC by adding 11 hours.
                if (form.PayoutDate != null)
                {
                    form.PayoutDate = ConversionHelper.ToUtcFromUs(form.PayoutDate.Value);
                }

                var dataProvider = new OwnerPayoutRevenueProvider(_dbContext);

                if (form.OwnerPayoutId == 0) // new OwnerPayout
                {
                    if (dataProvider.GetKey(form) != 0)
                    {
                        Response.StatusCode = (int)System.Net.HttpStatusCode.Conflict; // code = 409
                        return(Json(string.Empty, JsonRequestBehavior.AllowGet));
                    }
                    else
                    {
                        dataProvider.Create(form);
                    }
                }
                else // updating OwnerPayout
                {
                    dataProvider.Update(form.OwnerPayoutId, form);
                }

                dataProvider.Commit(); // OwnerPayoutId will be filled for new OwnerPayout by EF

                // get the OwnerPayout ID
                if (form.OwnerPayoutId == 0)
                {
                    form.OwnerPayoutId = dataProvider.GetKey(form);
                }

                var provider = new OwnerPayoutProvider(_dbContext);
                provider.UpdateOwnerPayoutMatchStatus(form.OwnerPayoutId);

                return(Json(form.OwnerPayoutId.ToString(), JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                var    innerErrorMessage = ex.InnerException != null ? ex.InnerException.Message : string.Empty;
                string message           = string.Format("Saving Owner Payout {0} fails. {1},{2}", form.OwnerPayoutId.ToString(), ex.Message, innerErrorMessage);
                DojoLogger.Error(message, typeof(OwnerPayoutController));
                Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
                return(Json(string.Empty, JsonRequestBehavior.AllowGet));
            }
        }
        public ActionResult ShowOwnerPayoutById(int id)
        {
            if (!AuthorizationProvider.CanViewRevenue())
            {
                string message = string.Format("User '{0}' does not have permission to view Owner Payout.", this.User.Identity.Name);
                DojoLogger.Warn(message, typeof(OwnerPayoutController));
                Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden;
                return(Json(string.Empty, JsonRequestBehavior.AllowGet));
            }

            var provider = new OwnerPayoutRevenueProvider(_dbContext);
            var entity   = provider.Retrieve(id);

            ViewBag.Title      = "View Owner Payout";
            ViewBag.ButtonText = "View Owner Payout";
            return(PartialView("_OwnerPayoutEditPartial", entity));
        }