public static void SendToVendor(OrderVia orderVia, Guid?vendorId, string orderNumber, string[] segmentsSelected, string whiteLabelDomain) { using (var db = new WfpictContext()) { Campaign campaign = db.Campaigns .Include(x => x.Assets) .Include(x => x.Segments) .Include(x => x.Testing) .Include(x => x.Approved) .Include(x => x.Trackings) .FirstOrDefault(x => x.OrderNumber == orderNumber); var vendor = db.Vendors.FirstOrDefault(x => x.Id == vendorId); if (segmentsSelected == null) { SendToVendorSingle(orderVia, db, campaign, vendor, whiteLabelDomain); } else // Segments { SendToVendorMulti(orderVia, db, campaign, vendor, segmentsSelected, whiteLabelDomain); } // Put campaign to monitoring if no segments is in generated/approved state var ifSomeSegmentsRemaining = db.CampaignSegments .Where(c => c.CampaignId == campaign.Id) .Any(x => x.SegmentStatus == (int)SegmentStatus.Generated || x.SegmentStatus == (int)SegmentStatus.Approved); if (!ifSomeSegmentsRemaining) { campaign.Status = (int)CampaignStatus.Monitoring; db.SaveChanges(); } } }
public ActionResult SendToVendor(OrderVia via, Guid?vendorId, Guid?id, string[] segmentsSelected) { try { Campaign campaign = Db.Campaigns.Include(x => x.Approved).FirstOrDefault(x => x.Id == id); if (campaign == null) { throw new AdsException("Campagin with Id: " + id + " Not Found."); } if (campaign.Approved == null) { throw new AdsException("Campagin: " + campaign.CampaignName + " is not yet approved."); } switch (via) { case OrderVia.Email: BackgroundJob.Enqueue(() => CampaignProcessor.SendToVendor(via, vendorId, campaign.OrderNumber, segmentsSelected, string.Empty)); break; case OrderVia.Api: string whiteLabel = LoggedInUser?.CustomerId == null ? "ADS" : LoggedInUser?.Customer.WhiteLabel; string whiteLabelDomain = Db.Customers.FirstOrDefault(x => x.WhiteLabel == whiteLabel)?.WebDomain; if (string.IsNullOrEmpty(whiteLabelDomain)) { throw new AdsException("White Label Web Domain can not be empty."); } CampaignProcessor.SendToVendor(via, vendorId, campaign.OrderNumber, segmentsSelected, whiteLabelDomain); break; } return(Json(new JsonResponse() { IsSucess = true }, JsonRequestBehavior.AllowGet)); } catch (Exception ex) { return(Json(new JsonResponse() { IsSucess = false, ErrorMessage = ex.Message }, JsonRequestBehavior.AllowGet)); } }
private ActionResult Rebroad(OrderVia via, Guid?id, DateTime?reBroadcastedDate, long reBroadcastedQuantity, Guid?vendor) { if (reBroadcastedDate == null || vendor == null) { TempData["Error"] = $"ReBroadcastedDate and Vendor is required."; return(RedirectToAction("Rebroad", "Campaigns", new { id = id })); } Campaign campaign = Db.Campaigns.FirstOrDefault(x => x.Id == id); if (campaign.ReBroadcasted) { TempData["Error"] = $"Already rebroadcasted."; return(RedirectToAction("Rebroad", "Campaigns", new { id = id })); } campaign.ReBroadcasted = true; campaign.ReBroadcastedDate = reBroadcastedDate; campaign.ReBroadcastedQuantity = reBroadcastedQuantity; campaign.ReBroadcastedOrderNumber = campaign.OrderNumber + "RDP"; Db.SaveChanges(); switch (via) { case OrderVia.Email: BackgroundJob.Enqueue(() => CampaignProcessor.SendToVendor(via, vendor, campaign.OrderNumber, null, string.Empty)); break; case OrderVia.Api: string whiteLabel = LoggedInUser?.CustomerId == null ? "ADS" : LoggedInUser?.Customer.WhiteLabel; string whiteLabelDomain = Db.Customers.FirstOrDefault(x => x.WhiteLabel == whiteLabel)?.WebDomain; if (string.IsNullOrEmpty(whiteLabelDomain)) { throw new AdsException("White Label Web Domain can not be empty."); } CampaignProcessor.SendToVendor(via, null, campaign.OrderNumber, null, whiteLabelDomain); break; } // Send email to vendor //BackgroundJob.Enqueue(() => CampaignProcessor.SendToVendor(OrderVia.Email, vendor, campaign.OrderNumber, null, String.Empty)); TempData["Success"] = "Order #:" + campaign.OrderNumber + ", Campaign " + campaign.CampaignName + " Rebroad has been sent to vendor sucessfully."; return(RedirectToAction("Rebroad", "Campaigns", new { id = campaign.Id })); }
private static void SendToVendorMulti(OrderVia orderVia, WfpictContext db, Campaign campaign, Vendor vendor, string[] segmentsSelected, string whiteLabelDomain) { var segments = db.CampaignSegments .Where(c => c.CampaignId == campaign.Id && segmentsSelected.Contains(c.SegmentNumber)) .ToList(); foreach (var segment in segments) { string sentOrder, queuedCampaignId = null; switch (orderVia) { case OrderVia.Email: sentOrder = EmailHelper.SendApprovedToVendor(vendor, campaign, segment); break; case OrderVia.Api: var response = ProDataApiManager.Create(campaign, segment, whiteLabelDomain); if (response.status != ProDataApiManager.Success) { throw new AdsException(response.ErrorMessage); } sentOrder = response.RequestMessage; queuedCampaignId = response.queued_pending_campaign_id.ToString(); break; default: throw new AdsException("Invalid orderVia while sending to vendor multiple"); } segment.SegmentStatus = (int)SegmentStatus.Monitoring; var campaignTracking = db.CampaignTrackings.FirstOrDefault(x => x.CampaignId == campaign.Id && x.SegmentNumber == segment.SegmentNumber); if (campaignTracking == null) { var trackingId = Guid.NewGuid(); var tracking = new CampaignTracking() { Id = trackingId, CreatedAt = DateTime.Now, CampaignId = campaign.Id, OrderNumber = campaign.OrderNumber, SegmentNumber = segment.SegmentNumber, Quantity = segment.Quantity, DateSent = DateTime.Now, SentOrder = sentOrder, IsCreatedThroughApi = orderVia == OrderVia.Api, QueuedCampaignId = queuedCampaignId }; db.CampaignTrackings.Add(tracking); db.SaveChanges(); } else { campaignTracking.Quantity = segment.Quantity; campaignTracking.DateSent = DateTime.Now; campaignTracking.SentOrder = sentOrder; campaignTracking.IsCreatedThroughApi = orderVia == OrderVia.Api; campaignTracking.QueuedCampaignId = queuedCampaignId; } LogHelper.AddLog(db, LogType.Vendor, campaign.OrderNumber, $"Multi {segment.SegmentNumber} has been sent to vendor successfully."); } }
private static void SendToVendorSingle(OrderVia orderVia, WfpictContext db, Campaign campaign, Vendor vendor, string whiteLabelDomain) { string sentOrder, queuedCampaignId = null; switch (orderVia) { case OrderVia.Email: sentOrder = EmailHelper.SendApprovedToVendor(vendor, campaign, null); break; case OrderVia.Api: var response = ProDataApiManager.Create(campaign, null, whiteLabelDomain); if (response.status != ProDataApiManager.Success) { throw new AdsException(response.ErrorMessage); } sentOrder = response.RequestMessage; queuedCampaignId = response.queued_pending_campaign_id.ToString(); break; default: throw new AdsException("Invalid orderVia while sending to vendor single"); } string orderNumberRdp = campaign.ReBroadcasted ? campaign.ReBroadcastedOrderNumber : campaign.OrderNumber; long quantity = campaign.ReBroadcasted ? campaign.ReBroadcastedQuantity : campaign.Approved.Quantity; var campaignTracking = db.CampaignTrackings.FirstOrDefault(x => x.CampaignId == campaign.Id && x.OrderNumber == orderNumberRdp && string.IsNullOrEmpty(x.SegmentNumber)); if (campaignTracking == null) { var trackingId = Guid.NewGuid(); var tracking = new CampaignTracking() { Id = trackingId, CreatedAt = DateTime.Now, CampaignId = campaign.Id, OrderNumber = orderNumberRdp, SegmentNumber = string.Empty, Quantity = quantity, DateSent = DateTime.Now, SentOrder = sentOrder, IsCreatedThroughApi = orderVia == OrderVia.Api, QueuedCampaignId = queuedCampaignId }; db.CampaignTrackings.Add(tracking); } else { campaignTracking.Quantity = quantity; campaignTracking.DateSent = DateTime.Now; campaignTracking.SentOrder = sentOrder; campaignTracking.IsCreatedThroughApi = orderVia == OrderVia.Api; campaignTracking.QueuedCampaignId = queuedCampaignId; } db.SaveChanges(); LogHelper.AddLog(db, LogType.Vendor, campaign.OrderNumber, !campaign.ReBroadcasted ? "Order has been sent to vendor successfully." : "Order Rebroad has been sent to vendor sucessfully."); }