public async Task <ActionResult> UpdateMerchantPackage([FromBody] JObject objJson)
        {
            try
            {
                if (string.IsNullOrEmpty(Convert.ToString(Request.Headers["api_key"])))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                string strMerchantId = MerchantLoginSessionKeys.GetMerchantIdByApiKey(_appDbContext, Guid.Parse(Request.Headers["api_key"]));
                if (string.IsNullOrEmpty(strMerchantId))
                {
                    return(StatusCode(StatusCodes.Status403Forbidden, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                var objMerchantPackageDetails = (from mp in _appDbContext.MerchantPackages
                                                 join mc in _appDbContext.MerchantCampaigns on mp.CampaignID equals mc.Id into DetailsMerchantCampaigns
                                                 from mc1 in DetailsMerchantCampaigns.DefaultIfEmpty()
                                                 where (mp.PackageId == Convert.ToInt32(objJson.SelectToken("merchantpackagesid")) && mc1.MerchantId == strMerchantId)
                                                 select mp);

                if (objMerchantPackageDetails == null || objMerchantPackageDetails.Count() <= 0)
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Package doesn’t exist or Invalid Merchant." })));
                }

                MerchantPackages objMerchantPackages = new MerchantPackages();
                objMerchantPackages.PackageId     = Convert.ToInt32(objJson.SelectToken("merchantpackagesid"));
                objMerchantPackages.PackageTypeID = Convert.ToInt32(objJson.SelectToken("packagetypeid"));
                objMerchantPackages.Description   = Convert.ToString(objJson.SelectToken("description"));
                objMerchantPackages.Price         = Convert.ToDecimal(objJson.SelectToken("price"));

                _appDbContext.MerchantPackages.Attach(objMerchantPackages);
                _appDbContext.Entry(objMerchantPackages).Property("PackageTypeID").IsModified = true;
                _appDbContext.Entry(objMerchantPackages).Property("Description").IsModified   = true;
                _appDbContext.Entry(objMerchantPackages).Property("Price").IsModified         = true;
                int returnVal = await _appDbContext.SaveChangesAsync();

                if (returnVal > 0)
                {
                    return(Ok(new { Status = "OK", Detail = "Merchant Package Updated." }));
                }
                else
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support" })));
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support", SystemError = ex.Message })));
            }
        }
        public async Task <ActionResult> ExtendMerchantPackage([FromBody] JObject objJson)
        {
            try
            {
                if (string.IsNullOrEmpty(Convert.ToString(Request.Headers["api_key"])))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                string strMerchantId = MerchantLoginSessionKeys.GetMerchantIdByApiKey(_appDbContext, Guid.Parse(Request.Headers["api_key"]));
                if (string.IsNullOrEmpty(strMerchantId))
                {
                    return(StatusCode(StatusCodes.Status403Forbidden, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                var objMerchantPackageDetails = (from mp in _appDbContext.MerchantPackages
                                                 join mc in _appDbContext.MerchantCampaigns on mp.CampaignID equals mc.Id into DetailsMerchantCampaigns
                                                 from mc1 in DetailsMerchantCampaigns.DefaultIfEmpty()
                                                 where (mp.PackageId == Convert.ToInt32(objJson.SelectToken("merchantpackagesid")) && mc1.MerchantId == strMerchantId)
                                                 select mp).ToList <MerchantPackages>();

                if (objMerchantPackageDetails == null || objMerchantPackageDetails.Count() <= 0)
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Packages doesn’t exist or Invalid Merchant." })));
                }

                MerchantPackages objMerchantPackages = new MerchantPackages();
                objMerchantPackages.CampaignID    = objMerchantPackageDetails[0].CampaignID;
                objMerchantPackages.PackageTypeID = objMerchantPackageDetails[0].PackageTypeID;
                objMerchantPackages.Description   = objMerchantPackageDetails[0].Description;
                objMerchantPackages.Price         = objMerchantPackageDetails[0].Price;
                objMerchantPackages.CreatedDate   = DateTime.UtcNow;
                objMerchantPackages.StartDate     = Convert.ToDateTime(objJson.SelectToken("startdate"));
                objMerchantPackages.EndDate       = Convert.ToDateTime(objJson.SelectToken("enddate"));
                await _appDbContext.MerchantPackages.AddAsync(objMerchantPackages);

                int returnVal = await _appDbContext.SaveChangesAsync();

                if (returnVal > 0)
                {
                    return(Ok(new { Status = "OK", Detail = "Duplicate Merchant Package Created." }));
                }
                else
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support" })));
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support", SystemError = ex.Message })));
            }
        }
        public async Task <ActionResult> CreateMerchantPackage([FromBody] JObject objJson)
        {
            try
            {
                if (string.IsNullOrEmpty(Convert.ToString(Request.Headers["api_key"])))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                string strMerchantId = MerchantLoginSessionKeys.GetMerchantIdByApiKey(_appDbContext, Guid.Parse(Request.Headers["api_key"]));
                if (string.IsNullOrEmpty(strMerchantId))
                {
                    return(StatusCode(StatusCodes.Status403Forbidden, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                var objMerchantCampaignsDetails = _appDbContext.MerchantCampaigns
                                                  .Where(mc => mc.Id == Convert.ToInt32(objJson.SelectToken("campaignid")) && mc.MerchantId == strMerchantId)
                                                  .OrderByDescending(t => t.Id).AsNoTracking().FirstOrDefault();

                if (objMerchantCampaignsDetails == null)
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Campaign doesn’t exist or Invalid Merchant." })));
                }

                MerchantPackages objMerchantPackages = new MerchantPackages();
                objMerchantPackages.CampaignID    = Convert.ToInt32(objJson.SelectToken("campaignid"));
                objMerchantPackages.PackageTypeID = Convert.ToInt32(objJson.SelectToken("packagetypeid"));
                objMerchantPackages.Description   = Convert.ToString(objJson.SelectToken("description"));
                objMerchantPackages.Price         = Convert.ToDecimal(objJson.SelectToken("price"));
                objMerchantPackages.CreatedDate   = DateTime.UtcNow;
                objMerchantPackages.StartDate     = objMerchantCampaignsDetails.StartDate;
                objMerchantPackages.EndDate       = objMerchantCampaignsDetails.EndDate;
                await _appDbContext.MerchantPackages.AddAsync(objMerchantPackages);

                int returnVal = await _appDbContext.SaveChangesAsync();

                if (returnVal > 0)
                {
                    return(Ok(new { Status = "OK", Detail = "Merchant Package Created." }));
                }
                else
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support" })));
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support", SystemError = ex.Message })));
            }
        }