Exemplo n.º 1
0
		void VisitPostAuthenticateRequest()
		{
			if (!HttpContext.Current.Request.Url.LocalPath.ToLower().StartsWith("/webservices/controls/chatclient/service.asmx") && !HttpContext.Current.Request.Url.LocalPath.Equals("/support/DbChatServer.aspx") && !HttpContext.Current.Request.Url.LocalPath.Equals("/WebResource.axd"))
			{
				Guid guid = Guid.Empty;
				int usrK = 0;
				Visit currentVisit = null;
				VisitSet vs = null;
				string userAgent = "";
				bool noLoggedInPreviousVisitExists = true;
				bool browserIsCrawler = false;
				string ipAddress = "";

				try
				{

					#region Get ipAddress
					try
					{
						ipAddress = Utilities.TruncateIp(HttpContext.Current.Request.ServerVariables["REMOTE_HOST"]);
					}
					catch (Exception ex)
					{
						SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting IpAddress!..."), ex));
					}
					#endregion

					#region Get UserAgent
					try
					{
						if (HttpContext.Current.Request.UserAgent != null)
						{
							userAgent = HttpContext.Current.Request.UserAgent;
						}
					}
					catch (Exception ex)
					{
						SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting UserAgent!... IpAddress={0}", ipAddress), ex));
					}
					#endregion

					#region Get browserIsCrawler
					try
					{
						if (HttpContext.Current.Request.Browser != null)
						{
							browserIsCrawler = HttpContext.Current.Request.Browser.Crawler;
						}
					}
					catch (Exception ex)
					{
						SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting BrowserIsCrawler!... UserAgent={0}, IpAddress={1}", userAgent, ipAddress), ex));
					}
					#endregion

					#region Get UsrK
					try
					{
						//The user is authenticated - lets find the UsrK...
						if (HttpContext.Current.User.Identity.IsAuthenticated)
						{
							string usrStr = HttpContext.Current.User.Identity.Name;
							string[] split = usrStr.Split('&');
							usrK = int.Parse(split[0]);
						}
					}
					catch (Exception ex)
					{
						//We might get a corrupt cookie from the client... (not likely because IsAuthenticated should check for this!)
						SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting UsrK!... BrowserIsCrawler={0}, UserAgent={1}, IpAddress={2}", browserIsCrawler, userAgent, ipAddress), ex));
					} 
					
					#endregion

					#region Get Guid
					try
					{
						if (HttpContext.Current.Request.Cookies["DsiGuid"] != null)
						{
							//We have a Guid from the client...
							guid = new Guid(HttpContext.Current.Request.Cookies["DsiGuid"].Value);
						}
					}
					catch (Exception ex)
					{
						//We might get a corrupt cookie from the client...
						SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting guid!... BrowserIsCrawler={0}, UserAgent={1}, UsrK={2}, IpAddress={3}", browserIsCrawler, userAgent, usrK, ipAddress), ex));
					}
					#endregion

					#region Get previous Visit(s)
					if (!guid.Equals(Guid.Empty))
					{
						try
						{
							//OK so we've got a Guid, lets see if this page request is part of a previous visit by looking for 
							//visits in the last 30 minutes with this Guid / UsrK combination...
							Query q = new Query();
							q.QueryCondition = new And(
								new Q(Visit.Columns.UsrK, usrK),
								new Q(Visit.Columns.Guid, guid),
								new Q(Visit.Columns.DateTimeLast, QueryOperator.GreaterThan, DateTime.Now.AddMinutes(-30)));
							q.OrderBy = new OrderBy(Visit.Columns.Hits, OrderBy.OrderDirection.Descending);
							vs = new VisitSet(q);
						}
						catch (Exception ex)
						{
							SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting previous visit(s) [PART 1]... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
						}

						try
						{
							if (browserIsCrawler && (vs == null || vs.Count == 0))
							{
								// if not, still see if we can match the Guid to a previous LOGGED IN visit to reduce chance of detecting a bot when it's not..
								var vs2 = new VisitSet(new Query
								{
									QueryCondition = new And(
										new Q(Visit.Columns.UsrK, QueryOperator.GreaterThan, 0),
										new Q(Visit.Columns.Guid, guid),
										new Q(Visit.Columns.DateTimeLast, QueryOperator.GreaterThan, DateTime.Now.AddMonths(-1))),
									TopRecords = 1
								});
								if (vs2.Count > 0)
								{
									noLoggedInPreviousVisitExists = false;
								}
							}
						}
						catch (Exception ex)
						{
							SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting previous visit(s) [PART 2]... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
						}
					}
					else if (usrK == 0)
					{
						try
						{
							//We don't have a Guid from the cookie, and they're not logged in. Either it's their first page 
							//request or they have cookies disabled. Lets see if this IP adress has hit the site in the last 
							//30 minutes...
							Query q = new Query();
							q.QueryCondition = new And(
								new Q(Visit.Columns.UsrK, 0),
								new Q(Visit.Columns.IpAddress, Utilities.TruncateIp(HttpContext.Current.Request.ServerVariables["REMOTE_HOST"])),
								new Q(Visit.Columns.DateTimeLast, QueryOperator.GreaterThan, DateTime.Now.AddMinutes(-30)));
							q.OrderBy = new OrderBy(Visit.Columns.Hits, OrderBy.OrderDirection.Descending);
							vs = new VisitSet(q);
						}
						catch (Exception ex)
						{
							SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting previous visit(s) [PART 3]... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
						}
					}
					else
					{
						try
						{
							//This should never happen, but we've found it happening when the Guid doesn't get set to the 
							//cookie properly when it's done just before a redirect? Lets see if this UsrK has hit the site 
							//in the last 30 minutes...
							Query q = new Query();
							q.QueryCondition = new And(
								new Q(Visit.Columns.UsrK, usrK),
								new Q(Visit.Columns.DateTimeLast, QueryOperator.GreaterThan, DateTime.Now.AddMinutes(-30)));
							q.OrderBy = new OrderBy(Visit.Columns.Hits, OrderBy.OrderDirection.Descending);
							vs = new VisitSet(q);
						}
						catch (Exception ex)
						{
							SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting previous visit(s) [PART 4]... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
						}
					}
					#endregion

					#region Create / merge visit
					if (vs == null || vs.Count == 0)
					{
						try
						{
							//If we didn't find any visits, lets create one. I wish there was a way we could avoid duplicates!
							Visit v = new Visit();
							if (guid.Equals(Guid.Empty))
							{
								guid = Guid.NewGuid();
								v.Guid = guid;
								v.IsNewGuid = true;
								try
								{
									Cambro.Web.Helpers.SetCookie("DsiGuid", guid.ToString(), true);
								}
								catch (Exception ex)
								{
									SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception setting cookie while creating new visit... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
								}
							}
							else
							{
								v.Guid = guid;
								v.IsNewGuid = false;
							}
							v.UsrK = usrK;
							v.Pages = 0;
							v.Photos = 0;
							v.DateTimeStart = DateTime.Now;
							v.DateTimeLast = DateTime.Now;
							v.IpAddress = ipAddress;
							v.CountryK = Bobs.IpCountry.ClientCountryK();
							if (userAgent.Length > 0)
							{
								v.IsCrawler = browserIsCrawler && !userAgent.StartsWith("Opera") && usrK == 0 && noLoggedInPreviousVisitExists;
								v.UserAgent = userAgent.TruncateWithDots(400);
							}
							if (usrK > 0 && browserIsCrawler)
							{
								SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(
									string.Format("False-positive crawler? UsrK={0}, UserAgent={1}", usrK, userAgent)));
							}
							v.Update();
							currentVisit = v;
						}
						catch (Exception ex)
						{
							SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception creating new visit... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
						}
					}
					else if (vs.Count == 1)
					{
						try
						{
							//If we found just one visit, then great!
							currentVisit = vs[0];
						}
						catch (Exception ex)
						{
							SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception getting single visit from visit set... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
						}
					}
					else// if (vs.Count > 1)
					{
						try
						{
							//If we've found more than one visit from the last half hour, we should merge them together. This 
							//isn't great, and I wish we could avoid duplicates when we create them - good use for a stored 
							//procedure?
							int mergeWithK = vs[0].K;
							int pages = 0;
							int photos = 0;
							for (int i = 1; i < vs.Count; i++)
							{
								pages += vs[i].Pages;
								photos += vs[i].Photos;
								vs[i].Delete();
							}
							Visit.Increment(mergeWithK, pages, photos);
							currentVisit = vs[0];
						}
						catch (Exception ex)
						{
							SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception merging visits... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
						}
					}
					#endregion

					if (currentVisit != null)
					{
						#region Update Guid from Visit if needed
						try
						{
							if (guid.Equals(Guid.Empty))
							{
								//If we don't have a guid, lets create a new one and set it in the cookie. 
								guid = currentVisit.Guid;
								Cambro.Web.Helpers.SetCookie("DsiGuid", guid.ToString(), true);
							}
						}
						catch (Exception ex)
						{
							SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception setting guid at end of visit code... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
						}
						#endregion

						#region Store current visit in HttpContext.Current.Items
						try
						{
							HttpContext.Current.Items["CurrentVisit"] = currentVisit;
						}
						catch (Exception ex)
						{
							SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Exception setting current visit in HttpContext.Current.Items... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
						}
						#endregion
					}
					else
					{
						SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("Got to end of visit code but didn't have a visit!... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress)));
					}
				}
				catch (Exception ex)
				{
					SpottedException.TryToSaveExceptionAndChildExceptions(new Exception(string.Format("General exception in visit code... UsrK={0}, DsiGuid={1}, UserAgent={2}, BrowserIsCrawler={3}, IpAddress={4}", usrK, guid, userAgent, browserIsCrawler, ipAddress), ex));
				}
			}
		}
