<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://communitytest.tessitura.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Pacific Northwest Tessitura Community</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/</link><description>Tessitura Community for members in Oregon and Washington state to connect, share, learn, and keep updated with system and industry trends.</description><dc:language>en-US</dc:language><generator>Telligent Community 12 Non-Production</generator><item><title /><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/m/seattle_tessitura_users-mediagallery/57858?CommentId=c6677335-1ae4-4997-b5c2-2ecb452dfd66</link><pubDate>Fri, 05 Apr 2024 21:16:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:c6677335-1ae4-4997-b5c2-2ecb452dfd66</guid><dc:creator>Kanani Reichlin</dc:creator><description>Hi All, Sorry for the delay on sharing the notes. Just a few links in here regarding HTML Template documentation. communitytest.tessitura.com/.../sessionsummary_2D00_02Apr2024_2D00_23_2D00_00_2D00_00_2D00_PM.pdf</description></item><item><title>Forum Post: RE: Sharing HTML Templates</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35590/sharing-html-templates/92407</link><pubDate>Fri, 05 Apr 2024 19:48:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:7ab7a48d-8c1f-453c-a1ce-26301cb040d6</guid><dc:creator>Joanna Barnebey</dc:creator><description>I should also show an example rendered! Mark, the bit in our template that displays pricetype for single ticket orders starts at line 348 of my code, and I also pulled it here. We do have an if/else going on for a special, different voucher package, so you can ignore that part, but this might help you play with it. @foreach (var subLineItem in product.Performance.LineItem.SubLineItems.GroupBy(x =&amp;gt; x.PriceType.Id)) { if (subLineItem.First().PriceType.Description.IndexOf(&amp;quot;Players Pack&amp;quot;) != -1) { @subLineItem.Count() x Players Pack } else { @subLineItem.Count() x @subLineItem.First().PriceType.Description } }</description></item><item><title>Forum Post: RE: Sharing HTML Templates</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35590/sharing-html-templates/92403</link><pubDate>Fri, 05 Apr 2024 18:45:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:ab3f4801-aa5e-46fa-9381-8adaa9dfc86f</guid><dc:creator>Kanani Reichlin</dc:creator><description>Hi Mark, Thanks for getting this thread started. I thought that ours had price types like you were hoping, but I misremembered. It&amp;#39;s just prices. We do have some stuff in here that hides the seat information for certain locations. We don&amp;#39;t want seat info for our General Admission or Drama School Registrations. We also have some text at the bottom that only shows up for drama school classes. It pulls in the recipient (where we store student name) and ticket text from the performance/class so that we can provide additional details about the date range and location of the class, as well as policy copy. For yours, I think an easy change would be updating the colors to match your brand, and adding a logo at the top. I am including a screenshot of the top of a ticket order, the bottom of a drama school order, and a text file with the full template script. We also have a custom website. communitytest.tessitura.com/.../SCT-Order-Confirmation_5F00_HTML-Template.txt</description></item><item><title>Forum Post: RE: Sharing HTML Templates</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35590/sharing-html-templates/92382</link><pubDate>Thu, 04 Apr 2024 22:14:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:906e16b4-5325-4fd9-9d6d-531bdd8fb397</guid><dc:creator>Joanna Barnebey</dc:creator><description>Oh, and custom website - not TNEW!</description></item><item><title>Forum Post: RE: Sharing HTML Templates</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35590/sharing-html-templates/92381</link><pubDate>Thu, 04 Apr 2024 21:23:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:96716881-022c-4bb1-8dac-8f228415221c</guid><dc:creator>Mark Huggins</dc:creator><description>Thanks Ryan! We are on v16 already, the default one is OK, however there are some very useful features we want to use that we cannot add to the default one.... Ex: QR code on the top right for the ability to scan via NSCAN if someone can&amp;#39;t find their PDF tickets but can find the order confirmation email, and the ability to add a scannable digital membership card on new membership purchases, also to be able to easily scan via NSCAN.</description></item><item><title>Forum Post: RE: Sharing HTML Templates</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35590/sharing-html-templates/92380</link><pubDate>Thu, 04 Apr 2024 20:45:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:7a932540-f163-4d43-8770-f420e7d90096</guid><dc:creator>Joanna Barnebey</dc:creator><description>Here&amp;#39;s our order confirmation html template code. There are some comments throughout, and I wish I had time today to do some more commenting, but I&amp;#39;m getting ready to be out of town next week. Let me know if you have questions about certain parts, and I&amp;#39;ll reply after I&amp;#39;m back. @*using statement required for access to Constituencies object type when making REST call to CRM/Constituencies*@ @using Tessitura.Service.Client.CRM; @using Tessitura.Service.Client.Custom; @using Tessitura.Services.Common.Client.Utils; @using System.Xml; @using System.Xml.Serialization; @using Tessitura.Service.Client.ReferenceData; @using Tessitura.Service.Client.Txn; @*added by Joanna*@ @{ var hasConstituent = Model.OrderProductView.Constituent != null; var hasAddress = Model.Address != null; var hasElectronicAddress = Model.ElectronicAddress != null; var hasBooking = Model.Booking != null; var isInSpecialConstituency = false; var constituencyMessage = Model.GetPropertyValue(&amp;quot;ConstituencyMessage&amp;quot;) ?? &amp;quot;Thank you for being a part of Friend&amp;#39;s Circle!&amp;quot;; var constituency = Model.GetPropertyValue(&amp;quot;Constituency&amp;quot;) ?? &amp;quot;FRC&amp;quot;; var hasState = hasAddress &amp;amp;&amp;amp; Model.Address.State != null; var hasProducts = Model.OrderProductView.Products != null &amp;amp;&amp;amp; Model.OrderProductView.Products.Count &amp;gt; 0; var memberships = Enumerable.Empty (); try {memberships = Model.OrderProductView.Payments.Where(x =&amp;gt; x.PaymentMethod.Id == 141); } catch {} // In case of empty payments object (zero dollar transaction) var hasMemberships = memberships != null &amp;amp;&amp;amp; memberships.Count() &amp;gt; 0; var MembershipsPaymentsTotal = hasMemberships ? memberships.Sum(x =&amp;gt; x.Amount) * -1 : 0; var membershipsProducts = Enumerable.Empty (); try {membershipsProducts = Model.OrderProductView.Products.Where(x =&amp;gt; x.Membership.Id &amp;gt; 0); } catch {} bool hasMembershipsProducts; try {hasMembershipsProducts = membershipsProducts != null &amp;amp;&amp;amp; membershipsProducts.Count() &amp;gt; 0;} catch {hasMembershipsProducts = false;} // Payment method 553 is for web roundups during purchase var roundUps = Enumerable.Empty (); try {roundUps = Model.OrderProductView.Payments.Where(x =&amp;gt; x.PaymentMethod.Id == 553); } catch {} var hasRoundUps = roundUps != null &amp;amp;&amp;amp; roundUps.Count() &amp;gt; 0; var RoundUpsPaymentsTotal = hasRoundUps ? roundUps.Sum(x =&amp;gt; x.Amount) * -1 : 0; var roundUpsProducts = Enumerable.Empty (); try {roundUpsProducts = Model.OrderProductView.Products.Where(x =&amp;gt; x.Membership.Id &amp;gt; 0); } catch {} bool hasRoundUpsProducts; try {hasRoundUpsProducts = roundUpsProducts != null &amp;amp;&amp;amp; roundUpsProducts.Count() &amp;gt; 0;} catch {hasRoundUpsProducts = false;} // Payment method 594 is for seat naming payments var seatName = Enumerable.Empty (); try {seatName = Model.OrderProductView.Payments.Where(x =&amp;gt; x.PaymentMethod.Id == 594); } catch {} var hasSeatName = seatName != null &amp;amp;&amp;amp; seatName.Count() &amp;gt; 0; var seatNamePaymentsTotal = hasSeatName ? seatName.Sum(x =&amp;gt; x.Amount) * -1 : 0; var seatNameProducts = Enumerable.Empty (); try {seatNameProducts = Model.OrderProductView.Products.Where(x =&amp;gt; x.Membership.Id &amp;gt; 0); } catch {} bool hasSeatNameProducts; try {hasSeatNameProducts = seatNameProducts != null &amp;amp;&amp;amp; seatNameProducts.Count() &amp;gt; 0;} catch {hasSeatNameProducts = false;} //The definition of a phantom payment, product, etc. is a temporary payment that compensates for a negative value when a patron is exchanging from a more expensive to a less expensive ticket. //The show-specific O.A. payment method is used to create an equal positive payment, so that if a patron makes a donation, the site won&amp;#39;t apply the negative ticket balance to their donation. var phantom = Enumerable.Empty (); try {phantom = Model.OrderProductView.Payments.Where(x =&amp;gt; x.PaymentMethod.Id == 237 || x.PaymentMethod.Id == 238 || x.PaymentMethod.Id == 239 || x.PaymentMethod.Id == 240 || x.PaymentMethod.Id == 241 || x.PaymentMethod.Id == 242 || x.PaymentMethod.Id == 243 || x.PaymentMethod.Id == 244); } catch {} var hasPhantom = phantom != null &amp;amp;&amp;amp; phantom.Count() &amp;gt; 0; var PhantomPaymentsTotal = hasPhantom ? phantom.Sum(x =&amp;gt; x.Amount) * -1 : 0; var phantomProducts = Enumerable.Empty (); try {phantomProducts = Model.OrderProductView.Products.Where(x =&amp;gt; x.Membership.Id &amp;gt; 0); } catch {} bool hasPhantomProducts; try {hasPhantomProducts = phantomProducts != null &amp;amp;&amp;amp; phantomProducts.Count() &amp;gt; 0;} catch {hasPhantomProducts = false;} var galaProducts = Enumerable.Empty (); try {galaProducts = Model.OrderProductView.Payments.Where(x =&amp;gt; x.PaymentMethod.Id == 545); } catch {} var hasGalaProducts = galaProducts != null &amp;amp;&amp;amp; galaProducts.Count() &amp;gt; 0; var state = hasState ? &amp;quot;, &amp;quot; + Model.Address.State.StateCode : &amp;quot;&amp;quot;; var electronicAddress = hasElectronicAddress ? Model.ElectronicAddress.Address : &amp;quot;&amp;quot;; var onAccountPayments = Enumerable.Empty (); try {onAccountPayments = Model.OrderProductView.Payments.Where(x =&amp;gt; x.PaymentMethod.Id != 141 &amp;amp;&amp;amp; x.PaymentMethod.AccountType == null &amp;amp;&amp;amp; x.LastFourCreditCardNumber == &amp;quot;&amp;quot; &amp;amp;&amp;amp; x.GiftCertificateNumber == null &amp;amp;&amp;amp; x.Amount &amp;gt; 0); } catch {} // In case of empty payments object (zero dollar transaction) var giftcertificatePayments = Enumerable.Empty (); try {giftcertificatePayments = Model.OrderProductView.Payments.Where(x =&amp;gt; x.GiftCertificateNumber != null &amp;amp;&amp;amp; x.Amount &amp;gt; 0); } catch {} var hasgiftcertificatePayments = giftcertificatePayments != null &amp;amp;&amp;amp; giftcertificatePayments.Count() &amp;gt; 0; var giftcertificatePaymentsTotal = hasgiftcertificatePayments ? giftcertificatePayments.Sum(x =&amp;gt; x.Amount) : 0; var hasOnAccountPayments = onAccountPayments != null &amp;amp;&amp;amp; onAccountPayments.Count() &amp;gt; 0; var onAccountPaymentsTotal = hasOnAccountPayments ? onAccountPayments.Sum(x =&amp;gt; x.Amount) : 0; } @{ &amp;#160;&amp;#160;&amp;#160;&amp;#160;//Determine if the order is Print at Home &amp;#160;&amp;#160;&amp;#160;&amp;#160;//This variable will be referenced later &amp;#160;&amp;#160;&amp;#160;&amp;#160;bool IsPAH = false; &amp;#160;&amp;#160;&amp;#160;&amp;#160;var DeliveryMethodResponse = Model.RestClient.AtUrl(&amp;quot;ReferenceData/DeliveryMethods/&amp;quot; + Model.OrderProductView.DeliveryMethod.Id).Get (); &amp;#160;&amp;#160;&amp;#160;&amp;#160;if (DeliveryMethodResponse.IsSuccessful) &amp;#160;&amp;#160;&amp;#160;&amp;#160;{ &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;IsPAH = DeliveryMethodResponse.ResponseObject.PrintAtHome; &amp;#160;&amp;#160;&amp;#160;&amp;#160;} } @if (hasConstituent) { var url = &amp;quot;CRM/Constituencies?constituentId=&amp;quot; + Model.OrderProductView.Constituent.Id + &amp;quot;&amp;amp;includeAffiliations=true&amp;quot;; var constituencies = Model.RestClient.AtUrl(url).Get ().ResponseObject; isInSpecialConstituency = constituencies != null &amp;amp;&amp;amp; constituencies.Count(x =&amp;gt; x.ConstituencyType.ShortDescription == constituency) &amp;gt; 0; } @{ //Edit these variables as needed string contentTypeIds = &amp;quot;27&amp;quot;; string showAllContent = &amp;quot;false&amp;quot;; var showPerfsInPackages = false; //Start the comma delimited list string perfIdStr = &amp;quot;,&amp;quot;; string packIdStr = &amp;quot;,&amp;quot;; //Performances in Packages if (Model.OrderProductView.Products != null){ if (showPerfsInPackages) { foreach (var invContentPkgs in Model.OrderProductView.Products.Where(x =&amp;gt; x.ProductClass.Description == &amp;quot;Package&amp;quot;)) { foreach (var invContentPkgSLIs in invContentPkgs.Package.LineItems) { if (invContentPkgSLIs.Performance != null &amp;amp;&amp;amp; perfIdStr.Contains(&amp;quot;,&amp;quot; + invContentPkgSLIs.Performance.Id + &amp;quot;,&amp;quot;) == false) { perfIdStr = perfIdStr + invContentPkgSLIs.Performance.Id + &amp;quot;,&amp;quot;; } } } } //Performances as Single Tickets foreach (var invContentPerfs in Model.OrderProductView.Products.Where(x =&amp;gt; x.ProductClass.Description == &amp;quot;Performance&amp;quot;)) { if (perfIdStr.Contains(&amp;quot;,&amp;quot; + invContentPerfs.Performance.LineItem.Performance.Id + &amp;quot;,&amp;quot;) == false) { perfIdStr = perfIdStr + invContentPerfs.Performance.LineItem.Performance.Id + &amp;quot;,&amp;quot;; } } //Packages foreach (var invContentPkgs in Model.OrderProductView.Products.Where(x =&amp;gt; x.ProductClass.Description == &amp;quot;Package&amp;quot;)) { foreach (var invContentPkgLIs in invContentPkgs.Package.LineItems) { if (invContentPkgLIs.Package != null &amp;amp;&amp;amp; packIdStr.Contains(&amp;quot;,&amp;quot; + invContentPkgLIs.Package.Id + &amp;quot;,&amp;quot;) == false) { packIdStr = packIdStr + invContentPkgLIs.Package.Id + &amp;quot;,&amp;quot;; } } } } //Trim extra commas perfIdStr = perfIdStr.Trim(&amp;#39;,&amp;#39;); packIdStr = packIdStr.Trim(&amp;#39;,&amp;#39;); //Retrieve content string invContentUrl = &amp;quot;TXN/WebContents?contentTypeIds=&amp;quot; + contentTypeIds + &amp;quot;&amp;amp;showAll=&amp;quot; + showAllContent; if (perfIdStr != &amp;quot;&amp;quot;) { invContentUrl = invContentUrl + &amp;quot;&amp;amp;productionElementIds=&amp;quot; + perfIdStr; } if (packIdStr != &amp;quot;&amp;quot;) { invContentUrl = invContentUrl + &amp;quot;&amp;amp;packageIds=&amp;quot; + packIdStr; } WebContentResults invContentResults = null; if (perfIdStr != &amp;quot;&amp;quot; | packIdStr != &amp;quot;&amp;quot;) { invContentResults = Model.RestClient.AtUrl(invContentUrl).Get ().ResponseObject; } } @if (hasConstituent) { Name: @Model.OrderProductView.Constituent.DisplayName } Order Number: @Model.OrderProductView.Id @if (hasMembershipsProducts) { Thank you so much for supporting Seattle Rep. We appreciate your patronage! Please keep this e-mail until you receive your acknowledgment letter/tax receipt. } else { Thank you for your order! We appreciate your patronage. } @if (hasProducts) { if (invContentResults != null &amp;amp;&amp;amp; invContentResults.Count() &amp;gt; 0) { foreach(var invContentResult in invContentResults) { foreach(var invContent in invContentResult.WebContents) { @Raw(invContent.Value) } } } } @if (hasProducts) { /* PERFORMANCES */ var perfs = Model.OrderProductView.Products.Where(x =&amp;gt; x.ProductClass.Description == &amp;quot;Performance&amp;quot;); int [] playersPackVenueId = {5}; int playersPackPriceTypeId = 400; int [] playersPackVouchersLineItemIds = {}; int streamCompPricetypeID = 108; int streamPaidPricetypeID = 425; if (perfs != null &amp;amp;&amp;amp; perfs.Count() &amp;gt; 0) { foreach (var product in perfs) { var performance = product.Performance.LineItem.Performance; /* CODE FOR WEB CONTENT FIELD TITLE START */ var PerformanceId = performance.Id; IRestResponse response = null; var url = &amp;quot;TXN/WebContents?productionElementIds=&amp;quot; + PerformanceId + &amp;quot;&amp;amp;contentTypeIds=3&amp;amp;showAll=true&amp;quot;; response = Model.RestClient.AtUrl(url).Get (); var errorMessages = response.ErrorMessages; string xpath = &amp;quot;WebContentResults/WebContentResult//Value[1]&amp;quot;; var PerformanceTitle = performance.Description; if (response.ErrorMessages == null) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(response.ResponseObject); if (xmlDoc.SelectSingleNode(xpath) != null) { PerformanceTitle = xmlDoc.SelectSingleNode(xpath).InnerText; } } if (PerformanceTitle.IndexOf(&amp;quot;Players Pack Voucher&amp;quot;) != -1) { PerformanceTitle = &amp;quot;Players Pack Voucher&amp;quot;; } /* CODE FOR WEB CONTENT FIELD TITLE END */ @PerformanceTitle @if (!playersPackVenueId.Contains(performance.Facility.Id)) { @performance.PerformanceDateTime.ToString(&amp;quot;MM/dd/yyyy h:mm tt&amp;quot;) @performance.Facility.Description - @product.Performance.LineItem.SubLineItems[0].Zone.Description - @foreach (var subLineItem in product.Performance.LineItem.SubLineItems) { var seatRow = string.IsNullOrEmpty(subLineItem.Seat.Number) ? &amp;quot;TBD&amp;quot; : subLineItem.Seat.Row + &amp;quot;&amp;quot; + subLineItem.Seat.Number + &amp;quot; &amp;quot;; @seatRow } @*in the below &amp;#39;if&amp;#39; line, add &amp;#39;product.Performance.LineItem.Performance.Type.Id != 10 &amp;amp;&amp;amp;&amp;#39; if we would like to go back to suppressing the date &amp;amp; time for Digital perfs*@ } @* @if (playersPackVenueId.Contains(performance.Facility.Id)) { if (product.Performance.LineItem.SubLineItems.First().PriceType.Id != streamCompPricetypeID &amp;amp;&amp;amp; product.Performance.LineItem.Performance.Type.Id != 9) { @performance.PerformanceDateTime.ToString(&amp;quot;MM/dd/yyyy h:mm tt&amp;quot;) } } *@ @foreach (var subLineItem in product.Performance.LineItem.SubLineItems.GroupBy(x =&amp;gt; x.PriceType.Id)) { if (subLineItem.First().PriceType.Description.IndexOf(&amp;quot;Players Pack&amp;quot;) != -1) { @subLineItem.Count() x Players Pack } else { @subLineItem.Count() x @subLineItem.First().PriceType.Description } } @*If the order is Print at Home, and an ETicket Release Date has been set, and the date is in the future, display the date*@ @if (IsPAH) { &amp;#160;&amp;#160;&amp;#160;&amp;#160;//Fetch the ETicket Release Date for this performance in this MOS &amp;#160;&amp;#160;&amp;#160;&amp;#160;var PerfPkgMOSResponse = Model.RestClient.AtUrl(&amp;quot;TXN/PerformancePackageModeOfSales?modeOfSaleId=&amp;quot; + Model.OrderProductView.ModeOfSale.Id + &amp;quot;&amp;amp;performanceIds=&amp;quot; + performance.Id).Get (); &amp;#160;&amp;#160;&amp;#160;&amp;#160;if (PerfPkgMOSResponse.IsSuccessful) &amp;#160;&amp;#160;&amp;#160;&amp;#160;{ &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//If a date is set and it&amp;#39;s in the future, display it &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (PerfPkgMOSResponse.ResponseObject[0].ETicketReleaseDateTime != null &amp;amp;&amp;amp; PerfPkgMOSResponse.ResponseObject[0].ETicketReleaseDateTime &amp;gt; DateTime.Now) &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{ &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Tickets will be emailed at: @PerfPkgMOSResponse.ResponseObject[0].ETicketReleaseDateTime.Value.ToString(&amp;quot;M/d/yy h:mm tt&amp;quot;) &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;} &amp;#160;&amp;#160;&amp;#160;&amp;#160;} } @if (!playersPackVenueId.Contains(performance.Facility.Id)) { if (product.Performance.LineItem.SubLineItems.First().PriceType.Id == playersPackPriceTypeId &amp;amp;&amp;amp; !playersPackVenueId.Contains(performance.Facility.Id)) { decimal lineItemPrice = 0; foreach (var perfVoucher in perfs) { if ( product.Performance.LineItem.SubLineItems.First().PriceType.Id == playersPackPriceTypeId &amp;amp;&amp;amp; playersPackVenueId.Contains(perfVoucher.Performance.LineItem.Performance.Facility.Id) &amp;amp;&amp;amp; !playersPackVouchersLineItemIds.Contains(perfVoucher.Performance.LineItem.Id) ) { lineItemPrice = product.Performance.LineItem.SubLineItems.Count() * perfVoucher.Performance.LineItem.SubLineItems.First().DueAmount + product.Performance.LineItem.TotalDue; Array.Resize(ref playersPackVouchersLineItemIds, playersPackVouchersLineItemIds.Length + 1); playersPackVouchersLineItemIds[playersPackVouchersLineItemIds.GetUpperBound(0)] = perfVoucher.Performance.LineItem.Id; break; } } @string.Format(&amp;quot;{0:C}&amp;quot;, lineItemPrice) } else { @string.Format(&amp;quot;{0:C}&amp;quot;, product.Performance.LineItem.TotalDue) } } } } // for each performance /* PACKAGES */ var packages = Model.OrderProductView.Products.Where(x =&amp;gt; x.ProductClass.Description == &amp;quot;Package&amp;quot;); if (packages != null &amp;amp;&amp;amp; packages.Count() &amp;gt; 0) { @{ var packageTotal = packages.Sum(x =&amp;gt; x.Package.LineItems.Sum(y =&amp;gt; y.TotalDue)); var superPackageId = 0; } @foreach (var product in packages) { if (superPackageId == 0 || superPackageId != product.Package.LineItems.First().SuperPackageId ) { foreach (var lineItem in product.Package.LineItems) { if ( lineItem.Performance == null) { if(superPackageId == 0 || superPackageId != lineItem.SuperPackageId){ /* CODE FOR WEB CONTENT FIELD TITLE START */ var PackageId = lineItem.Package.Id; IRestResponse response = null; var url = &amp;quot;TXN/WebContents?packageIds=&amp;quot; + PackageId + &amp;quot;&amp;amp;contentTypeIds=3&amp;amp;showAll=true&amp;quot;; response = Model.RestClient.AtUrl(url).Get (); var errorMessages = response.ErrorMessages; string xpath = &amp;quot;WebContentResults/WebContentResult//Value[1]&amp;quot;; var PackageTitle = lineItem.Package.Description; if (response.ErrorMessages == null) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(response.ResponseObject); if (xmlDoc.SelectSingleNode(xpath) != null) { PackageTitle = xmlDoc.SelectSingleNode(xpath).InnerText; } } /* CODE FOR WEB CONTENT FIELD TITLE END */ @PackageTitle } } else { var performance = lineItem.Performance; /* CODE FOR SKIPPING PLAYERS PACK/Presale Pass DUMMY PERFORMANCES */ var pkgType = lineItem.Package.Type.Id; if (pkgType == 12 || pkgType == 11 || pkgType == 8 || pkgType == 31) { continue; } /* CODE FOR SKIPPING PATRON CHOICE DUMMY PERFORMANCES */ if (pkgType == 9 || pkgType == 10 || pkgType == 18 || pkgType == 19 || pkgType == 33) { if(lineItem.SpecialRequest != null &amp;amp;&amp;amp; lineItem.SpecialRequest.Notes != null){ @lineItem.SpecialRequest.Notes } continue; } /* CODE FOR SKIPPING Facility/Zone on EDU PERFORMANCES */ var eduPkg = lineItem.Package.Type.Id; var eduTitle = performance.Description; if (eduPkg == 29) { @eduTitle @performance.PerformanceDateTime.ToString(&amp;quot;MM/dd/yyyy h:mm tt&amp;quot;) continue; } /* CODE FOR WEB CONTENT FIELD TITLE START */ var PerformanceId = performance.Id; IRestResponse response = null; var url = &amp;quot;TXN/WebContents?productionElementIds=&amp;quot; + PerformanceId + &amp;quot;&amp;amp;contentTypeIds=3&amp;amp;showAll=true&amp;quot;; response = Model.RestClient.AtUrl(url).Get (); var errorMessages = response.ErrorMessages; string xpath = &amp;quot;WebContentResults/WebContentResult//Value[1]&amp;quot;; var PerformanceTitle = performance.Description; if (response.ErrorMessages == null) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(response.ResponseObject); if (xmlDoc.SelectSingleNode(xpath) != null) { PerformanceTitle = xmlDoc.SelectSingleNode(xpath).InnerText; } } /* CODE FOR WEB CONTENT FIELD TITLE END */ @PerformanceTitle if (lineItem.SubLineItems[0].Seat.Id == 0 &amp;amp;&amp;amp; lineItem.SubLineItems[0].Seat.Row == null &amp;amp;&amp;amp; lineItem.SubLineItems[0].Seat.Number == null &amp;amp;&amp;amp; lineItem.SubLineItems[0].Seat.Section == null) { @performance.Facility.Description - @lineItem.SubLineItems[0].Zone.Description - TBD } else if (pkgType == 32) { Online Access } else { @performance.PerformanceDateTime --&amp;gt; @performance.Facility.Description @lineItem.SubLineItems[0].Zone.Description @*If the order is Print at Home, and an ETicket Release Date has been set, and the date is in the future, display the date*@ @* @if (IsPAH) { &amp;#160;&amp;#160;&amp;#160;&amp;#160;//Fetch the ETicket Release Date for this performance in this MOS &amp;#160;&amp;#160;&amp;#160;&amp;#160;var PerfPkgMOSResponse = Model.RestClient.AtUrl(&amp;quot;TXN/PerformancePackageModeOfSales?modeOfSaleId=&amp;quot; + Model.OrderProductView.ModeOfSale.Id + &amp;quot;&amp;amp;performanceIds=&amp;quot; + performance.Id).Get (); &amp;#160;&amp;#160;&amp;#160;&amp;#160;if (PerfPkgMOSResponse.IsSuccessful) &amp;#160;&amp;#160;&amp;#160;&amp;#160;{ &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//If a date is set and it&amp;#39;s in the future, display it &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (PerfPkgMOSResponse.ResponseObject[0].ETicketReleaseDateTime != null &amp;amp;&amp;amp; PerfPkgMOSResponse.ResponseObject[0].ETicketReleaseDateTime &amp;gt; DateTime.Now) &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{ &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Tickets will be emailed at: @PerfPkgMOSResponse.ResponseObject[0].ETicketReleaseDateTime.Value.ToString(&amp;quot;M/d/yy h:mm tt&amp;quot;) &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;} &amp;#160;&amp;#160;&amp;#160;&amp;#160;} } *@ } } superPackageId = lineItem.SuperPackageId; } } } } var packages2 = Model.OrderProductView.Products.Where(x =&amp;gt; x.ProductClass.Description == &amp;quot;Package&amp;quot;); if (packages2 != null &amp;amp;&amp;amp; packages2.Count() &amp;gt; 0) { foreach (var product in packages2) { var pkgID = product.Package.Id; if (pkgID &amp;gt; 0) { var PackageId = product.Package.Id; IRestResponse response = null; var url = &amp;quot;TXN/WebContents?packageIds=&amp;quot; + PackageId + &amp;quot;&amp;amp;contentTypeIds=27&amp;amp;showAll=true&amp;quot;; response = Model.RestClient.AtUrl(url).Get (); var errorMessages = response.ErrorMessages; string xpath = &amp;quot;WebContentResults/WebContentResult//Value[1]&amp;quot;; var packagetext = &amp;quot;&amp;quot;; if (response.ErrorMessages == null) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(response.ResponseObject); if (xmlDoc.SelectSingleNode(xpath) != null) { packagetext = xmlDoc.SelectSingleNode(xpath).InnerText; } } @if (packagetext != &amp;quot;&amp;quot;) { @packagetext } } } } // for each package /* GIFT CERTIFICATES */ var giftCertificates = Model.OrderProductView.Products.Where(x =&amp;gt; x.ProductClass.Description == &amp;quot;Gift Certificate&amp;quot;); var giftCertificateTotal = giftCertificates.Sum(x =&amp;gt; -x.GiftCertificate.Amount); if (giftCertificates != null &amp;amp;&amp;amp; giftCertificates.Count() &amp;gt; 0) { Gift Certificate(s) @foreach (var giftCertificate in giftCertificates) { var amount = -giftCertificate.GiftCertificate.Amount; Redemption Code: @giftCertificate.GiftCertificate.GiftCertificateNumber @string.Format(&amp;quot;{0:C}&amp;quot;, amount) } @string.Format(&amp;quot;{0:C}&amp;quot;, giftCertificateTotal) } if (packages != null &amp;amp;&amp;amp; packages.Count() &amp;gt; 0) { } else { Fees @string.Format(&amp;quot;{0:C}&amp;quot;, Model.OrderProductView.TotalFeeAmount) } if (giftcertificatePayments != null &amp;amp;&amp;amp; giftcertificatePayments.Count() &amp;gt; 0) { Gift Certificate Redemption(s) - @string.Format(&amp;quot;{0:C}&amp;quot;, giftcertificatePaymentsTotal) } if(hasRoundUps) { foreach (var roundUp in roundUps) { var roundUpAmount = @roundUp.Amount * -1; Contribution Contribution @string.Format(&amp;quot;{0:C}&amp;quot;, roundUpAmount) } } if(hasOnAccountPayments &amp;amp;&amp;amp; onAccountPaymentsTotal &amp;gt; 0) { TOTAL CREDIT USED - @string.Format(&amp;quot;{0:C}&amp;quot;, onAccountPaymentsTotal) } /* ORDER TOTALS */ var subTotal = string.Format(&amp;quot;{0:C}&amp;quot;, Model.OrderProductView.TotalPurchaseAmount + Model.OrderProductView.TotalContributionAmount); Total: @if(Model.OrderProductView.TotalDueAmount + giftCertificateTotal + MembershipsPaymentsTotal + RoundUpsPaymentsTotal + PhantomPaymentsTotal - onAccountPaymentsTotal - giftcertificatePaymentsTotal @string.Format(&amp;quot;{0:C}&amp;quot;, 0) } else { @string.Format(&amp;quot;{0:C}&amp;quot;, (Model.OrderProductView.TotalDueAmount + giftCertificateTotal + MembershipsPaymentsTotal + RoundUpsPaymentsTotal + PhantomPaymentsTotal - onAccountPaymentsTotal - giftcertificatePaymentsTotal)) } } else { if(hasSeatName) { foreach (var namingContent in seatName) { var seatNameAmount = @namingContent.Amount * -1; Named Seat in the Bagley Wright Theater Contribution @string.Format(&amp;quot;{0:C}&amp;quot;, seatNameAmount) } } else { if(hasMemberships) { foreach (var membership in memberships) { var membershipAmount = @membership.Amount * -1; Contribution Contribution @string.Format(&amp;quot;{0:C}&amp;quot;, membershipAmount) } } } } @if(hasGalaProducts){ Thank you for registering for Seattle Rep’s Revel + Raise! Whether you are joining the revelry in person or from afar, we cannot wait to raise a glass—and funds—with you in support of Seattle Rep’s mission-driven productions and programs. If you are attending, we look forward to seeing you on Saturday, April 1, 2023! If you have any questions, please contact Donor Stewardship &amp;amp; Events Manager Katelyn Woods at katelyn.woods@seattlerep.org or 206.457.3854. You will receive further documentation including an itemized receipt with Fair Market Value for your transactions following the event. } Seattle Rep D&amp;#225;maso Rodr&amp;#237;guez Artistic Director Jeffrey Herrmann Managing Director 155 Mercer Street PO Box 900923 | Seattle, WA 98109 Season Sponsor</description></item><item><title>Forum Post: RE: Sharing HTML Templates</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35590/sharing-html-templates/92379</link><pubDate>Thu, 04 Apr 2024 19:16:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:be94624d-052a-4a41-a3b1-f73630ce4474</guid><dc:creator>Ryan Rowell</dc:creator><description>Nice job! I love HTML templates, but wanted to make sure people were aware of one thing. In v16 you basically have two choices in regards to TNEW usage. 1. Use TNEWs default confirmation which can not be edited outside of the header and footer, neither of which have any real connection to the API and can not do any database queries. 2. Go full custom. We strongly recommend that organizations use the default option if at all possible, because it ensures we are able to help troubleshoot issues. The TNEW version will basically be a carbon copy of what the patron sees on their confirmation page once they complete their order, including any dynamic information that you&amp;#39;ve added. As you update any stylization etc. on your TNEW site, your confirmation will automatically inherit those changes. If you go full custom, you will need to update any stylizations both on TNEW and in your custom template. Also, you will need to code in the ability to pull your dynamic text into your custom solution.</description></item><item><title>Forum Post: Sharing HTML Templates</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35590/sharing-html-templates</link><pubDate>Thu, 04 Apr 2024 15:54:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:7608b2d1-8d10-448b-b438-ce0cb544b593</guid><dc:creator>Mark Huggins</dc:creator><description>Hello! Per our last meeting, I wanted to start a thread to hopefully collect some of your custom HTML template examples. I will start by sharing the one we use for onsite sold Gift Cards, it&amp;#39;s slightly better than the out of the box one, but still super basic w/o much other branding yet - We just wanted to add the look of a digital gift card. I only included the code for the gift card part since the rest was pretty much out of the box, let me know if you have any questions. Please share with me your HTML templates! We&amp;#39;re looking primarily for one that we can build into a copy that will serve as our one HTML template to rule them all sort of thing with all the different situations covered in the code. We&amp;#39;re struggling to get started because of missing data in the template/receipt book for things like having the price type of an admission ticket show. We&amp;#39;re using the TNEW Order Confirmation template for now for all purchases except onsite gift cards. communitytest.tessitura.com/.../Gift-Card-Confirmation-_2D00_-Digital-Card-BorderedHTML.txt</description><category domain="https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/tags/tnew">tnew</category><category domain="https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/tags/giftcertificates">giftcertificates</category><category domain="https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/tags/giftcards">giftcards</category><category domain="https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/tags/v16">v16</category><category domain="https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/tags/htmltemplates">htmltemplates</category><category domain="https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/tags/Order%2bConfirmations">Order Confirmations</category></item><item><title>Forum Post: TLCC 2023 Washington, D.C. scholarship opportunities</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35563/tlcc-2023-washington-d-c-scholarship-opportunities</link><pubDate>Tue, 02 Apr 2024 22:44:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:186b04b7-1b9b-4a71-a7ca-dc012d69999a</guid><dc:creator>Isabel Thomas</dc:creator><description>Hello PNW and Happy Tuesday! I mentioned this in our meeting. I wanted to share the TLCC 2023 Washington, D.C. scholarship opportunities that are available. This year, Tessitura is offering 10 conference scholarships (7 diversity scholarships and 3 emerging leaders scholarships). Scholars will be awarded complimentary conference registration. This includes: All sessions All networking events All conference meals and refreshment breaks (except Tuesday evening, which is a build-your-own networking night) Access to conference materials and presentations Scholars will be responsible for their own travel expenses and lodging. Application period closes on Wednesday, April 17. To find out more information, please click here: https://www.tessitura.com/community-and-events/tlcc/scholarships</description></item><item><title>File: PNWTC April 2nd Meeting - Tessitura Analytics Essentials &amp; Lean Coffee Discussion</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/m/seattle_tessitura_users-mediagallery/57858</link><pubDate>Tue, 02 Apr 2024 22:38:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:a681e96c-c1f8-4da5-9c33-e1d1ba0c75bc</guid><dc:creator>Isabel Thomas</dc:creator><description>Hey all! Thank you for those who attended our PNW Tessitura Meeting today! Here is the video of the Tessitura Analytics Essentials presentation and our Lean Coffee discussion that was about HTML customizations.</description></item><item><title>PNW Tessitura Community Meeting - April 2</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/c/e/1554</link><pubDate>Tue, 02 Apr 2024 18:00:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:c550c6dc-4061-4d0d-9140-733533bc3944</guid><dc:creator>Kanani Reichlin</dc:creator><description>Hello All, Our next PNW Tessitura Community Meeting will be April 2 11:00am-Noon Pacific. Save the Date! We are planning to have another speaker from Tessitura join us but will follow up with those details as they are confirmed. We will also follow that with ~15 minutes of Lean Coffee discussion. If you already have topics in mind, you may enter them here: https://www.leancoffeetable.com/TaskBoard/View/65829ace-5cd3-41ed-b50c-b5141d2e5a0a?guest=true Note on Zoom: We changed the zoom link at the new year, so if you have the old link saved, please replace it with this one. Thank you! Looking forward to another great meeting! Kanani Reichlin PNW Tessitura Community Co-Chair Join Zoom Meeting https://us02web.zoom.us/j/89685212142?pwd=MkQxa0ovTW1QSGhuTHNWRWVnUTA0UT09 Meeting ID: 896 8521 2142 Passcode: 253562</description></item><item><title>Forum Post: RE: PNW Resellers and Suspicious Orders</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/34260/pnw-resellers-and-suspicious-orders/92105</link><pubDate>Mon, 25 Mar 2024 20:51:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:212fac76-5921-49ec-a017-e20eb1c9adce</guid><dc:creator>Kanani Reichlin</dc:creator><description>Wanted to share this thread from the payments and transaction group, as it&amp;#39;s related. In case you missed it: community.tessitura.com/.../sql-code-to-find-ip-addresses-of-potential-broker-accounts</description></item><item><title>PNW Tessitura Community Meeting - Feb 20</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/c/e/1498</link><pubDate>Tue, 20 Feb 2024 19:00:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:ca82a0f4-7341-461c-9317-3bff14c60ae8</guid><dc:creator>Kanani Reichlin</dc:creator><description>Please join us February 20, 2024 from 11am to Noon for a Lean Coffee Discussion with your regional PNW peers. This meeting will be especially for our Newbie/Beginner Tessi Users so please forward this meeting along to any of your newest staff members! Mae Linden (they/them) will be presenting on &amp;quot; Getting to know Tessitura&amp;quot; for 30 minutes of our meeting. They are a Support Specialist Team Lead on the Tessitura team and resides in Tacoma, WA. They are also a former Community Chair! We are excited for them to join! After the presentation, we will have our regular Lean Coffee Discussion. What is Lean Coffee? Lean Coffee is a structured, but agenda-less meeting. Participants gather, build an agenda, and begin talking. If you already have items for the agenda, click here , enter your name and organization in the name field, then enter your topic in the field at the top of the page. We will vote on topics we most want to discuss during the meeting and then get to as many topics as we can during our allotted time. We hope to see you there! This meeting will take place on Zoom. See below. Seattle Opera is inviting you to a scheduled Zoom meeting. Join Zoom Meeting https://us02web.zoom.us/j/89685212142?pwd=MkQxa0ovTW1QSGhuTHNWRWVnUTA0UT09 Meeting ID: 896 8521 2142 Passcode: 253562</description></item><item><title>Forum Post: RE: PNW Resellers and Suspicious Orders</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/34260/pnw-resellers-and-suspicious-orders/91223</link><pubDate>Fri, 16 Feb 2024 00:14:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:0a0984c2-a07b-43e1-b966-4791d51bfefc</guid><dc:creator>Evan Cartwright</dc:creator><description>Updating again since I think a SQL gremlin was in there - I think I needed to add the &amp;#39;not a Theater Staff constituency holder&amp;#39; to each of the SELECT statements being UNION&amp;#39;ed together, not just at the very end. D&amp;#39;oh! Updated version attached if it&amp;#39;s helpful. communitytest.tessitura.com/.../0410.SREP-Suspicious-Orders-SQL-List.txt</description></item><item><title>Forum Post: RE: AI and ChatGPT</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/34266/ai-and-chatgpt/91161</link><pubDate>Wed, 14 Feb 2024 22:31:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:d177dab0-4f0a-4610-ba5b-bba22b793a26</guid><dc:creator>Amber  Sanders</dc:creator><description>What website do you use for sql scripts? I really need help on that.</description></item><item><title>Forum Post: RE: Reminder: Next PNWTC Meet Up Feb 20th at 11:00 AM</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35110/reminder-next-pnwtc-meet-up-feb-20th-at-11-00-am/91144</link><pubDate>Wed, 14 Feb 2024 16:05:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:c9d0926d-f8d2-4ead-a3ed-9ce24e493730</guid><dc:creator>Mae Linden</dc:creator><description>Looking forward to seeing you all there!</description></item><item><title>Forum Post: Reminder: Next PNWTC Meet Up Feb 20th at 11:00 AM</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/35110/reminder-next-pnwtc-meet-up-feb-20th-at-11-00-am</link><pubDate>Wed, 14 Feb 2024 00:47:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:5b116986-bea3-4af6-aa9a-d2f0cdc9b967</guid><dc:creator>Isabel Thomas</dc:creator><description>Hello all! We look forward to seeing you at the next PNWTC meeting next week on Tuesday Feb 20th at 11:00 AM . Zoom details below. Our next meeting will be especially for our Newbie/Beginner Tessi Users so please forward this meeting along to any of your newest staff members! Mae Linden (they/them) will be presenting on &amp;quot; Getting to know Tessitura&amp;quot; for 30 minutes of our meeting. They are a Support Specialist Team Lead on the Tessitura team and resides in Tacoma, WA. They are also a former Community Chair! We are excited for them to join! After the presentation, we will have our regular Lean Coffee Discussion. If you already have items for the agenda, click here , enter your name and organization in the name field, then enter your topic in the field at the top of the page. We will vote on topics we most want to discuss during the meeting and then get to as many topics as we can during our allotted time. Join Zoom Meeting us02web.zoom.us/.../89685212142 Meeting ID: 896 8521 2142 Passcode: 253562 --- One tap mobile +12532050468,,89685212142#,,,,*253562# US +12532158782,,89685212142#,,,,*253562# US (Tacoma) --- Dial by your location • +1 253 205 0468 US • +1 253 215 8782 US (Tacoma) • +1 669 900 9128 US (San Jose) • +1 719 359 4580 US • +1 346 248 7799 US (Houston) • +1 669 444 9171 US • +1 309 205 3325 US • +1 312 626 6799 US (Chicago) • +1 360 209 5623 US • +1 386 347 5053 US • +1 507 473 4847 US • +1 564 217 2000 US • +1 646 558 8656 US (New York) • +1 646 931 3860 US • +1 689 278 1000 US • +1 301 715 8592 US (Washington DC) • +1 305 224 1968 US Meeting ID: 896 8521 2142 Passcode: 253562 Find your local number: us02web.zoom.us/.../kdPUNSTJtT</description></item><item><title>Forum Post: RE: PNW Resellers and Suspicious Orders</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/34260/pnw-resellers-and-suspicious-orders/91138</link><pubDate>Tue, 13 Feb 2024 18:56:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:7990db96-d23b-4ecf-967f-e2fb36166724</guid><dc:creator>Evan Cartwright</dc:creator><description>Hi everyone! I&amp;#39;m sincerely sorry I started this conversation and then left you hanging in the replies. My apologies! A few updates on our side: - We continue to see a handful of speculative ticket sellers listing tickets for ridiculous prices and then buying them from us when they get a bite. After some discussion, we try to mark these accounts in Tessitura, but have generally opted not to reject orders if they come through. The rationale is that we don&amp;#39;t want to unduly punish the patron who actually shows up with those tickets at the door, since they legally are valid tickets, and we can&amp;#39;t 100% guarantee how they&amp;#39;d get their money back from the speculative seller if we reject the order. There have been a few educational moments trying to teach patrons in this situation that they can get far better prices buying directly from us...hopefully legislation will keep moving forward to ban speculative reselling altogether. - Speaking of legislation, HB 1648 is a ticketing bill still alive in the WA Legislature this session ( https://app.leg.wa.gov/billsummary?BillNumber=1648&amp;amp;Year=2023 ) - I need to read up more on it, but it&amp;#39;s good to have on the radar if you&amp;#39;re a WA state organization! - I&amp;#39;ve attached the List Manager SQL query we currently use to try to flag suspicious orders. Hopefully this is easy to parse, it&amp;#39;s basically 4 different SELECT statements UNION&amp;#39;ed together, with a DOES NOT HAVE bit at the end which we use to suppress theater employees who occasionally fall into the list as a false positive. Here are the segments we are currently watching for as potential fraud/resellers: 1) Order in the past 24 hours, using a website MOS, where the buyer is outside the PNW (WA/OR/ID/CA/British Columbia), and is buying 7+ tickets 2) Order in the past 24 hours, using a website MOS, where there are 3+ orders all originating from the same IP address 3) Order in the past 24 hours, using a website MOS, purchasing 11+ tickets 4) Order in the past 24 hours, from an account with our SUS (Suspicious Reseller) constituency and lastly, suppressing our Theater Staff constituency. - One more item from me: I started a thread in the Payments &amp;amp; Transactions group to inquire about whether any orgs have established a standard playbook or template to verify suspicious orders, as a way of gathering more paperwork in the event of a chargeback defense. Mentioning it here in case that thread bears any fruit: https://community.tessitura.com/topical_groups/payments-transactions-tessitura-community/f/discussions/35106/chargeback-defense---secondary-verification-of-orders Sorry again for the slow reply! communitytest.tessitura.com/.../SREP-Suspicious-Orders-SQL-List.txt</description></item><item><title>Forum Post: RE: AI and ChatGPT</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/34266/ai-and-chatgpt/91137</link><pubDate>Tue, 13 Feb 2024 18:39:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:49f408c7-85c2-419e-b624-13051e0bd01a</guid><dc:creator>Evan Cartwright</dc:creator><description>I haven&amp;#39;t dived into using AI tools myself for work, but some of our marketing team uses them to brainstorm social media and email subject line ideas and draft up initial copy to be punched up and edited. In terms of the issues around using public tools like ChatGPT for professional work and feeding company data into their models - I&amp;#39;m guessing many orgs are running Microsoft 365 for their email and applications, and Microsoft has started to roll out their AI Copilot to organizations of all sizes (not for free, alas - it&amp;#39;s $30/month per user or $360/year). We are thinking of piloting it with a few employees just to get the people currently dabbling with AI to use tools properly secured within our own network - I&amp;#39;ll report back if we make any progress.</description></item><item><title>Forum Post: RE: Managing multiple access points</title><link>https://communitytest.tessitura.com/local_tessitura_user_groups/seattle_tessitura_users/f/seattle_tessitura_users-forum/34995/managing-multiple-access-points/91051</link><pubDate>Sun, 04 Feb 2024 17:30:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:d25e267a-f6e4-43a8-a514-ffc4619244d3</guid><dc:creator>Madchen Petrie</dc:creator><description>That is a good point, if we have more self-service options, we wouldn&amp;#39;t need as many staff at each access point.</description></item></channel></rss>