tickera-angular-components 0.0.1-dev.174 → 0.0.1-dev.176
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -540,6 +540,7 @@ const PERFORMANCES_API_ROUTES = {
|
|
|
540
540
|
seatEventsTicket: (id) => `/performances/${id}/seat-events/ticket`,
|
|
541
541
|
seatEventsTicketAdmin: (id) => `/performances/${id}/seat-events/ticket/admin`,
|
|
542
542
|
seatEvents: (id) => `/performances/${id}/seat-events`,
|
|
543
|
+
myQrToken: (ticketUuid) => `/performances/tickets/${ticketUuid}/my-qr-token`,
|
|
543
544
|
};
|
|
544
545
|
|
|
545
546
|
const PRICE_ZONES_API_ROUTES = {
|
|
@@ -4819,6 +4820,9 @@ class TicketQrService {
|
|
|
4819
4820
|
fetchQrToken(ticketUuid) {
|
|
4820
4821
|
return this.apiService.get(PERFORMANCES_API_ROUTES.ticketQrToken(ticketUuid));
|
|
4821
4822
|
}
|
|
4823
|
+
fetchMyQrToken(ticketUuid) {
|
|
4824
|
+
return this.apiService.get(PERFORMANCES_API_ROUTES.myQrToken(ticketUuid));
|
|
4825
|
+
}
|
|
4822
4826
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrService, deps: [{ token: ApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4823
4827
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrService, providedIn: 'root' });
|
|
4824
4828
|
}
|
|
@@ -9228,14 +9232,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
9228
9232
|
|
|
9229
9233
|
class TicketMapWidgetHeaderComponent {
|
|
9230
9234
|
title = '';
|
|
9235
|
+
subtitle = '';
|
|
9231
9236
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapWidgetHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9232
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketMapWidgetHeaderComponent, isStandalone: true, selector: "ticket-map-widget-header", inputs: { title: "title" }, ngImport: i0, template: "<div class=\"ticket-map-widget-header\">\n @if (title) {\n <p class=\"ticket-map-widget-header__title\">{{ title }}</p>\n }\n\n <div class=\"ticket-map-widget-header__content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ticket-map-widget-header{display:flex;flex-direction:row;align-items:center;justify-content:start;gap:.5rem}.ticket-map-widget-header__title{font-weight:700;color:#374151;font-size:.875rem;margin:0;text-transform:uppercase}.ticket-map-widget-header__content{display:flex;align-items:center;justify-content:end;margin-left:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
9237
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketMapWidgetHeaderComponent, isStandalone: true, selector: "ticket-map-widget-header", inputs: { title: "title", subtitle: "subtitle" }, ngImport: i0, template: "<div class=\"ticket-map-widget-header\">\n @if (title) {\n <p class=\"ticket-map-widget-header__title\">{{ title }}</p>\n }\n\n @if (subtitle) {\n <p class=\"ticket-map-widget-header__subtitle\">{{ subtitle }}</p>\n }\n\n <div class=\"ticket-map-widget-header__content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ticket-map-widget-header{display:flex;flex-direction:row;align-items:center;justify-content:start;gap:.5rem}.ticket-map-widget-header__title{font-weight:700;color:#374151;font-size:.875rem;margin:0;text-transform:uppercase}.ticket-map-widget-header__subtitle{color:#9ca3af;font-size:.75rem;margin:0}.ticket-map-widget-header__content{display:flex;align-items:center;justify-content:end;margin-left:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
9233
9238
|
}
|
|
9234
9239
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapWidgetHeaderComponent, decorators: [{
|
|
9235
9240
|
type: Component,
|
|
9236
|
-
args: [{ selector: 'ticket-map-widget-header', standalone: true, imports: [CommonModule], template: "<div class=\"ticket-map-widget-header\">\n @if (title) {\n <p class=\"ticket-map-widget-header__title\">{{ title }}</p>\n }\n\n <div class=\"ticket-map-widget-header__content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ticket-map-widget-header{display:flex;flex-direction:row;align-items:center;justify-content:start;gap:.5rem}.ticket-map-widget-header__title{font-weight:700;color:#374151;font-size:.875rem;margin:0;text-transform:uppercase}.ticket-map-widget-header__content{display:flex;align-items:center;justify-content:end;margin-left:auto}\n"] }]
|
|
9241
|
+
args: [{ selector: 'ticket-map-widget-header', standalone: true, imports: [CommonModule], template: "<div class=\"ticket-map-widget-header\">\n @if (title) {\n <p class=\"ticket-map-widget-header__title\">{{ title }}</p>\n }\n\n @if (subtitle) {\n <p class=\"ticket-map-widget-header__subtitle\">{{ subtitle }}</p>\n }\n\n <div class=\"ticket-map-widget-header__content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".ticket-map-widget-header{display:flex;flex-direction:row;align-items:center;justify-content:start;gap:.5rem}.ticket-map-widget-header__title{font-weight:700;color:#374151;font-size:.875rem;margin:0;text-transform:uppercase}.ticket-map-widget-header__subtitle{color:#9ca3af;font-size:.75rem;margin:0}.ticket-map-widget-header__content{display:flex;align-items:center;justify-content:end;margin-left:auto}\n"] }]
|
|
9237
9242
|
}], propDecorators: { title: [{
|
|
9238
9243
|
type: Input
|
|
9244
|
+
}], subtitle: [{
|
|
9245
|
+
type: Input
|
|
9239
9246
|
}] } });
|
|
9240
9247
|
|
|
9241
9248
|
class TicketMapZoomControlsComponent {
|
|
@@ -9533,7 +9540,7 @@ class TicketMapPriceZonesComponent {
|
|
|
9533
9540
|
title = 'Precios por zona';
|
|
9534
9541
|
bookingDataService = inject(PerformanceBookingDataService);
|
|
9535
9542
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapPriceZonesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9536
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketMapPriceZonesComponent, isStandalone: true, selector: "ticket-map-price-zones", inputs: { title: "title" }, ngImport: i0, template: "<ticket-map-widget>\n <ticket-map-widget-header [title]=\"title\" />\n\n <div class=\"ticket-map-price-zones\">\n @for (zone of bookingDataService.roomMap()?.price_zones ?? []; track zone.id) {\n <div class=\"ticket-map-price-zones__item\">\n <span\n class=\"ticket-map-price-zones__item-color\"\n [style.background-color]=\"zone.color\"\n ></span>\n <p class=\"ticket-map-price-zones__item-name\">{{ zone.name }}</p>\n <p class=\"ticket-map-price-zones__item-price\">${{ zone.normal_price | number: '1.0-2' }}</p>\n </div>\n }\n </div>\n</ticket-map-widget>\n", styles: [".ticket-map-price-zones{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem;width:100%}.ticket-map-price-zones__item{align-items:center;border:1px solid #e5e5e5;border-radius:.5rem;display:flex;color:#9ca3af;flex-direction:row;font-size:.75rem;justify-content:start;gap:.5rem;padding:.75rem}.ticket-map-price-zones__item-color{width:.75rem;height:.75rem;border-radius:.125rem}.ticket-map-price-zones__item-name{font-size:.75rem;color:#9ca3af;margin:0}.ticket-map-price-zones__item-price{font-size:.75rem;color:#1f2937;font-weight:500;margin:0 0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
|
|
9543
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketMapPriceZonesComponent, isStandalone: true, selector: "ticket-map-price-zones", inputs: { title: "title" }, ngImport: i0, template: "<ticket-map-widget>\n <ticket-map-widget-header [title]=\"title\" />\n\n <div class=\"ticket-map-price-zones\">\n @for (zone of bookingDataService.roomMap()?.price_zones ?? []; track zone.id) {\n <div class=\"ticket-map-price-zones__item\">\n <span\n class=\"ticket-map-price-zones__item-color\"\n [style.background-color]=\"zone.color\"\n ></span>\n <p class=\"ticket-map-price-zones__item-name\">{{ zone.name }}</p>\n <p class=\"ticket-map-price-zones__item-price\">${{ zone.normal_price | number: '1.0-2' }}</p>\n </div>\n }\n </div>\n</ticket-map-widget>\n", styles: [".ticket-map-price-zones{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem;width:100%}.ticket-map-price-zones__item{align-items:center;border:1px solid #e5e5e5;border-radius:.5rem;display:flex;color:#9ca3af;flex-direction:row;font-size:.75rem;justify-content:start;gap:.5rem;padding:.75rem}.ticket-map-price-zones__item-color{width:.75rem;height:.75rem;border-radius:.125rem}.ticket-map-price-zones__item-name{font-size:.75rem;color:#9ca3af;margin:0}.ticket-map-price-zones__item-price{font-size:.75rem;color:#1f2937;font-weight:500;margin:0 0 0 auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title", "subtitle"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
|
|
9537
9544
|
}
|
|
9538
9545
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapPriceZonesComponent, decorators: [{
|
|
9539
9546
|
type: Component,
|
|
@@ -9572,10 +9579,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
9572
9579
|
}] } });
|
|
9573
9580
|
|
|
9574
9581
|
class TIcketMapProductSelectionComponent {
|
|
9582
|
+
title = 'Productos relacionados';
|
|
9583
|
+
subtitle = '';
|
|
9575
9584
|
bookingDataService = inject(PerformanceBookingDataService);
|
|
9576
9585
|
products = computed(() => this.bookingDataService.roomMap()?.products ?? [], ...(ngDevMode ? [{ debugName: "products" }] : []));
|
|
9577
9586
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TIcketMapProductSelectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9578
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TIcketMapProductSelectionComponent, isStandalone: true, selector: "ticket-map-product-selection", ngImport: i0, template: "@if (products().length > 0) {\n <ticket-map-widget>\n <ticket-map-widget-header title=\"
|
|
9587
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TIcketMapProductSelectionComponent, isStandalone: true, selector: "ticket-map-product-selection", inputs: { title: "title", subtitle: "subtitle" }, ngImport: i0, template: "@if (products().length > 0) {\n <ticket-map-widget>\n <ticket-map-widget-header [title]=\"title\" />\n\n <div class=\"products-list\">\n @for (product of products(); track product.id) {\n <ticket-map-product-selection-item [product]=\"product\" />\n }\n </div>\n </ticket-map-widget>\n}\n", styles: [".products-list{overflow-y:auto;max-height:20rem;margin:.5rem 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title", "subtitle"] }, { kind: "component", type: TicketMapProductSelectionItemComponent, selector: "ticket-map-product-selection-item", inputs: ["product"] }] });
|
|
9579
9588
|
}
|
|
9580
9589
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TIcketMapProductSelectionComponent, decorators: [{
|
|
9581
9590
|
type: Component,
|
|
@@ -9584,8 +9593,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
9584
9593
|
TicketMapWidgetComponent,
|
|
9585
9594
|
TicketMapWidgetHeaderComponent,
|
|
9586
9595
|
TicketMapProductSelectionItemComponent,
|
|
9587
|
-
], template: "@if (products().length > 0) {\n <ticket-map-widget>\n <ticket-map-widget-header title=\"
|
|
9588
|
-
}]
|
|
9596
|
+
], template: "@if (products().length > 0) {\n <ticket-map-widget>\n <ticket-map-widget-header [title]=\"title\" />\n\n <div class=\"products-list\">\n @for (product of products(); track product.id) {\n <ticket-map-product-selection-item [product]=\"product\" />\n }\n </div>\n </ticket-map-widget>\n}\n", styles: [".products-list{overflow-y:auto;max-height:20rem;margin:.5rem 0}\n"] }]
|
|
9597
|
+
}], propDecorators: { title: [{
|
|
9598
|
+
type: Input
|
|
9599
|
+
}], subtitle: [{
|
|
9600
|
+
type: Input
|
|
9601
|
+
}] } });
|
|
9589
9602
|
|
|
9590
9603
|
class TicketMapTotalsComponent {
|
|
9591
9604
|
bookingDataService;
|
|
@@ -9617,7 +9630,7 @@ class TicketMapTotalsComponent {
|
|
|
9617
9630
|
return this.selectionService.selectedTicketIdList();
|
|
9618
9631
|
}
|
|
9619
9632
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapTotalsComponent, deps: [{ token: PerformanceBookingDataService }, { token: TicketSelectionDetailsService }, { token: TicketSelectionDiscountService }, { token: TicketSelectionTotalsService }, { token: TicketSelectionService }, { token: i3$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
9620
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketMapTotalsComponent, isStandalone: true, selector: "ticket-map-totals", inputs: { title: "title", buttonText: "buttonText", loadingButtonText: "loadingButtonText", isLoading: "isLoading" }, outputs: { onPurchaseClick: "onPurchaseClick" }, ngImport: i0, template: "<ticket-map-widget class=\"w-full\">\n <ticket-map-widget-header [title]=\"title\" />\n\n <div class=\"ticket-map-totals\">\n <p class=\"ticket-map-totals__item\">\n <span>Entradas ({{ selectionService.selectedCount() | number: '1.0-2' }}):</span>\n <span> ${{ selectionTotalsService.ticketSubtotal() | number: '1.0-2' }} </span>\n </p>\n\n @if (selectionService.selectedProductCount() > 0) {\n <p class=\"ticket-map-totals__item\">\n <span>Productos ({{ selectionService.selectedProductCount() | number: '1.0-2' }}):</span>\n <span>${{ selectionTotalsService.productSubtotal() | number: '1.0-2' }}</span>\n </p>\n }\n\n @if (serviceFee > 0) {\n <p class=\"ticket-map-totals__item\">\n <span>Tarifa de servicio:</span>\n <span>${{ bookingDataService.show()?.service_fee ?? '0' | number: '1.0-2' }}</span>\n </p>\n }\n\n @if (!!selectionDiscountService.coupon() && selectionTotalsService.discountAmount()) {\n <p class=\"ticket-map-totals__item\">\n <span>Cup\u00F3n de descuento:</span>\n <span class=\"line-through\">\n -${{ selectionTotalsService.discountAmount() | number: '1.0-2' }}\n @if (selectionDiscountService.selectedDiscount()?.discountType === 'percentage') {\n ({{ selectionDiscountService.coupon()?.discount_value }}%)\n }\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.corporateBond()) {\n <p class=\"ticket-map-totals__item\">\n <span>Bono corporativo:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.corporateBond()?.value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.giftBond()) {\n <p class=\"ticket-map-totals__item\">\n <span>Bono de regalo:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.giftBond()?.original_value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.vipCard() && selectionTotalsService.discountAmount()) {\n <p class=\"ticket-map-totals__item\">\n <span>Tarjeta VIP:</span>\n <span class=\"line-through\">\n -${{ selectionTotalsService.discountAmount() | number: '1.0-2' }} ({{\n selectionDiscountService.vipCard()?.category_snapshot?.discount_percentage\n }}%)\n </span>\n </p>\n }\n\n <hr class=\"ticket-map-totals__divider\" />\n\n <div class=\"ticket-map-totals__calculated\">\n <span class=\"ticket-map-totals__calculated-title\">Total:</span>\n\n @if (\n selectionTotalsService.totalDiscounted() || selectionTotalsService.totalDiscounted() === 0\n ) {\n <span class=\"ticket-map-totals__calculated-inline\">\n <span class=\"ticket-map-totals__calculated-discount\">\n ${{ selectionTotalsService.totalValue() | currency: 'COP' : 'symbol' : '1.0-2' }}\n </span>\n <span class=\"ticket-map-totals__calculated-total\">\n ${{ selectionTotalsService.totalDiscounted() | currency: 'COP' : 'symbol' : '1.0-2' }}\n </span>\n </span>\n } @else {\n <span class=\"ticket-map-totals__calculated-total\">\n ${{ selectionTotalsService.totalValue() | number: '1.0-2' }}\n </span>\n }\n </div>\n\n @if (selectionService.selectedCount() > 0 || selectionService.selectedProductCount() > 0) {\n <div class=\"flex flex-col gap-2\">\n <app-button\n (click)=\"onPurchaseClick.emit()\"\n size=\"sm\"\n icon=\"ri-dashboard-3-line\"\n [text]=\"buttonText\"\n [loadingText]=\"loadingButtonText\"\n [loading]=\"isLoading\"\n variant=\"primary\"\n />\n </div>\n }\n </div>\n</ticket-map-widget>\n", styles: [".ticket-map-totals{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem;width:100%}.ticket-map-totals__item{align-items:center;color:#9ca3af;display:flex;flex-direction:row;font-size:.75rem;justify-content:space-between;margin:0}.ticket-map-totals__divider{border:none;border-top:1px solid #e5e7eb;width:100%}.ticket-map-totals__calculated{display:flex;flex-direction:row;align-items:center;justify-content:space-between;margin:0}.ticket-map-totals__calculated-title{color:#4b5563;font-size:1rem;font-weight:700}.ticket-map-totals__calculated-inline{display:flex;flex-direction:column;align-items:flex-end}.ticket-map-totals__calculated-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}.ticket-map-totals__calculated-total{color:#4b5563;font-size:1rem;font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title"] }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }] });
|
|
9633
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketMapTotalsComponent, isStandalone: true, selector: "ticket-map-totals", inputs: { title: "title", buttonText: "buttonText", loadingButtonText: "loadingButtonText", isLoading: "isLoading" }, outputs: { onPurchaseClick: "onPurchaseClick" }, ngImport: i0, template: "<ticket-map-widget class=\"w-full\">\n <ticket-map-widget-header [title]=\"title\" />\n\n <div class=\"ticket-map-totals\">\n <p class=\"ticket-map-totals__item\">\n <span>Entradas ({{ selectionService.selectedCount() | number: '1.0-2' }}):</span>\n <span> ${{ selectionTotalsService.ticketSubtotal() | number: '1.0-2' }} </span>\n </p>\n\n @if (selectionService.selectedProductCount() > 0) {\n <p class=\"ticket-map-totals__item\">\n <span>Productos ({{ selectionService.selectedProductCount() | number: '1.0-2' }}):</span>\n <span>${{ selectionTotalsService.productSubtotal() | number: '1.0-2' }}</span>\n </p>\n }\n\n @if (serviceFee > 0) {\n <p class=\"ticket-map-totals__item\">\n <span>Tarifa de servicio:</span>\n <span>${{ bookingDataService.show()?.service_fee ?? '0' | number: '1.0-2' }}</span>\n </p>\n }\n\n @if (!!selectionDiscountService.coupon() && selectionTotalsService.discountAmount()) {\n <p class=\"ticket-map-totals__item\">\n <span>Cup\u00F3n de descuento:</span>\n <span class=\"line-through\">\n -${{ selectionTotalsService.discountAmount() | number: '1.0-2' }}\n @if (selectionDiscountService.selectedDiscount()?.discountType === 'percentage') {\n ({{ selectionDiscountService.coupon()?.discount_value }}%)\n }\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.corporateBond()) {\n <p class=\"ticket-map-totals__item\">\n <span>Bono corporativo:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.corporateBond()?.value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.giftBond()) {\n <p class=\"ticket-map-totals__item\">\n <span>Bono de regalo:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.giftBond()?.original_value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.vipCard() && selectionTotalsService.discountAmount()) {\n <p class=\"ticket-map-totals__item\">\n <span>Tarjeta VIP:</span>\n <span class=\"line-through\">\n -${{ selectionTotalsService.discountAmount() | number: '1.0-2' }} ({{\n selectionDiscountService.vipCard()?.category_snapshot?.discount_percentage\n }}%)\n </span>\n </p>\n }\n\n <hr class=\"ticket-map-totals__divider\" />\n\n <div class=\"ticket-map-totals__calculated\">\n <span class=\"ticket-map-totals__calculated-title\">Total:</span>\n\n @if (\n selectionTotalsService.totalDiscounted() || selectionTotalsService.totalDiscounted() === 0\n ) {\n <span class=\"ticket-map-totals__calculated-inline\">\n <span class=\"ticket-map-totals__calculated-discount\">\n ${{ selectionTotalsService.totalValue() | currency: 'COP' : 'symbol' : '1.0-2' }}\n </span>\n <span class=\"ticket-map-totals__calculated-total\">\n ${{ selectionTotalsService.totalDiscounted() | currency: 'COP' : 'symbol' : '1.0-2' }}\n </span>\n </span>\n } @else {\n <span class=\"ticket-map-totals__calculated-total\">\n ${{ selectionTotalsService.totalValue() | number: '1.0-2' }}\n </span>\n }\n </div>\n\n @if (selectionService.selectedCount() > 0 || selectionService.selectedProductCount() > 0) {\n <div class=\"flex flex-col gap-2\">\n <app-button\n (click)=\"onPurchaseClick.emit()\"\n size=\"sm\"\n icon=\"ri-dashboard-3-line\"\n [text]=\"buttonText\"\n [loadingText]=\"loadingButtonText\"\n [loading]=\"isLoading\"\n variant=\"primary\"\n />\n </div>\n }\n </div>\n</ticket-map-widget>\n", styles: [".ticket-map-totals{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem;width:100%}.ticket-map-totals__item{align-items:center;color:#9ca3af;display:flex;flex-direction:row;font-size:.75rem;justify-content:space-between;margin:0}.ticket-map-totals__divider{border:none;border-top:1px solid #e5e7eb;width:100%}.ticket-map-totals__calculated{display:flex;flex-direction:row;align-items:center;justify-content:space-between;margin:0}.ticket-map-totals__calculated-title{color:#4b5563;font-size:1rem;font-weight:700}.ticket-map-totals__calculated-inline{display:flex;flex-direction:column;align-items:flex-end}.ticket-map-totals__calculated-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}.ticket-map-totals__calculated-total{color:#4b5563;font-size:1rem;font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title", "subtitle"] }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }] });
|
|
9621
9634
|
}
|
|
9622
9635
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapTotalsComponent, decorators: [{
|
|
9623
9636
|
type: Component,
|
|
@@ -9646,7 +9659,7 @@ class TicketMapWrapperComponent {
|
|
|
9646
9659
|
needsLogin = false;
|
|
9647
9660
|
isLoggedIn = true;
|
|
9648
9661
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9649
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: TicketMapWrapperComponent, isStandalone: true, selector: "ticket-map-wrapper", inputs: { readOnly: "readOnly", needsLogin: "needsLogin", isLoggedIn: "isLoggedIn" }, outputs: { selectionChange: "selectionChange", needsLoginError: "needsLoginError" }, ngImport: i0, template: "<ticket-map-widget>\n <ticket-map-widget-header title=\"Plano de la sala\">\n <ticket-map-floor-selector />\n <div class=\"zoom-controls-wrapper\">\n <ticket-map-zoom-controls />\n </div>\n </ticket-map-widget-header>\n\n <div class=\"seat-map-wrapper\" #wrapper>\n <performance-ticket-map\n [readOnly]=\"readOnly\"\n [needsLogin]=\"needsLogin\"\n [isLoggedIn]=\"isLoggedIn\"\n (needsLoginError)=\"needsLoginError.emit()\"\n (selectionChange)=\"selectionChange.emit()\"\n />\n </div>\n</ticket-map-widget>\n", styles: [".seat-map-wrapper{position:relative;overflow:hidden;touch-action:pan-x pan-y;width:100%}.zoom-controls-wrapper{margin-left:1rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title"] }, { kind: "component", type: TicketMapFloorSelectorComponent, selector: "ticket-map-floor-selector" }, { kind: "component", type: TicketMapZoomControlsComponent, selector: "ticket-map-zoom-controls" }, { kind: "component", type: PerformanceTicketMapComponent, selector: "performance-ticket-map", inputs: ["readOnly", "needsLogin", "isLoggedIn"], outputs: ["selectionChange", "needsLoginError"] }] });
|
|
9662
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: TicketMapWrapperComponent, isStandalone: true, selector: "ticket-map-wrapper", inputs: { readOnly: "readOnly", needsLogin: "needsLogin", isLoggedIn: "isLoggedIn" }, outputs: { selectionChange: "selectionChange", needsLoginError: "needsLoginError" }, ngImport: i0, template: "<ticket-map-widget>\n <ticket-map-widget-header title=\"Plano de la sala\">\n <ticket-map-floor-selector />\n <div class=\"zoom-controls-wrapper\">\n <ticket-map-zoom-controls />\n </div>\n </ticket-map-widget-header>\n\n <div class=\"seat-map-wrapper\" #wrapper>\n <performance-ticket-map\n [readOnly]=\"readOnly\"\n [needsLogin]=\"needsLogin\"\n [isLoggedIn]=\"isLoggedIn\"\n (needsLoginError)=\"needsLoginError.emit()\"\n (selectionChange)=\"selectionChange.emit()\"\n />\n </div>\n</ticket-map-widget>\n", styles: [".seat-map-wrapper{position:relative;overflow:hidden;touch-action:pan-x pan-y;width:100%}.zoom-controls-wrapper{margin-left:1rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title", "subtitle"] }, { kind: "component", type: TicketMapFloorSelectorComponent, selector: "ticket-map-floor-selector" }, { kind: "component", type: TicketMapZoomControlsComponent, selector: "ticket-map-zoom-controls" }, { kind: "component", type: PerformanceTicketMapComponent, selector: "performance-ticket-map", inputs: ["readOnly", "needsLogin", "isLoggedIn"], outputs: ["selectionChange", "needsLoginError"] }] });
|
|
9650
9663
|
}
|
|
9651
9664
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapWrapperComponent, decorators: [{
|
|
9652
9665
|
type: Component,
|
|
@@ -9732,7 +9745,7 @@ class SeatSelectionSummaryComponent {
|
|
|
9732
9745
|
: item.id;
|
|
9733
9746
|
}
|
|
9734
9747
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SeatSelectionSummaryComponent, deps: [{ token: TicketSelectionService }], target: i0.ɵɵFactoryTarget.Component });
|
|
9735
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: SeatSelectionSummaryComponent, isStandalone: true, selector: "seat-selection-summary", inputs: { title: "title", clearButtonText: "clearButtonText" }, ngImport: i0, template: "<ticket-map-widget>\n <ticket-map-widget-header [title]=\"title\" />\n\n @if (selectionService.selectedCount() > 0) {\n <div class=\"tickets-list\">\n @for (item of selectionService.summaryItems(); track trackByItem(item)) {\n <seat-selection-summary-item [item]=\"item\" />\n }\n </div>\n\n @if (selectionService.selectedCount() > 0) {\n <div class=\"tickets-actions\">\n <app-button\n size=\"xs\"\n [text]=\"clearButtonText\"\n icon=\"ri-delete-bin-line\"\n (clicked)=\"selectionService.clearSelection()\"\n />\n </div>\n }\n } @else {\n <seat-selection-empty-summary />\n }\n</ticket-map-widget>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: SeatSelectionEmptySummaryComponent, selector: "seat-selection-empty-summary" }, { kind: "component", type: SeatSelectionSummaryItemComponent, selector: "seat-selection-summary-item", inputs: ["item"] }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title"] }] });
|
|
9748
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: SeatSelectionSummaryComponent, isStandalone: true, selector: "seat-selection-summary", inputs: { title: "title", clearButtonText: "clearButtonText" }, ngImport: i0, template: "<ticket-map-widget>\n <ticket-map-widget-header [title]=\"title\" />\n\n @if (selectionService.selectedCount() > 0) {\n <div class=\"tickets-list\">\n @for (item of selectionService.summaryItems(); track trackByItem(item)) {\n <seat-selection-summary-item [item]=\"item\" />\n }\n </div>\n\n @if (selectionService.selectedCount() > 0) {\n <div class=\"tickets-actions\">\n <app-button\n size=\"xs\"\n [text]=\"clearButtonText\"\n icon=\"ri-delete-bin-line\"\n (clicked)=\"selectionService.clearSelection()\"\n />\n </div>\n }\n } @else {\n <seat-selection-empty-summary />\n }\n</ticket-map-widget>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: SeatSelectionEmptySummaryComponent, selector: "seat-selection-empty-summary" }, { kind: "component", type: SeatSelectionSummaryItemComponent, selector: "seat-selection-summary-item", inputs: ["item"] }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title", "subtitle"] }] });
|
|
9736
9749
|
}
|
|
9737
9750
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SeatSelectionSummaryComponent, decorators: [{
|
|
9738
9751
|
type: Component,
|
|
@@ -9951,6 +9964,7 @@ class TicketQrComponent {
|
|
|
9951
9964
|
ticketQrService;
|
|
9952
9965
|
platformId;
|
|
9953
9966
|
ticketUuid;
|
|
9967
|
+
isCustomer = false;
|
|
9954
9968
|
qrCanvas;
|
|
9955
9969
|
loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
9956
9970
|
error = signal(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
@@ -10014,8 +10028,10 @@ class TicketQrComponent {
|
|
|
10014
10028
|
if (this.isFetching)
|
|
10015
10029
|
return;
|
|
10016
10030
|
this.isFetching = true;
|
|
10017
|
-
this.
|
|
10018
|
-
|
|
10031
|
+
const service = this.isCustomer
|
|
10032
|
+
? this.ticketQrService.fetchMyQrToken
|
|
10033
|
+
: this.ticketQrService.fetchQrToken;
|
|
10034
|
+
service(this.ticketUuid)
|
|
10019
10035
|
.pipe(takeUntil$1(this.destroy$))
|
|
10020
10036
|
.subscribe({
|
|
10021
10037
|
next: (res) => {
|
|
@@ -10039,8 +10055,10 @@ class TicketQrComponent {
|
|
|
10039
10055
|
return;
|
|
10040
10056
|
this.refreshing.set(true);
|
|
10041
10057
|
this.isFetching = true;
|
|
10042
|
-
this.
|
|
10043
|
-
|
|
10058
|
+
const service = this.isCustomer
|
|
10059
|
+
? this.ticketQrService.fetchMyQrToken
|
|
10060
|
+
: this.ticketQrService.fetchQrToken;
|
|
10061
|
+
service(this.ticketUuid)
|
|
10044
10062
|
.pipe(takeUntil$1(this.destroy$))
|
|
10045
10063
|
.subscribe({
|
|
10046
10064
|
next: (res) => {
|
|
@@ -10078,7 +10096,7 @@ class TicketQrComponent {
|
|
|
10078
10096
|
});
|
|
10079
10097
|
}
|
|
10080
10098
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrComponent, deps: [{ token: TicketQrService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
|
|
10081
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketQrComponent, isStandalone: true, selector: "performance-ticket-qr", inputs: { ticketUuid: "ticketUuid" }, viewQueries: [{ propertyName: "qrCanvas", first: true, predicate: ["qrCanvas"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"ticket-qr\">\n @if (loading()) {\n <div class=\"ticket-qr__loader\">\n <span class=\"ticket-qr__loader-text\">Cargando QR...</span>\n </div>\n }\n\n @if (error()) {\n <div class=\"ticket-qr__container\">\n <app-alert text=\"Error al cargar el c\u00F3digo QR\" type=\"error\" />\n <app-button text=\"Reintentar\" (clicked)=\"retry()\" [disabled]=\"loading()\" />\n </div>\n }\n\n <div [class.hidden]=\"loading() || error()\" class=\"ticket-qr__container\">\n <div class=\"transition-opacity duration-300\" [class.opacity-50]=\"refreshing()\">\n <canvas #qrCanvas class=\"ticket-qr__canvas\" width=\"256\" height=\"256\"></canvas>\n </div>\n <span class=\"ticket-qr__updating-text\">\n {{ countdown() > 0 ? `Actualizando en ${countdown()}` : '0s' }}\n </span>\n </div>\n</div>\n", styles: [".ticket-qr{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;height:auto;padding:1rem;width:100%}.ticket-qr__loader{align-items:center;background-color:#f3f4f6;border-radius:.5rem;display:flex;flex-flow:column nowrap;height:16rem;justify-content:center;width:16rem}.ticket-qr__loader-text{color:#9ca3af;font-size:.875rem}.ticket-qr__container{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;width:100%}.ticket-qr__container.hidden{display:none}.ticket-qr__canvas{box-shadow:0 0 10px #0003;border-radius:.5rem}.ticket-qr__updating-text{color:#9ca3af;font-size:.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: AppAlertComponent, selector: "app-alert", inputs: ["type", "text", "closeable", "size"] }] });
|
|
10099
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketQrComponent, isStandalone: true, selector: "performance-ticket-qr", inputs: { ticketUuid: "ticketUuid", isCustomer: "isCustomer" }, viewQueries: [{ propertyName: "qrCanvas", first: true, predicate: ["qrCanvas"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"ticket-qr\">\n @if (loading()) {\n <div class=\"ticket-qr__loader\">\n <span class=\"ticket-qr__loader-text\">Cargando QR...</span>\n </div>\n }\n\n @if (error()) {\n <div class=\"ticket-qr__container\">\n <app-alert text=\"Error al cargar el c\u00F3digo QR\" type=\"error\" />\n <app-button text=\"Reintentar\" (clicked)=\"retry()\" [disabled]=\"loading()\" />\n </div>\n }\n\n <div [class.hidden]=\"loading() || error()\" class=\"ticket-qr__container\">\n <div class=\"transition-opacity duration-300\" [class.opacity-50]=\"refreshing()\">\n <canvas #qrCanvas class=\"ticket-qr__canvas\" width=\"256\" height=\"256\"></canvas>\n </div>\n <span class=\"ticket-qr__updating-text\">\n {{ countdown() > 0 ? `Actualizando en ${countdown()}` : '0s' }}\n </span>\n </div>\n</div>\n", styles: [".ticket-qr{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;height:auto;padding:1rem;width:100%}.ticket-qr__loader{align-items:center;background-color:#f3f4f6;border-radius:.5rem;display:flex;flex-flow:column nowrap;height:16rem;justify-content:center;width:16rem}.ticket-qr__loader-text{color:#9ca3af;font-size:.875rem}.ticket-qr__container{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;width:100%}.ticket-qr__container.hidden{display:none}.ticket-qr__canvas{box-shadow:0 0 10px #0003;border-radius:.5rem}.ticket-qr__updating-text{color:#9ca3af;font-size:.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: AppAlertComponent, selector: "app-alert", inputs: ["type", "text", "closeable", "size"] }] });
|
|
10082
10100
|
}
|
|
10083
10101
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrComponent, decorators: [{
|
|
10084
10102
|
type: Component,
|
|
@@ -10089,6 +10107,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
10089
10107
|
}] }], propDecorators: { ticketUuid: [{
|
|
10090
10108
|
type: Input,
|
|
10091
10109
|
args: [{ required: true }]
|
|
10110
|
+
}], isCustomer: [{
|
|
10111
|
+
type: Input
|
|
10092
10112
|
}], qrCanvas: [{
|
|
10093
10113
|
type: ViewChild,
|
|
10094
10114
|
args: ['qrCanvas', { static: true }]
|
|
@@ -10096,6 +10116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
10096
10116
|
|
|
10097
10117
|
class TicketQrModalComponent {
|
|
10098
10118
|
ticketQrModalService;
|
|
10119
|
+
isCustomer = false;
|
|
10099
10120
|
constructor(ticketQrModalService) {
|
|
10100
10121
|
this.ticketQrModalService = ticketQrModalService;
|
|
10101
10122
|
}
|
|
@@ -10112,16 +10133,19 @@ class TicketQrModalComponent {
|
|
|
10112
10133
|
this.ticketQrModalService.close();
|
|
10113
10134
|
}
|
|
10114
10135
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrModalComponent, deps: [{ token: TicketQrModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
10115
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketQrModalComponent, isStandalone: true, selector: "ticket-qr-modal", ngImport: i0, template: "<app-modal title=\"C\u00F3digo QR del ticket\" [isOpen]=\"isOpen\" (closeModal)=\"onClose()\" size=\"md\">\n <div class=\"ticket-qr-modal\">\n @if (ticketDescription(); as desc) {\n <p class=\"ticket-qr-modal__description\">{{ desc }}</p>\n }\n\n @if (ticketUuid(); as uuid) {\n <performance-ticket-qr [ticketUuid]=\"uuid\" />\n }\n </div>\n</app-modal>\n", styles: [".ticket-qr-modal__description{color:#6b7280;font-weight:700;font-size:1rem;margin-bottom:1rem;text-align:center;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppModalComponent, selector: "app-modal", inputs: ["title", "disableClose", "showHeader", "showCloseButton", "showTitle", "interactiveClose", "isOpen", "size"], outputs: ["closeModal"] }, { kind: "component", type: TicketQrComponent, selector: "performance-ticket-qr", inputs: ["ticketUuid"] }] });
|
|
10136
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketQrModalComponent, isStandalone: true, selector: "ticket-qr-modal", inputs: { isCustomer: "isCustomer" }, ngImport: i0, template: "<app-modal title=\"C\u00F3digo QR del ticket\" [isOpen]=\"isOpen\" (closeModal)=\"onClose()\" size=\"md\">\n <div class=\"ticket-qr-modal\">\n @if (ticketDescription(); as desc) {\n <p class=\"ticket-qr-modal__description\">{{ desc }}</p>\n }\n\n @if (ticketUuid(); as uuid) {\n <performance-ticket-qr [ticketUuid]=\"uuid\" [isCustomer]=\"isCustomer\" />\n }\n </div>\n</app-modal>\n", styles: [".ticket-qr-modal__description{color:#6b7280;font-weight:700;font-size:1rem;margin-bottom:1rem;text-align:center;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppModalComponent, selector: "app-modal", inputs: ["title", "disableClose", "showHeader", "showCloseButton", "showTitle", "interactiveClose", "isOpen", "size"], outputs: ["closeModal"] }, { kind: "component", type: TicketQrComponent, selector: "performance-ticket-qr", inputs: ["ticketUuid", "isCustomer"] }] });
|
|
10116
10137
|
}
|
|
10117
10138
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrModalComponent, decorators: [{
|
|
10118
10139
|
type: Component,
|
|
10119
|
-
args: [{ selector: 'ticket-qr-modal', standalone: true, imports: [CommonModule, AppModalComponent, TicketQrComponent], template: "<app-modal title=\"C\u00F3digo QR del ticket\" [isOpen]=\"isOpen\" (closeModal)=\"onClose()\" size=\"md\">\n <div class=\"ticket-qr-modal\">\n @if (ticketDescription(); as desc) {\n <p class=\"ticket-qr-modal__description\">{{ desc }}</p>\n }\n\n @if (ticketUuid(); as uuid) {\n <performance-ticket-qr [ticketUuid]=\"uuid\" />\n }\n </div>\n</app-modal>\n", styles: [".ticket-qr-modal__description{color:#6b7280;font-weight:700;font-size:1rem;margin-bottom:1rem;text-align:center;width:100%}\n"] }]
|
|
10120
|
-
}], ctorParameters: () => [{ type: TicketQrModalService }]
|
|
10140
|
+
args: [{ selector: 'ticket-qr-modal', standalone: true, imports: [CommonModule, AppModalComponent, TicketQrComponent], template: "<app-modal title=\"C\u00F3digo QR del ticket\" [isOpen]=\"isOpen\" (closeModal)=\"onClose()\" size=\"md\">\n <div class=\"ticket-qr-modal\">\n @if (ticketDescription(); as desc) {\n <p class=\"ticket-qr-modal__description\">{{ desc }}</p>\n }\n\n @if (ticketUuid(); as uuid) {\n <performance-ticket-qr [ticketUuid]=\"uuid\" [isCustomer]=\"isCustomer\" />\n }\n </div>\n</app-modal>\n", styles: [".ticket-qr-modal__description{color:#6b7280;font-weight:700;font-size:1rem;margin-bottom:1rem;text-align:center;width:100%}\n"] }]
|
|
10141
|
+
}], ctorParameters: () => [{ type: TicketQrModalService }], propDecorators: { isCustomer: [{
|
|
10142
|
+
type: Input
|
|
10143
|
+
}] } });
|
|
10121
10144
|
|
|
10122
10145
|
class OrderItemsComponent {
|
|
10123
10146
|
ticketQrModalService;
|
|
10124
10147
|
order;
|
|
10148
|
+
isCustomer = false;
|
|
10125
10149
|
ticketCanOpenQr = ticketCanOpenQr;
|
|
10126
10150
|
constructor(ticketQrModalService) {
|
|
10127
10151
|
this.ticketQrModalService = ticketQrModalService;
|
|
@@ -10175,7 +10199,7 @@ class OrderItemsComponent {
|
|
|
10175
10199
|
this.ticketQrModalService.open(ticketUuid, description);
|
|
10176
10200
|
}
|
|
10177
10201
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderItemsComponent, deps: [{ token: TicketQrModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
10178
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderItemsComponent, isStandalone: true, selector: "order-items", inputs: { order: "order" }, ngImport: i0, template: "@if (!!order) {\n <div class=\"order-items\">\n <div class=\"order-items__header\">\n <p class=\"order-items__header-title\">\n Informaci\u00F3n de los art\u00EDculos comprados ({{ order.order_items.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-items__table-container\">\n <table class=\"order-items__table\">\n <thead class=\"order-items__table-head\">\n <tr class=\"order-items__table-head-row\">\n <th class=\"order-items__table-head-cell\">Tipo</th>\n <th class=\"order-items__table-head-cell\">Descripci\u00F3n</th>\n\n <th class=\"order-items__table-head-cell text-right\">Cant.</th>\n <th class=\"order-items__table-head-cell text-right\">Precio</th>\n <th class=\"order-items__table-head-cell text-right\">Total</th>\n @if (showActionColumn) {\n <th class=\"order-items__table-head-cell\">Acciones</th>\n }\n </tr>\n </thead>\n <tbody class=\"order-items__table-body\">\n @for (item of order.order_items; track $index) {\n <tr class=\"order-items__table-body-row\">\n <td class=\"order-items__table-body-cell\">\n <order-item-type-badge [item]=\"item\" size=\"xs\" />\n </td>\n\n <td class=\"order-items__table-body-cell\">\n {{ item.description }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n {{ item.quantity }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n ${{ item.normal_price | number: '1.0-2' }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n <strong>\n ${{ itemTotal(item.quantity, item.normal_price) | number: '1.0-2' }}\n </strong>\n </td>\n\n @if (showActionColumn) {\n <td class=\"order-items__table-body-cell actions\">\n @if (item.ticket && ticketCanOpenQr(order, item.ticket)) {\n <app-button\n text=\"Ver ticket\"\n size=\"xs\"\n icon=\"ri-eye-line\"\n (clicked)=\"openTicketQr(item.ticket_uuid!, item.description)\"\n />\n }\n\n @if (item.ticket && item.ticket.checked_in) {\n <app-badge text=\"Usado\" color=\"error\" size=\"xs\" />\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"order-items__totals\">\n <dl class=\"order-items__totals-container\">\n @if (giftBonds.length > 0 && totals.giftBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos de regalo ({{ giftBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.giftBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.giftBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (corporateBonds.length > 0 && totals.corporateBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Bonos corporativos ({{ corporateBonds.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.corporateBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.corporateBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (vipRecharges.length > 0 && totals.vipRecharges > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Recargas de tarjeta VIP ({{ vipRecharges.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.vipRecharges > 0) {\n <span class=\"text-gray-900\"> ${{ totals.vipRecharges | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (tickets.length > 0 && totals.tickets > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Entradas ({{ tickets.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.tickets > 0) {\n <span class=\"text-gray-900\"> ${{ totals.tickets | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (products.length > 0 && totals.products > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Productos</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.products > 0) {\n <span class=\"text-gray-900\"> ${{ totals.products | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Tarifa de servicio</dt>\n <dd class=\"order-items__totals-item-value\">\n <span class=\"text-gray-900\"> ${{ order.service_fee | number: '1.0-2' }} </span>\n </dd>\n </div>\n }\n\n @if (hasDiscount()) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Descuento</dt>\n <dd class=\"order-items__totals-item-title\">\n $-{{ order.discount_amount | number: '1.0-2' }}\n </dd>\n </div>\n }\n\n <div class=\"order-items__totals-item total-item\">\n <dt class=\"order-items__totals-item-total\">Total</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (!hasDiscount()) {\n <span class=\"order-items__totals-item-total\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n }\n @if (hasDiscount()) {\n <span class=\"order-items__totals-item-discount-wrapper\">\n <span class=\"order-items__totals-item-discount\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n <span class=\"order-items__totals-item-total\">\n ${{ order.total_discounted | number: '1.0-2' }}\n </span>\n </span>\n }\n </dd>\n </div>\n </dl>\n </div>\n </div>\n\n <ticket-qr-modal />\n}\n", styles: [".order-items{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-items__header{align-items:center;display:flex;flex-flow:row wrap;gap:1rem;padding:1rem;width:100%}.order-items__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-items__table-container{overflow-x:auto}.order-items__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-items__table-head-row{background-color:#f9fafb;text-align:left}.order-items__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-items__table-head-cell.text-right{text-align:right}.order-items__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-items__table-body-row{transition:all .4s ease}.order-items__table-body-row:hover{background-color:#f9fafb}.order-items__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-items__table-body-cell.text-right{text-align:right}.order-items__totals{background-color:#f9fafb;border-top:1px solid #f3f4f6;padding:1rem 1.5rem;width:100%}.order-items__totals-container{display:flex;flex-flow:column;gap:.5rem;margin-left:auto;max-width:20rem;width:100%}.order-items__totals-item{display:flex;font-size:.875rem;justify-content:space-between;width:100%}.order-items__totals-item.actions{text-align:left}.order-items__totals-item.total-item{border-top:1px solid #e5e7eb;padding-top:.5rem}.order-items__totals-item-title{color:#6b7280}.order-items__totals-item-total{color:#111827;font-size:1.125rem;font-weight:700;line-height:100%}.order-items__totals-item-discount-wrapper{align-items:flex-end;display:flex;flex-flow:column nowrap;width:100%}.order-items__totals-item-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: TicketQrModalComponent, selector: "ticket-qr-modal" }, { kind: "component", type: OrderItemTypeBadgeComponent, selector: "order-item-type-badge", inputs: ["item", "size"] }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }], encapsulation: i0.ViewEncapsulation.None });
|
|
10202
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderItemsComponent, isStandalone: true, selector: "order-items", inputs: { order: "order", isCustomer: "isCustomer" }, ngImport: i0, template: "@if (!!order) {\n <div class=\"order-items\">\n <div class=\"order-items__header\">\n <p class=\"order-items__header-title\">\n Informaci\u00F3n de los art\u00EDculos comprados ({{ order.order_items.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-items__table-container\">\n <table class=\"order-items__table\">\n <thead class=\"order-items__table-head\">\n <tr class=\"order-items__table-head-row\">\n <th class=\"order-items__table-head-cell\">Tipo</th>\n <th class=\"order-items__table-head-cell\">Descripci\u00F3n</th>\n\n <th class=\"order-items__table-head-cell text-right\">Cant.</th>\n <th class=\"order-items__table-head-cell text-right\">Precio</th>\n <th class=\"order-items__table-head-cell text-right\">Total</th>\n @if (showActionColumn) {\n <th class=\"order-items__table-head-cell\">Acciones</th>\n }\n </tr>\n </thead>\n <tbody class=\"order-items__table-body\">\n @for (item of order.order_items; track $index) {\n <tr class=\"order-items__table-body-row\">\n <td class=\"order-items__table-body-cell\">\n <order-item-type-badge [item]=\"item\" size=\"xs\" />\n </td>\n\n <td class=\"order-items__table-body-cell\">\n {{ item.description }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n {{ item.quantity }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n ${{ item.normal_price | number: '1.0-2' }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n <strong>\n ${{ itemTotal(item.quantity, item.normal_price) | number: '1.0-2' }}\n </strong>\n </td>\n\n @if (showActionColumn) {\n <td class=\"order-items__table-body-cell actions\">\n @if (item.ticket && ticketCanOpenQr(order, item.ticket)) {\n <app-button\n text=\"Ver ticket\"\n size=\"xs\"\n icon=\"ri-eye-line\"\n (clicked)=\"openTicketQr(item.ticket_uuid!, item.description)\"\n />\n }\n\n @if (item.ticket && item.ticket.checked_in) {\n <app-badge text=\"Usado\" color=\"error\" size=\"xs\" />\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"order-items__totals\">\n <dl class=\"order-items__totals-container\">\n @if (giftBonds.length > 0 && totals.giftBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos de regalo ({{ giftBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.giftBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.giftBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (corporateBonds.length > 0 && totals.corporateBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Bonos corporativos ({{ corporateBonds.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.corporateBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.corporateBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (vipRecharges.length > 0 && totals.vipRecharges > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Recargas de tarjeta VIP ({{ vipRecharges.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.vipRecharges > 0) {\n <span class=\"text-gray-900\"> ${{ totals.vipRecharges | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (tickets.length > 0 && totals.tickets > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Entradas ({{ tickets.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.tickets > 0) {\n <span class=\"text-gray-900\"> ${{ totals.tickets | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (products.length > 0 && totals.products > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Productos</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.products > 0) {\n <span class=\"text-gray-900\"> ${{ totals.products | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Tarifa de servicio</dt>\n <dd class=\"order-items__totals-item-value\">\n <span class=\"text-gray-900\"> ${{ order.service_fee | number: '1.0-2' }} </span>\n </dd>\n </div>\n }\n\n @if (hasDiscount()) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Descuento</dt>\n <dd class=\"order-items__totals-item-title\">\n $-{{ order.discount_amount | number: '1.0-2' }}\n </dd>\n </div>\n }\n\n <div class=\"order-items__totals-item total-item\">\n <dt class=\"order-items__totals-item-total\">Total</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (!hasDiscount()) {\n <span class=\"order-items__totals-item-total\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n }\n @if (hasDiscount()) {\n <span class=\"order-items__totals-item-discount-wrapper\">\n <span class=\"order-items__totals-item-discount\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n <span class=\"order-items__totals-item-total\">\n ${{ order.total_discounted | number: '1.0-2' }}\n </span>\n </span>\n }\n </dd>\n </div>\n </dl>\n </div>\n </div>\n\n <ticket-qr-modal [isCustomer]=\"isCustomer\" />\n}\n", styles: [".order-items{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-items__header{align-items:center;display:flex;flex-flow:row wrap;gap:1rem;padding:1rem;width:100%}.order-items__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-items__table-container{overflow-x:auto}.order-items__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-items__table-head-row{background-color:#f9fafb;text-align:left}.order-items__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-items__table-head-cell.text-right{text-align:right}.order-items__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-items__table-body-row{transition:all .4s ease}.order-items__table-body-row:hover{background-color:#f9fafb}.order-items__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-items__table-body-cell.text-right{text-align:right}.order-items__totals{background-color:#f9fafb;border-top:1px solid #f3f4f6;padding:1rem 1.5rem;width:100%}.order-items__totals-container{display:flex;flex-flow:column;gap:.5rem;margin-left:auto;max-width:20rem;width:100%}.order-items__totals-item{display:flex;font-size:.875rem;justify-content:space-between;width:100%}.order-items__totals-item.actions{text-align:left}.order-items__totals-item.total-item{border-top:1px solid #e5e7eb;padding-top:.5rem}.order-items__totals-item-title{color:#6b7280}.order-items__totals-item-total{color:#111827;font-size:1.125rem;font-weight:700;line-height:100%}.order-items__totals-item-discount-wrapper{align-items:flex-end;display:flex;flex-flow:column nowrap;width:100%}.order-items__totals-item-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: TicketQrModalComponent, selector: "ticket-qr-modal", inputs: ["isCustomer"] }, { kind: "component", type: OrderItemTypeBadgeComponent, selector: "order-item-type-badge", inputs: ["item", "size"] }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }], encapsulation: i0.ViewEncapsulation.None });
|
|
10179
10203
|
}
|
|
10180
10204
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderItemsComponent, decorators: [{
|
|
10181
10205
|
type: Component,
|
|
@@ -10185,10 +10209,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
10185
10209
|
TicketQrModalComponent,
|
|
10186
10210
|
OrderItemTypeBadgeComponent,
|
|
10187
10211
|
AppBadgeComponent,
|
|
10188
|
-
], encapsulation: ViewEncapsulation.None, template: "@if (!!order) {\n <div class=\"order-items\">\n <div class=\"order-items__header\">\n <p class=\"order-items__header-title\">\n Informaci\u00F3n de los art\u00EDculos comprados ({{ order.order_items.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-items__table-container\">\n <table class=\"order-items__table\">\n <thead class=\"order-items__table-head\">\n <tr class=\"order-items__table-head-row\">\n <th class=\"order-items__table-head-cell\">Tipo</th>\n <th class=\"order-items__table-head-cell\">Descripci\u00F3n</th>\n\n <th class=\"order-items__table-head-cell text-right\">Cant.</th>\n <th class=\"order-items__table-head-cell text-right\">Precio</th>\n <th class=\"order-items__table-head-cell text-right\">Total</th>\n @if (showActionColumn) {\n <th class=\"order-items__table-head-cell\">Acciones</th>\n }\n </tr>\n </thead>\n <tbody class=\"order-items__table-body\">\n @for (item of order.order_items; track $index) {\n <tr class=\"order-items__table-body-row\">\n <td class=\"order-items__table-body-cell\">\n <order-item-type-badge [item]=\"item\" size=\"xs\" />\n </td>\n\n <td class=\"order-items__table-body-cell\">\n {{ item.description }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n {{ item.quantity }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n ${{ item.normal_price | number: '1.0-2' }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n <strong>\n ${{ itemTotal(item.quantity, item.normal_price) | number: '1.0-2' }}\n </strong>\n </td>\n\n @if (showActionColumn) {\n <td class=\"order-items__table-body-cell actions\">\n @if (item.ticket && ticketCanOpenQr(order, item.ticket)) {\n <app-button\n text=\"Ver ticket\"\n size=\"xs\"\n icon=\"ri-eye-line\"\n (clicked)=\"openTicketQr(item.ticket_uuid!, item.description)\"\n />\n }\n\n @if (item.ticket && item.ticket.checked_in) {\n <app-badge text=\"Usado\" color=\"error\" size=\"xs\" />\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"order-items__totals\">\n <dl class=\"order-items__totals-container\">\n @if (giftBonds.length > 0 && totals.giftBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos de regalo ({{ giftBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.giftBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.giftBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (corporateBonds.length > 0 && totals.corporateBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Bonos corporativos ({{ corporateBonds.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.corporateBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.corporateBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (vipRecharges.length > 0 && totals.vipRecharges > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Recargas de tarjeta VIP ({{ vipRecharges.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.vipRecharges > 0) {\n <span class=\"text-gray-900\"> ${{ totals.vipRecharges | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (tickets.length > 0 && totals.tickets > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Entradas ({{ tickets.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.tickets > 0) {\n <span class=\"text-gray-900\"> ${{ totals.tickets | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (products.length > 0 && totals.products > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Productos</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.products > 0) {\n <span class=\"text-gray-900\"> ${{ totals.products | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Tarifa de servicio</dt>\n <dd class=\"order-items__totals-item-value\">\n <span class=\"text-gray-900\"> ${{ order.service_fee | number: '1.0-2' }} </span>\n </dd>\n </div>\n }\n\n @if (hasDiscount()) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Descuento</dt>\n <dd class=\"order-items__totals-item-title\">\n $-{{ order.discount_amount | number: '1.0-2' }}\n </dd>\n </div>\n }\n\n <div class=\"order-items__totals-item total-item\">\n <dt class=\"order-items__totals-item-total\">Total</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (!hasDiscount()) {\n <span class=\"order-items__totals-item-total\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n }\n @if (hasDiscount()) {\n <span class=\"order-items__totals-item-discount-wrapper\">\n <span class=\"order-items__totals-item-discount\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n <span class=\"order-items__totals-item-total\">\n ${{ order.total_discounted | number: '1.0-2' }}\n </span>\n </span>\n }\n </dd>\n </div>\n </dl>\n </div>\n </div>\n\n <ticket-qr-modal />\n}\n", styles: [".order-items{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-items__header{align-items:center;display:flex;flex-flow:row wrap;gap:1rem;padding:1rem;width:100%}.order-items__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-items__table-container{overflow-x:auto}.order-items__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-items__table-head-row{background-color:#f9fafb;text-align:left}.order-items__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-items__table-head-cell.text-right{text-align:right}.order-items__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-items__table-body-row{transition:all .4s ease}.order-items__table-body-row:hover{background-color:#f9fafb}.order-items__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-items__table-body-cell.text-right{text-align:right}.order-items__totals{background-color:#f9fafb;border-top:1px solid #f3f4f6;padding:1rem 1.5rem;width:100%}.order-items__totals-container{display:flex;flex-flow:column;gap:.5rem;margin-left:auto;max-width:20rem;width:100%}.order-items__totals-item{display:flex;font-size:.875rem;justify-content:space-between;width:100%}.order-items__totals-item.actions{text-align:left}.order-items__totals-item.total-item{border-top:1px solid #e5e7eb;padding-top:.5rem}.order-items__totals-item-title{color:#6b7280}.order-items__totals-item-total{color:#111827;font-size:1.125rem;font-weight:700;line-height:100%}.order-items__totals-item-discount-wrapper{align-items:flex-end;display:flex;flex-flow:column nowrap;width:100%}.order-items__totals-item-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}\n"] }]
|
|
10212
|
+
], encapsulation: ViewEncapsulation.None, template: "@if (!!order) {\n <div class=\"order-items\">\n <div class=\"order-items__header\">\n <p class=\"order-items__header-title\">\n Informaci\u00F3n de los art\u00EDculos comprados ({{ order.order_items.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-items__table-container\">\n <table class=\"order-items__table\">\n <thead class=\"order-items__table-head\">\n <tr class=\"order-items__table-head-row\">\n <th class=\"order-items__table-head-cell\">Tipo</th>\n <th class=\"order-items__table-head-cell\">Descripci\u00F3n</th>\n\n <th class=\"order-items__table-head-cell text-right\">Cant.</th>\n <th class=\"order-items__table-head-cell text-right\">Precio</th>\n <th class=\"order-items__table-head-cell text-right\">Total</th>\n @if (showActionColumn) {\n <th class=\"order-items__table-head-cell\">Acciones</th>\n }\n </tr>\n </thead>\n <tbody class=\"order-items__table-body\">\n @for (item of order.order_items; track $index) {\n <tr class=\"order-items__table-body-row\">\n <td class=\"order-items__table-body-cell\">\n <order-item-type-badge [item]=\"item\" size=\"xs\" />\n </td>\n\n <td class=\"order-items__table-body-cell\">\n {{ item.description }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n {{ item.quantity }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n ${{ item.normal_price | number: '1.0-2' }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n <strong>\n ${{ itemTotal(item.quantity, item.normal_price) | number: '1.0-2' }}\n </strong>\n </td>\n\n @if (showActionColumn) {\n <td class=\"order-items__table-body-cell actions\">\n @if (item.ticket && ticketCanOpenQr(order, item.ticket)) {\n <app-button\n text=\"Ver ticket\"\n size=\"xs\"\n icon=\"ri-eye-line\"\n (clicked)=\"openTicketQr(item.ticket_uuid!, item.description)\"\n />\n }\n\n @if (item.ticket && item.ticket.checked_in) {\n <app-badge text=\"Usado\" color=\"error\" size=\"xs\" />\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"order-items__totals\">\n <dl class=\"order-items__totals-container\">\n @if (giftBonds.length > 0 && totals.giftBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos de regalo ({{ giftBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.giftBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.giftBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (corporateBonds.length > 0 && totals.corporateBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Bonos corporativos ({{ corporateBonds.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.corporateBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.corporateBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (vipRecharges.length > 0 && totals.vipRecharges > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Recargas de tarjeta VIP ({{ vipRecharges.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.vipRecharges > 0) {\n <span class=\"text-gray-900\"> ${{ totals.vipRecharges | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (tickets.length > 0 && totals.tickets > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Entradas ({{ tickets.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.tickets > 0) {\n <span class=\"text-gray-900\"> ${{ totals.tickets | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (products.length > 0 && totals.products > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Productos</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.products > 0) {\n <span class=\"text-gray-900\"> ${{ totals.products | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Tarifa de servicio</dt>\n <dd class=\"order-items__totals-item-value\">\n <span class=\"text-gray-900\"> ${{ order.service_fee | number: '1.0-2' }} </span>\n </dd>\n </div>\n }\n\n @if (hasDiscount()) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Descuento</dt>\n <dd class=\"order-items__totals-item-title\">\n $-{{ order.discount_amount | number: '1.0-2' }}\n </dd>\n </div>\n }\n\n <div class=\"order-items__totals-item total-item\">\n <dt class=\"order-items__totals-item-total\">Total</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (!hasDiscount()) {\n <span class=\"order-items__totals-item-total\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n }\n @if (hasDiscount()) {\n <span class=\"order-items__totals-item-discount-wrapper\">\n <span class=\"order-items__totals-item-discount\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n <span class=\"order-items__totals-item-total\">\n ${{ order.total_discounted | number: '1.0-2' }}\n </span>\n </span>\n }\n </dd>\n </div>\n </dl>\n </div>\n </div>\n\n <ticket-qr-modal [isCustomer]=\"isCustomer\" />\n}\n", styles: [".order-items{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-items__header{align-items:center;display:flex;flex-flow:row wrap;gap:1rem;padding:1rem;width:100%}.order-items__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-items__table-container{overflow-x:auto}.order-items__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-items__table-head-row{background-color:#f9fafb;text-align:left}.order-items__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-items__table-head-cell.text-right{text-align:right}.order-items__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-items__table-body-row{transition:all .4s ease}.order-items__table-body-row:hover{background-color:#f9fafb}.order-items__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-items__table-body-cell.text-right{text-align:right}.order-items__totals{background-color:#f9fafb;border-top:1px solid #f3f4f6;padding:1rem 1.5rem;width:100%}.order-items__totals-container{display:flex;flex-flow:column;gap:.5rem;margin-left:auto;max-width:20rem;width:100%}.order-items__totals-item{display:flex;font-size:.875rem;justify-content:space-between;width:100%}.order-items__totals-item.actions{text-align:left}.order-items__totals-item.total-item{border-top:1px solid #e5e7eb;padding-top:.5rem}.order-items__totals-item-title{color:#6b7280}.order-items__totals-item-total{color:#111827;font-size:1.125rem;font-weight:700;line-height:100%}.order-items__totals-item-discount-wrapper{align-items:flex-end;display:flex;flex-flow:column nowrap;width:100%}.order-items__totals-item-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}\n"] }]
|
|
10189
10213
|
}], ctorParameters: () => [{ type: TicketQrModalService }], propDecorators: { order: [{
|
|
10190
10214
|
type: Input,
|
|
10191
10215
|
args: [{ required: true }]
|
|
10216
|
+
}], isCustomer: [{
|
|
10217
|
+
type: Input
|
|
10192
10218
|
}] } });
|
|
10193
10219
|
|
|
10194
10220
|
class OrderDiscountAppliedComponent {
|