Exemplo n.º 2
0
		private void LoadTicketsToPaymentControl()
		{	

			Payment.Reset();

			if (Usr.Current == null)
				throw new DsiUserFriendlyException("You must be logged in to purchase tickets.");

			InvoiceDataHolder idh = new InvoiceDataHolder();
			idh.ActionUsrK = Usr.Current.K;
			idh.CreatedDateTime = DateTime.Now;
			idh.DuplicateGuid = (Guid)ViewState["DuplicateGuid"];
			idh.PromoterK = 0;
			idh.Type = Invoice.Types.Invoice;
			idh.VatCode = Invoice.VATCodes.T1;
			DateTime now = DateTime.Now;

			foreach (Ticket ticket in TicketsToPurchase)
			{
				InvoiceItemDataHolder iidhTicket = new InvoiceItemDataHolder();
				InvoiceItemDataHolder iidhBookingFee = new InvoiceItemDataHolder();

				if (ticket.TicketRun.Promoter.VatStatus == Promoter.VatStatusEnum.Registered)
					iidhTicket.VatCode = InvoiceItem.VATCodes.T1;
				else
					iidhTicket.VatCode = InvoiceItem.VATCodes.T0;
				iidhTicket.SetTotal(ticket.Price);
				iidhTicket.Type = InvoiceItem.Types.EventTickets;
				iidhTicket.KeyData = ticket.K;
				iidhTicket.BuyableObjectK = ticket.K;
				iidhTicket.BuyableObjectType = Model.Entities.ObjectType.Ticket;
				iidhTicket.RevenueStartDate = now;
				iidhTicket.RevenueEndDate = now;
				iidhTicket.Description = ticket.Description;
				iidhTicket.ShortDescription = ticket.ShortDescription;

				iidhBookingFee.VatCode = InvoiceItem.VATCodes.T1;
				iidhBookingFee.SetTotal(ticket.BookingFee);
				iidhBookingFee.Type = InvoiceItem.Types.EventTicketsBookingFee;
				iidhBookingFee.KeyData = ticket.K;
				iidhBookingFee.BuyableObjectK = ticket.K;
				iidhBookingFee.BuyableObjectType = Model.Entities.ObjectType.Ticket;
				iidhBookingFee.RevenueStartDate = now;
				iidhBookingFee.RevenueEndDate = now;
				iidhBookingFee.Description = "Booking fee";
				iidhBookingFee.ShortDescription = "Booking fee";

				idh.InvoiceItemDataHolderList.Add(iidhTicket);
				idh.InvoiceItemDataHolderList.Add(iidhBookingFee);
			}

			//how many visits has this user had?
			Query qVisits = new Query();
			qVisits.QueryCondition = new Q(Visit.Columns.UsrK, Usr.Current.K);
			qVisits.ReturnCountOnly = true;
			VisitSet vsCount = new VisitSet(qVisits);

			if (vsCount.Count <= 20)
				Payment.FraudCheck = Transfer.FraudCheckEnum.Strict;

			Payment.Invoices.Add(idh);
			Payment.PromoterK = 0;
			Payment.AllowPayWithBalance = false;
			Payment.ShowItemsIncVat = true;
			Payment.UsrK = Usr.Current.K;
			Payment.Initialize();
			Payment.LoadBuyerDetailsToScreen();

			//this.TicketsPanel.Visible = false;
			//this.PayForTicketsPanel.Visible = true;
		}
