public Dictionary<DateTime, int> GetCountOfLogItemForDates(Log.Items logItemType, List<DateTime> dates) { return Caching.Instances.Main.GetWithLocalCaching( String.Format("GetCountOfLogItemForDates(logItemType={0}, dates={1})", logItemType, string.Join(",", dates.ConvertAll(d => d.ToShortDateString()).ToArray())), () => { var query = new Query(); query.Columns = new ColumnSet(Log.Columns.Count, Log.Columns.Date); query.QueryCondition = new And( new Q(Log.Columns.Item, logItemType), new Or( dates.ConvertAll(date => new Q(Log.Columns.Date, date.Date)).ToArray() ) ); var ls = new LogSet(query); var results = new Dictionary<DateTime, int>(); foreach (Log l in ls) { results.Add(l.Date, l.Count); } foreach (DateTime d in dates) { if (!results.ContainsKey(d.Date)) { results.Add(d.Date, 0); } } return results; }, 5.Minutes(), 1.Days() ); }
public void Init(Usr u) { AllMusicTypes = null; SelectedMusicTypes = null; GenericMusicTypes = null; SelectedPlaces = null; MusicQ = null; PlaceQ = null; #region Populate MusicQ and MusicTypes if (u.FavouriteMusicTypeK == 0 && u.MusicTypesFavouriteCount == 0) { MusicQ = new Q(true); } else { List<int> musicTypesK = new List<int>(); #region Add MusicTypes if (u.MusicTypesFavouriteCount > 0) { foreach (MusicType mt in u.MusicTypesFavourite) { if (!musicTypesK.Contains(mt.K)) { musicTypesK.Add(mt.K); AllMusicTypes.Add(mt.Order, mt); SelectedMusicTypes.Add(mt.Order, mt); AddMusicTypeChildren(mt, ref musicTypesK); #region Add the parent if (u.UpdateSendGenericMusic && mt.ParentK > 1 && !musicTypesK.Contains(mt.ParentK)) { musicTypesK.Add(mt.ParentK); AllMusicTypes.Add(mt.Parent.Order, mt.Parent); GenericMusicTypes.Add(mt.Parent.Order, mt.Parent); } #endregion } } } else { if (u.FavouriteMusicTypeK != 0) { musicTypesK.Add(u.FavouriteMusicTypeK); AllMusicTypes.Add(u.FavouriteMusicType.Order, u.FavouriteMusicType); SelectedMusicTypes.Add(u.FavouriteMusicType.Order, u.FavouriteMusicType); AddMusicTypeChildren(u.FavouriteMusicType, ref musicTypesK); } } if (u.UpdateSendGenericMusic && !musicTypesK.Contains(1)) { musicTypesK.Add(1); MusicType mtAllMusic = new MusicType(1); AllMusicTypes.Add(mtAllMusic.Order, mtAllMusic); GenericMusicTypes.Add(mtAllMusic.Order, mtAllMusic); } #endregion musicTypesK.Sort(); MusicQ = new Or(musicTypesK.ConvertAll<Q>(mtk => new Q(EventMusicType.Columns.MusicTypeK, mtk)).ToArray()); } #endregion #region Populate PlaceQ and SelectedPlaces List<int> placesK = new List<int>(); if (u.HomePlaceK > 0) { placesK.Add(u.HomePlaceK); SelectedPlaces.Add(u.Home.Name, u.Home); } foreach (Place p in u.PlacesVisit(null, 0)) { if (!placesK.Contains(p.K)) { placesK.Add(p.K); SelectedPlaces.Add(p.Name, p); } } if (placesK.Count > 0) { placesK.Sort(); PlaceQ = new Or(placesK.ConvertAll<Q>(pk => new Q(Venue.Columns.PlaceK, pk)).ToArray()); } else { PlaceQ = new Q(false); } #endregion }
public static void Refund(Usr actionUsr, List<Ticket> tickets, bool refundIncludeBookingFee, decimal chargeToPromoter) { try { if (tickets.Count > 0 && actionUsr.IsSuperAdmin) { chargeToPromoter = Math.Abs(chargeToPromoter); List<int> ticketRunKs = new List<int>(); int promoterK = tickets[0].TicketRun.PromoterK; int eventK = tickets[0].TicketRun.EventK; foreach (Ticket ticket in tickets) { if (promoterK != ticket.TicketRun.PromoterK) throw new Exception("Cannot automate refund for tickets belonging to more than 1 promoter."); if (eventK != ticket.TicketRun.EventK) throw new Exception("Cannot automate refund for tickets belonging to more than 1 event."); } TicketPromoterEvent ticketPromoterEvent = new TicketPromoterEvent(promoterK, eventK); bool chargePromoterTicketPrice = ticketPromoterEvent.FundsReleased && ticketPromoterEvent.FundsTransfer != null && ticketPromoterEvent.FundsTransfer.Status == Transfer.StatusEnum.Success; bool areFundsAlreadyReleased = chargePromoterTicketPrice; decimal sumTicketPrice = 0; string failedTicketKs = ""; List<Exception> failedRefundExceptions = new List<Exception>(); int successfulRefundTransferCount = 0; int successfulRefundQuantity = 0; foreach (Ticket ticket in tickets) { try { RefundTicket(actionUsr, ticket, refundIncludeBookingFee, areFundsAlreadyReleased); if (ticket.Cancelled) { if (!ticketRunKs.Contains(ticket.TicketRunK)) ticketRunKs.Add(ticket.TicketRunK); successfulRefundTransferCount++; successfulRefundQuantity += ticket.Quantity; if (chargePromoterTicketPrice) sumTicketPrice += ticket.Price; } } catch (Exception ex) { failedRefundExceptions.Add(ex); failedTicketKs += ticket.K.ToString() + ", "; } } if (successfulRefundTransferCount > 0 && (chargePromoterTicketPrice || chargeToPromoter > 0)) { // create invoice with tickets.count * chargeToPromoter invoice item for refund. DateTime now = DateTime.Now; InvoiceDataHolder refundChargeInvoiceDH = new InvoiceDataHolder(); refundChargeInvoiceDH.ActionUsrK = Usr.Current.K; refundChargeInvoiceDH.CreatedDateTime = now; refundChargeInvoiceDH.DueDateTime = now.AddDays(tickets[0].TicketRun.Promoter.InvoiceDueDaysEffective > Vars.InvoiceDueDaysDefault ? tickets[0].TicketRun.Promoter.InvoiceDueDaysEffective : Vars.InvoiceDueDaysDefault); refundChargeInvoiceDH.DuplicateGuid = Guid.NewGuid(); refundChargeInvoiceDH.PromoterK = tickets[0].TicketRun.PromoterK; refundChargeInvoiceDH.TaxDateTime = now; refundChargeInvoiceDH.Type = Invoice.Types.Invoice; if (tickets[0].TicketRun.Promoter.PrimaryUsrK != 0) refundChargeInvoiceDH.UsrK = tickets[0].TicketRun.Promoter.PrimaryUsrK; else refundChargeInvoiceDH.UsrK = Usr.Current.K; refundChargeInvoiceDH.VatCode = Invoice.VATCodes.T1; if (chargePromoterTicketPrice) { InvoiceItemDataHolder iidhPrice = new InvoiceItemDataHolder(); iidhPrice.RevenueStartDate = now; iidhPrice.RevenueEndDate = now; iidhPrice.Description = "Ticket price refund charge for " + successfulRefundQuantity.ToString() + " ticket" + (successfulRefundQuantity > 1 ? "s" : ""); iidhPrice.ShortDescription = "Ticket price refund charge"; iidhPrice.Type = InvoiceItem.Types.Misc; iidhPrice.VatCode = InvoiceItem.VATCodes.T9; iidhPrice.SetTotal(Math.Round(sumTicketPrice, 2)); refundChargeInvoiceDH.InvoiceItemDataHolderList.Add(iidhPrice); } InvoiceItemDataHolder iidh = new InvoiceItemDataHolder(); iidh.RevenueStartDate = now; iidh.RevenueEndDate = now; iidh.Description = "Ticket refund charge for " + successfulRefundTransferCount.ToString() + " ticket" + (successfulRefundTransferCount > 1 ? "s" : "") + " transfers"; iidh.ShortDescription = "Ticket refund charge"; iidh.Type = InvoiceItem.Types.Misc; iidh.VatCode = InvoiceItem.VATCodes.T1; iidh.SetTotal(Math.Round(successfulRefundTransferCount * chargeToPromoter, 2)); refundChargeInvoiceDH.InvoiceItemDataHolderList.Add(iidh); Invoice refundChargeInovice = refundChargeInvoiceDH.UpdateInsertDelete(); foreach (int ticketRunK in ticketRunKs) { new TicketRun(ticketRunK).CalculateSoldTicketsAndUpdate(); } refundChargeInovice.UpdateAndAutoApplySuccessfulTransfersWithAvailableMoney(); Utilities.EmailInvoice(refundChargeInovice, true); if (areFundsAlreadyReleased) ticketPromoterEvent.CalculateTotalFundsAndVat(); } failedTicketKs = failedTicketKs.Trim(); if (failedTicketKs.Length > 0) { string exceptionMessages = ""; foreach (Exception ex in failedRefundExceptions) exceptionMessages += ex.Message + "\n\n"; failedTicketKs = failedTicketKs.Substring(0, failedTicketKs.Length - 1); throw new Exception("Failed to refund the following tickets #" + failedTicketKs + ". Exception messages: " + exceptionMessages); } } } catch (Exception ex) { Utilities.AdminEmailAlert("Exception in Ticket.Refund(List<Ticket> tickets)", "Exception in Ticket.Refund(List<Ticket> tickets)", ex, tickets.ConvertAll(ticket => (IBobAsHTML)ticket)); throw ex; } }
private string CurrentUrlGeneric(List<string> NewTags, string Application, params object[] Params) { Hashtable par = new Hashtable(); for (int i = 0; i < Params.Length - 1; i = i + 2) { if (Params[i] != null) { par[Params[i].ToString()] = Params[i + 1]; } } ArrayList alParams = new ArrayList(); foreach (string key in this.Keys) { if (par.ContainsKey(key)) { if (par[key] != null) { alParams.Add(key); alParams.Add(par[key].ToString()); } } else { alParams.Add(key); alParams.Add(this[key].ValuePlain.ToString()); } } foreach (string key in par.Keys) { if (!this.ContainsKey(key) && par[key] != null) { alParams.Add(key); alParams.Add(par[key].ToString()); } } string currentFilter = ""; string[] finalParams = (string[])alParams.ToArray(typeof(string)); if (HasCustomPage) { return PageUrl(this.PageType, this.PageName, finalParams); } else { if (!HasTagFilter && NewTags == null && alParams.Count > 0 && Application.Length == 0) Application = "home"; if (CurrentFilter != null) { currentFilter = CurrentFilter; if (currentFilter.Length > 0) currentFilter = currentFilter.Substring(1); } if (NewTags != null) { Application = "tags/" + ((NewTags.Count == 0 && alParams.Count > 0) ? "all" : String.Join("-", NewTags.ConvertAll(k => Cambro.Web.Helpers.UrlTextSerialize(k)).ToList().ToArray())); } else if (alParams.Count > 0 && HasTagFilter && TagFilter.Count == 0) Application = "tags/all"; return MakeUrl(currentFilter, Application, finalParams); } }