public ActionResult FetchProcessDataFiles([Bind(Include = "Id,CampaignId,OrderNumber")] CampaignTestingVm campaignTestingVm)
        {
            try
            {
                var campaign = Db.Campaigns
                               .Include(x => x.Assets)
                               .Include(x => x.Segments)
                               .Include(x => x.Testing)
                               .FirstOrDefault(x => x.Id == campaignTestingVm.CampaignId);

                if (string.IsNullOrEmpty(campaign.Assets.ZipCodeFile))
                {
                    throw new AdsException("ZipCodeFile is not provided, Please upload one.");
                }

                if (campaign.Segments.Count == 0)
                {
                    throw new AdsException("There are no Multi data segments.");
                }

                if (campaign.Testing.DataFileQuantity == 0)
                {
                    throw new AdsException("DataFileQuantity is Zero.");
                }

                BackgroundJob.Enqueue(() => DataFileProcessor.FetchSqlDataFile(UploadPath, IsNxs, campaign.Id, campaign.OrderNumber, campaign.Assets.ZipCodeFile, campaign.Testing.DataFileQuantity));

                TempData["Success"] = "SQL Data is being fetched and processed, please wait about 5m ...";
            }
            catch (Exception ex)
            {
                TempData["Error"] = ex.Message;
            }
            return(RedirectToAction("EditTesting", new { id = campaignTestingVm.Id }));
        }
        public ActionResult ProcessFiles([Bind(Include = "Id,CampaignId,OrderNumber")] CampaignTestingVm campaignTestingVm)
        {
            var campaign = Db.Campaigns.FirstOrDefault(x => x.Id == campaignTestingVm.CampaignId);

            BackgroundJob.Enqueue(() => FileProcessor.ProcessAssetUpdateUrls(UploadPath, campaign.OrderNumber));

            TempData["Success"] = "File Processing has been started succesfully.";
            return(RedirectToAction("EditTesting", new { id = campaignTestingVm.Id }));
        }
        public ActionResult ProcessDynamicCoding([Bind(Include = "Id,CampaignId,OrderNumber")] CampaignTestingVm campaignTestingVm)
        {
            var campaignTesting = Db.CampaignsTesting.FirstOrDefault(x => x.CampaignId == campaignTestingVm.CampaignId);

            try
            {
                if (string.IsNullOrEmpty(campaignTesting.DataFileUrl))
                {
                    throw new Exception("Please process Data Files first.");
                }

                DynamicCodingHelper.ProcessInput(Db, UploadPath, campaignTesting.DataFileUrl, campaignTesting.DynamicCodingFile,
                                                 campaignTesting.CampaignId, campaignTestingVm.OrderNumber);

                TempData["Success"] = "Dynamic Coding File has been processed succesfully.";
            }
            catch (Exception ex)
            {
                TempData["Error"] = ex.Message;
            }
            return(RedirectToAction("EditTesting", new { id = campaignTestingVm.Id }));
        }
        public ActionResult Approve(CampaignTestingVm campaignTestingVm)
        {
            if (ModelState.IsValid)
            {
                if (Session["id"] == null)
                {
                    Session["id"] = campaignTestingVm.CampaignId;
                }

                return(RedirectToAction("Index", "Approved", new { id = Session["id"] }));
            }
            else
            {
                var errorList = (from item in ModelState.Values
                                 from error in item.Errors
                                 select error.ErrorMessage).ToList();
                TempData["Error"] = "There is error in saving data." + string.Join("<br/>", errorList);
            }
            ViewBag.TestingUrgency = new SelectList(EnumHelper.GetEnumTextValues(typeof(TestingUrgency)), "Value",
                                                    "Text", campaignTestingVm.TestingUrgency);
            return(View("EditTesting", campaignTestingVm));
        }
        public ActionResult ProcessClickMeterLinks([Bind(Include = "Id,CampaignId,OrderNumber,CampaignName,EzLinksFile")] CampaignTestingVm campaignTestingVm)
        {
            var campaignTesting = Db.CampaignsTesting.FirstOrDefault(c => c.Id == campaignTestingVm.Id);

            if (campaignTesting == null)
            {
                throw new HttpException(404, "Not found");
            }

            if (string.IsNullOrEmpty(campaignTestingVm.EzLinksFile))
            {
                TempData["Error"] = "Please upload EzLinksFile.";
                return(RedirectToAction("EditTesting", new { id = campaignTestingVm.Id }));
            }
            // Process LinksFile & Post links to Click Meter
            try
            {
                var result = ClickMeterManager.ProcessLinksFile(UploadPath, campaignTestingVm.OrderNumber, campaignTestingVm.CampaignName, campaignTestingVm.EzLinksFile);

                if (result == null || string.IsNullOrEmpty(result.trackingCode))
                {
                    throw new AdsException("Processing result is empty.");
                }

                campaignTesting.ClickMeterGroupId       = result.groupId.ToString();
                campaignTesting.ClickMeterRotatorLinkId = result.id.ToString();
                campaignTesting.ClickMeterRotatorLink   = result.trackingCode;
                Db.SaveChanges();
            }
            catch (Exception ex)
            {
                TempData["Error"] = "ClickMeter Issue : " + ex.Message;
                return(RedirectToAction("EditTesting", new { id = campaignTestingVm.Id }));
            }

            TempData["Success"] = "Click Meter Rotator Link has been generated successfully.";
            return(RedirectToAction("EditTesting", new { id = campaignTestingVm.Id }));
        }
        public ActionResult EditTesting([Bind(Include =
                                                  "Assets,Segments,Id,CampaignId,OrderNumber,CampaignName,WhiteLabel,ReBroadCast,ReBroadcastDate,FromLine,SubjectLine,HtmlImageFiles,CreativeURL,TestSeedList,FinalSeedList,IsTested,TestingTime,TestingUrgency,DeployDate,ZipCodeFile,ZipURL,GeoDetails,Demographics,Quantity,SpecialInstructions,CreatedAt,CreatedBy,IsOpenPixel,OpenPixelUrl,BannerUrl,OpenGoals,ClickGoals,DataFileQuantity,DataFileUrl,DateFetched,IsOmniOrder,OmniDeployDate,Impressions,ChannelTypes,PaceDays,IsDynamicCoding,DynamicCodingFile,OpenModelLinksFile,OpenModelLinksCount,OpenModelImageFile,SFDClientId,ClickMeterGroupId,ClickMeterRotatorLinkId,ClickMeterRotatorLink,EzStates,EzDMAs,EzLinksFile"
                                              )] CampaignTestingVm campaignTestingVm)
        {
            if (ModelState.IsValid)
            {
                // Updatin Testing
                TinyMapper.Bind <CampaignTestingVm, CampaignTesting>(config =>
                {
                    config.Ignore(x => x.ChannelTypes);
                    config.Ignore(x => x.Assets);
                    config.Ignore(x => x.Segments);
                });
                var campaignTesting = TinyMapper.Map <CampaignTesting>(campaignTestingVm);
                campaignTesting.ChannelTypes = campaignTestingVm.ChannelTypes == null ? null :
                                               string.Join(",", campaignTestingVm.ChannelTypes);
                Db.Entry(campaignTesting).State = EntityState.Modified;
                Db.SaveChanges();

                // Updatin Asssets
                var campaignAssets = Db.CampaignAssets.FirstOrDefault(x => x.CampaignId == campaignTestingVm.CampaignId);
                campaignAssets.CreativeFiles      = campaignTestingVm.Assets.CreativeFiles;
                campaignAssets.CreativeUrl        = campaignTestingVm.Assets.CreativeUrl;
                campaignAssets.ZipCodeFile        = campaignTestingVm.Assets.ZipCodeFile;
                campaignAssets.ZipCodeUrl         = campaignTestingVm.Assets.ZipCodeUrl;
                campaignAssets.TestSeedFile       = campaignTestingVm.Assets.TestSeedFile;
                campaignAssets.LiveSeedFile       = campaignTestingVm.Assets.LiveSeedFile;
                campaignAssets.OpenModelLinksFile = campaignTestingVm.OpenModelLinksFile;
                campaignAssets.OpenModelImageFile = campaignTestingVm.OpenModelImageFile;
                if (!string.IsNullOrEmpty(campaignTestingVm.SFDClientId))
                {
                    campaignAssets.SFDClientId = int.Parse(campaignTestingVm.SFDClientId);
                }
                if (!string.IsNullOrEmpty(campaignAssets.OpenModelLinksFile) && campaignAssets.OpenModelLinksCount == 0)
                {
                    string filePath = Path.Combine(UploadPath, campaignAssets.OpenModelLinksFile);
                    S3FileManager.Download(campaignAssets.OpenModelLinksFile, filePath);
                    List <string> links = CsvReader.ReadCsv(filePath);
                    campaignAssets.OpenModelLinksCount = links.Count;
                }
                Db.Entry(campaignAssets).State = EntityState.Modified;
                Db.SaveChanges();

                // Updating Segments
                if (campaignTestingVm.Segments != null)
                {
                    foreach (var segmentVm in campaignTestingVm.Segments)
                    {
                        var segment = Db.CampaignSegments.FirstOrDefault(x => x.Id == segmentVm.Id);
                        if (segment == null)
                        {
                            segment = new CampaignSegment()
                            {
                                Id            = Guid.NewGuid(),
                                CreatedAt     = DateTime.Now,
                                CampaignId    = campaignTestingVm.CampaignId,
                                OrderNumber   = campaignTestingVm.OrderNumber,
                                SegmentNumber = segmentVm.SegmentNumber
                            };
                            Db.CampaignSegments.Add(segment);
                            Db.SaveChanges();
                        }
                        segment.SubjectLine      = segmentVm.SubjectLine;
                        segment.FromLine         = segmentVm.FromLine;
                        segment.WhiteLabel       = segmentVm.WhiteLabel;
                        segment.Quantity         = segmentVm.Quantity;
                        segment.DeploymentDate   = segmentVm.DeploymentDate;
                        segment.CreativeFiles    = segmentVm.CreativeFiles;
                        segment.FirstRangeStart  = segmentVm.FirstRangeStart;
                        segment.FirstRangeEnd    = segmentVm.FirstRangeEnd;
                        segment.SecondRangeStart = segmentVm.SecondRangeStart;
                        segment.SecondRangeEnd   = segmentVm.SecondRangeEnd;
                        segment.ThirdRangeStart  = segmentVm.ThirdRangeStart;
                        segment.ThirdRangeEnd    = segmentVm.ThirdRangeEnd;
                        Db.Entry(segment).State  = EntityState.Modified;
                        Db.SaveChanges();
                    }
                }

                TempData["Success"] = "Testing data saved successfully!";
                return(RedirectToAction("EditTesting", "Testing", new { id = campaignTestingVm.Id }));
            }
            else
            {
                var errorList = (from item in ModelState.Values
                                 from error in item.Errors
                                 select error.ErrorMessage).ToList();
                TempData["Error"] = "There is error in saving data." + string.Join("<br/>", errorList);
            }

            ViewBag.TestingUrgency = new SelectList(EnumHelper.GetEnumTextValues(typeof(TestingUrgency)), "Value",
                                                    "Text", campaignTestingVm.TestingUrgency);
            ViewBag.WhiteLabel          = new SelectList(CustomersWithWLList, "Value", "Text", campaignTestingVm.WhiteLabel);
            ViewBag.SfidClientCampaigns = new SelectList(SfidClientCampaigns, "Value", "Text", campaignTestingVm.SFDClientId);
            ViewBag.StateList           = new SelectList(States, "Value", "Text", campaignTestingVm.EzStates);
            ViewBag.DmaList             = new SelectList(DmaLookup.US.Select(
                                                             x => new SelectListItem()
            {
                Text  = x.code + " - " + x.area,
                Value = x.code
            }).ToList(), "Value", "Text", campaignTestingVm.EzDMAs);

            string view = IsNxs ? "EditTestingNXS" : "EditTesting";

            return(View(view, campaignTestingVm));
        }