Exemplo n.º 3
0
		protected string Number(int DateSpan, int StatType)
		{
			TimeSpan ts = DateTime.Today.Subtract(new DateTime(1970, 1, 1));
			int dayIndexNow = ts.Days;
			//return dayIndexNow.ToString();
			int dayMin = dayIndexNow;
			int dayMax = dayIndexNow;
			DateTime dateMin = DateTime.Today;
			DateTime dateMax = DateTime.Today.AddDays(1);
			bool estimateWholeDay = false;
			if (DateSpan == 10)
				estimateWholeDay = true;
			else if (DateSpan == 1)
			{
				dayMin = dayIndexNow - 1;
				dayMax = dayIndexNow - 1;
				dateMin = DateTime.Today.AddDays(-1);
				dateMax = DateTime.Today;
			}
			else if (DateSpan == 2)
			{
				dayMin = dayIndexNow - 7;
				dayMax = dayIndexNow - 1;
				dateMin = DateTime.Today.AddDays(-7);
				dateMax = DateTime.Today;
			}
			else if (DateSpan == 3)
			{
				dayMin = dayIndexNow - 30;
				dayMax = dayIndexNow - 1;
				dateMin = DateTime.Today.AddMonths(-1);
				dateMax = DateTime.Today;
			}
			else if (DateSpan == 4)
			{
				dayMin = dayIndexNow - 365;
				dayMax = dayIndexNow - 1;
				dateMin = DateTime.Today.AddDays(-365);
				dateMax = DateTime.Today;
			}
			else if (DateSpan == 5)
			{
				dayMin = 0;
				dayMax = dayIndexNow;
				dateMin = new DateTime(2000, 1, 1);
				dateMax = new DateTime(3000, 1, 1);
			}
			else if (DateSpan == 15)
			{
				dayMin = 0;
				dayMax = dayIndexNow;
				dateMin = DateTime.Now.AddMinutes(-5);
				dateMax = DateTime.Now;
			}
			else if (DateSpan == 130)
			{
				dayMin = 0;
				dayMax = dayIndexNow;
				dateMin = DateTime.Now.AddMinutes(-30);
				dateMax = DateTime.Now;
			}

			int number = 0;


			if (StatType == 1) // Uniques
			{
				Query q = new Query();
				q.NoLock = true;
				q.Columns = new ColumnSet();
				q.ExtraSelectElements["count"] = "count(distinct Guid)";
				q.QueryCondition = new And(
					new Or(new Q(Visit.Columns.DateTimeStart, QueryOperator.GreaterThanOrEqualTo, dateMin), new Q(Visit.Columns.DateTimeLast, QueryOperator.GreaterThanOrEqualTo, dateMin)),
					new Or(new Q(Visit.Columns.DateTimeStart, QueryOperator.LessThan, dateMax), new Q(Visit.Columns.DateTimeLast, QueryOperator.LessThan, dateMax)),
					new Or(new Q(Visit.Columns.Pages, QueryOperator.GreaterThan, 1), new Q(Visit.Columns.IsNewGuid, false))
					);

				VisitSet vs = new VisitSet(q);

				number = (int)vs[0].ExtraSelectElements["count"];
			}
			else if (StatType == 2) //Pages
			{
				Query q = new Query();
				q.NoLock = true;
				q.Columns = new ColumnSet();
				q.ExtraSelectElements["sum"] = "sum(Count)";
				q.QueryCondition = new And(
					new Q(Log.Columns.Date, QueryOperator.GreaterThanOrEqualTo, dateMin),
					new Q(Log.Columns.Date, QueryOperator.LessThan, dateMax),
					new Q(Log.Columns.Item, Log.Items.DsiPages)
					);

				LogSet ls = new LogSet(q);

				number = (int)ls[0].ExtraSelectElements["sum"];
			}
			else if (StatType == 4) //Photos
			{
				if (DateSpan == 5)
				{
					Query q = new Query();
					q.NoLock = true;
					q.OrderBy = new OrderBy(Photo.Columns.K, OrderBy.OrderDirection.Descending);
					q.Columns = new ColumnSet(Photo.Columns.K);
					q.TopRecords = 1;
					PhotoSet ps = new PhotoSet(q);
					number = ps[0].K;
				}
				else
				{
					Query q = new Query();
					q.NoLock = true;
					q.QueryCondition = new And(
						Photo.EnabledQueryCondition,
						new Q(Photo.Columns.EnabledDateTime, QueryOperator.GreaterThanOrEqualTo, dateMin),
						new Q(Photo.Columns.EnabledDateTime, QueryOperator.LessThan, dateMax)
						);
					q.ReturnCountOnly = true;
					PhotoSet ps = new PhotoSet(q);
					number = ps.Count;
				}
			}
			else if (StatType == 5) //Events
			{
				if (DateSpan == 5)
				{
					Query q = new Query();
					q.NoLock = true;
					q.OrderBy = new OrderBy(Event.Columns.K, OrderBy.OrderDirection.Descending);
					q.Columns = new ColumnSet(Event.Columns.K);
					q.TopRecords = 1;
					EventSet es = new EventSet(q);
					number = es[0].K;
				}
				else
				{
					Query q = new Query();
					q.NoLock = true;
					q.QueryCondition = new And(
						new Q(Event.Columns.AddedDateTime, QueryOperator.GreaterThanOrEqualTo, dateMin),
						new Q(Event.Columns.AddedDateTime, QueryOperator.LessThan, dateMax)
						);
					q.ReturnCountOnly = true;
					EventSet es = new EventSet(q);
					number = es.Count;
				}
			}
			else if (StatType == 6) //New users
			{
				if (DateSpan == 5)
				{
					Query q = new Query();
					q.NoLock = true;
					q.OrderBy = new OrderBy(Usr.Columns.K, OrderBy.OrderDirection.Descending);
					q.Columns = new ColumnSet(Usr.Columns.K);
					q.TopRecords = 1;
					UsrSet us = new UsrSet(q);
					number = us[0].K;
				}
				else
				{
					Query q = new Query();
					q.NoLock = true;
					q.QueryCondition = new And(
						new Q(Usr.Columns.DateTimeSignUp, QueryOperator.GreaterThanOrEqualTo, dateMin),
						new Q(Usr.Columns.DateTimeSignUp, QueryOperator.LessThan, dateMax)
						);
					q.ReturnCountOnly = true;
					UsrSet us = new UsrSet(q);
					number = us.Count;
				}
			}
			else if (StatType == 7) //Users logged on
			{
				if (DateSpan == 5)
				{
					Query q = new Query();
					q.NoLock = true;
					q.QueryCondition = Usr.IsNotSkeletonQ;
					q.ReturnCountOnly = true;
					UsrSet us = new UsrSet(q);
					number = us.Count;
				}
				else
				{
					Query q = new Query();
					q.NoLock = true;
					if (DateSpan == 1)
					{
						q.QueryCondition = new Q(Usr.Columns.DateTimeLastPageRequest, QueryOperator.GreaterThanOrEqualTo, DateTime.Now.AddDays(-1));
					}
					else
					{
						q.QueryCondition = new And(
							new Q(Usr.Columns.DateTimeLastPageRequest, QueryOperator.GreaterThanOrEqualTo, dateMin),
							new Q(Usr.Columns.DateTimeLastPageRequest, QueryOperator.LessThan, dateMax)
							);
					}
					q.QueryCondition = new And(Usr.IsNotSkeletonQ, q.QueryCondition);
					q.ReturnCountOnly = true;
					UsrSet us = new UsrSet(q);
					number = us.Count;
				}
			}
			else if (StatType == 8) //Comments
			{
				if (DateSpan == 5)
				{
					Query q = new Query();
					q.NoLock = true;
					q.OrderBy = new OrderBy(Comment.Columns.K, OrderBy.OrderDirection.Descending);
					q.Columns = new ColumnSet(Comment.Columns.K);
					q.TopRecords = 1;
					CommentSet cs = new CommentSet(q);
					number = cs[0].K;
				}
				else
				{
					Query q = new Query();
					q.NoLock = true;
					q.QueryCondition = new And(
						new Q(Comment.Columns.DateTime, QueryOperator.GreaterThanOrEqualTo, dateMin),
						new Q(Comment.Columns.DateTime, QueryOperator.LessThan, dateMax)
						);
					q.ReturnCountOnly = true;
					CommentSet cs = new CommentSet(q);
					number = cs.Count;
				}
			}
			else if (StatType == 9) //PMs
			{
				Query q = new Query();
				q.NoLock = true;
				q.QueryCondition = new And(
					new Q(Comment.Columns.DateTime, QueryOperator.GreaterThanOrEqualTo, dateMin),
					new Q(Comment.Columns.DateTime, QueryOperator.LessThan, dateMax),
					new Q(Thread.Columns.Private, true),
					new Q(Comment.Columns.UsrK, QueryOperator.NotEqualTo, 7646)
					);
				q.TableElement = Comment.ThreadJoin;
				q.ReturnCountOnly = true;
				CommentSet cs = new CommentSet(q);
				number = cs.Count;
			}
			else if (StatType == 10) //Chat massages
			{
				if (DateSpan == 5)
				{
					Query q = new Query();
					q.NoLock = true;
					q.OrderBy = new OrderBy(ChatMessage.Columns.K, OrderBy.OrderDirection.Descending);
					q.Columns = new ColumnSet(ChatMessage.Columns.K);
					q.TopRecords = 1;
					ChatMessageSet cms = new ChatMessageSet(q);
					number = cms[0].K;
				}
				else
				{
					Query q = new Query();
					q.NoLock = true;
					q.QueryCondition = new And(
						new Q(ChatMessage.Columns.DateTime, QueryOperator.GreaterThanOrEqualTo, dateMin),
						new Q(ChatMessage.Columns.DateTime, QueryOperator.LessThan, dateMax)
						);
					q.ReturnCountOnly = true;
					ChatMessageSet cms = new ChatMessageSet(q);
					number = cms.Count;
				}
			}
			else if (StatType == 11) //Photo views
			{
				Query q = new Query();
				q.NoLock = true;
				q.Columns = new ColumnSet();
				q.ExtraSelectElements["sum"] = "sum(Count)";
				q.QueryCondition = new And(
					new Q(Log.Columns.Date, QueryOperator.GreaterThanOrEqualTo, dateMin),
					new Q(Log.Columns.Date, QueryOperator.LessThan, dateMax),
					new Q(Log.Columns.Item, Log.Items.PhotoImpressions)
				);

				LogSet ls = new LogSet(q);

				number = (int)ls[0].ExtraSelectElements["sum"];
			}
			else if (StatType == 12) // Unique members from visit table
			{
				Query q = new Query();
				q.NoLock = true;
				q.Columns = new ColumnSet();
				q.ExtraSelectElements["count"] = "count(distinct UsrK)";
				q.QueryCondition = new And(
					new Or(new Q(Visit.Columns.DateTimeStart, QueryOperator.GreaterThanOrEqualTo, dateMin), new Q(Visit.Columns.DateTimeLast, QueryOperator.GreaterThanOrEqualTo, dateMin)),
					new Or(new Q(Visit.Columns.DateTimeStart, QueryOperator.LessThan, dateMax), new Q(Visit.Columns.DateTimeLast, QueryOperator.LessThan, dateMax))
					);

				VisitSet vs = new VisitSet(q);

				number = (int)vs[0].ExtraSelectElements["count"];
			}
			else if (StatType == 13) //New users
			{
				Query q = new Query();
				q.NoLock = true;
				q.QueryCondition = new And(
					new Q(Usr.Columns.DateTimeSignUp, QueryOperator.GreaterThanOrEqualTo, dateMin),
					new Q(Usr.Columns.DateTimeSignUp, QueryOperator.LessThan, dateMax),
					new Or(new Q(Usr.Columns.IsSkeleton, false), new Q(Usr.Columns.IsSkeleton, QueryOperator.IsNull, null))
					);
				q.ReturnCountOnly = true;
				UsrSet us = new UsrSet(q);
				number = us.Count;

			}
			else
				number = 0;


			//if (estimateWholeDay)
			//{
			//    number = (int)Banner.EstimateFullDay(DateTime.Now, number);
			//}
			if (number == 0)
				return "<small>n/a</small>";
			else
				return number.ToString("###,##0");

		}
Exemplo n.º 4
0
        public void LoadTicketsToPaymentControl(TicketSet ticketsToPurchase)
        {
            Payment.Reset();

            if (Usr.Current == null)
                throw new DsiUserFriendlyException("You must be logged in to purchase tickets.");

			if (!Usr.Current.IsEmailVerified || Usr.Current.IsEmailBroken)
				HttpContext.Current.Response.Redirect("/pages/emailverify?url=" + HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString()) + "&er=" + HttpContext.Current.Server.UrlEncode("You need to verify your email to buy tickets"));

            InvoiceDataHolder idh = new InvoiceDataHolder();
            idh.ActionUsrK = Usr.Current.K;
            idh.CreatedDateTime = DateTime.Now;
            idh.DuplicateGuid = (Guid)ViewState["DuplicateGuid"];
            idh.PromoterK = 0;
			idh.Type = Invoice.Types.Invoice;
            idh.VatCode = Invoice.VATCodes.T1;
            DateTime now = DateTime.Now;
			bool requiresDeliveryAddress = false;
            foreach (Ticket ticket in ticketsToPurchase)
            {
                InvoiceItemDataHolder ticketInvoiceItem = new InvoiceItemDataHolder();
                InvoiceItemDataHolder bookingFeeInvoiceItem = new InvoiceItemDataHolder();

                if (ticket.TicketRun.Promoter.VatStatus == Promoter.VatStatusEnum.Registered)
                    ticketInvoiceItem.VatCode = InvoiceItem.VATCodes.T1;
                else
                    ticketInvoiceItem.VatCode = InvoiceItem.VATCodes.T0;
                ticketInvoiceItem.SetTotal(ticket.Price);
                ticketInvoiceItem.Type = InvoiceItem.Types.EventTickets;
                ticketInvoiceItem.KeyData = ticket.K;
                ticketInvoiceItem.BuyableObjectK = ticket.K;
                ticketInvoiceItem.BuyableObjectType = Model.Entities.ObjectType.Ticket;
                ticketInvoiceItem.RevenueStartDate = now;
                ticketInvoiceItem.RevenueEndDate = now;
                ticketInvoiceItem.Description = ticket.Description;
                ticketInvoiceItem.ShortDescription = ticket.ShortDescription;

                bookingFeeInvoiceItem.VatCode = InvoiceItem.VATCodes.T1;
                bookingFeeInvoiceItem.SetTotal(ticket.BookingFee);
                bookingFeeInvoiceItem.Type = InvoiceItem.Types.EventTicketsBookingFee;
                bookingFeeInvoiceItem.KeyData = ticket.K;
                bookingFeeInvoiceItem.BuyableObjectK = ticket.K;
                bookingFeeInvoiceItem.BuyableObjectType = Model.Entities.ObjectType.Ticket;
                bookingFeeInvoiceItem.RevenueStartDate = now;
                bookingFeeInvoiceItem.RevenueEndDate = now;
                bookingFeeInvoiceItem.Description = "Booking fee";
                bookingFeeInvoiceItem.ShortDescription = "Booking fee";

                idh.InvoiceItemDataHolderList.Add(ticketInvoiceItem);
                idh.InvoiceItemDataHolderList.Add(bookingFeeInvoiceItem);
				if (ticket.TicketRun.DeliveryMethod == TicketRun.DeliveryMethodType.SpecialDelivery) 
				{ 
					requiresDeliveryAddress = true;
				}
            }
			if (requiresDeliveryAddress){
				TicketRun ticketRun = ticketsToPurchase[0].TicketRun;
				InvoiceItemDataHolder deliveryFeeInvoiceItem = new InvoiceItemDataHolder()
				{
					VatCode = InvoiceItem.VATCodes.T1,
					Type = InvoiceItem.Types.EventTicketsDelivery,
					Description = "Delivery by " + ticketRun.DeliveryMethod.ToString(),
					ShortDescription = "Delivery by " + ticketRun.DeliveryMethod.ToString(),
					RevenueStartDate = now,
					RevenueEndDate = now/*,
					BuyableObjectK = ticketsToPurchase[0].K,
					BuyableObjectType = Model.Entities.ObjectType.Ticket*/
				};
				deliveryFeeInvoiceItem.SetTotal(Convert.ToDecimal(ticketsToPurchase[0].TicketRun.DeliveryCharge));
				idh.InvoiceItemDataHolderList.Add(deliveryFeeInvoiceItem);

				Payment.GetFullAddress = true;
				Payment.LockCountryK(224);
				Payment.FraudCheck = Transfer.FraudCheckEnum.Strict;
			}
			

			//how many visits has this user had?
			Query qVisits = new Query();
			qVisits.QueryCondition = new Q(Visit.Columns.UsrK, Usr.Current.K);
			qVisits.ReturnCountOnly = true;
			VisitSet vsCount = new VisitSet(qVisits);

			if (vsCount.Count <= 20)
				Payment.FraudCheck = Transfer.FraudCheckEnum.Strict;
			 
			Payment.Invoices.Add(idh);
            Payment.PromoterK = 0;
            Payment.AllowPayWithBalance = false;
            Payment.ShowItemsIncVat = true;
            Payment.UsrK = Usr.Current.K;
            Payment.Initialize();
            Payment.LoadBuyerDetailsToScreen();

            //this.TicketsPanel.Visible = false;
            this.PayForTicketsPanel.Visible = true;
        }