@rolatech/angular-billing 20.3.2-beta.4 → 20.3.3-beta.1
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rolatech-angular-billing.mjs","sources":["../../../../packages/angular-billing/src/lib/pages/billing/billing.routes.ts","../../../../packages/angular-billing/src/lib/interfaces/invoice.ts","../../../../packages/angular-billing/src/lib/components/invoice-item/invoice-item.ts","../../../../packages/angular-billing/src/lib/components/invoice-item/invoice-item.html","../../../../packages/angular-billing/src/lib/components/invoice-manage-item/invoice-manage-item.ts","../../../../packages/angular-billing/src/lib/components/invoice-manage-item/invoice-manage-item.html","../../../../packages/angular-billing/src/lib/components/invoice-item-skeleton/invoice-item-skeleton.ts","../../../../packages/angular-billing/src/lib/components/invoice-item-skeleton/invoice-item-skeleton.html","../../../../packages/angular-billing/src/lib/pages/invoice/invoice-index/invoice-index.component.ts","../../../../packages/angular-billing/src/lib/pages/invoice/invoice-index/invoice-index.component.html","../../../../packages/angular-billing/src/lib/components/invoice-user/invoice-user.ts","../../../../packages/angular-billing/src/lib/components/invoice-user/invoice-user.html","../../../../packages/angular-billing/src/lib/components/invoice-lines/invoice-lines.ts","../../../../packages/angular-billing/src/lib/components/invoice-lines/invoice-lines.html","../../../../packages/angular-billing/src/lib/components/invoice-summary/invoice-summary.ts","../../../../packages/angular-billing/src/lib/components/invoice-summary/invoice-summary.html","../../../../packages/angular-billing/src/lib/components/invoice-user-skeleton/invoice-user-skeleton.ts","../../../../packages/angular-billing/src/lib/components/invoice-user-skeleton/invoice-user-skeleton.html","../../../../packages/angular-billing/src/lib/components/invoice-summary-skeleton/invoice-summary-skeleton.ts","../../../../packages/angular-billing/src/lib/components/invoice-summary-skeleton/invoice-summary-skeleton.html","../../../../packages/angular-billing/src/lib/components/invoice-lines-skeleton/invoice-lines-skeleton.ts","../../../../packages/angular-billing/src/lib/components/invoice-lines-skeleton/invoice-lines-skeleton.html","../../../../packages/angular-billing/src/lib/pages/invoice/invoice-detail/invoice-detail.component.ts","../../../../packages/angular-billing/src/lib/pages/invoice/invoice-detail/invoice-detail.component.html","../../../../packages/angular-billing/src/lib/pages/invoice/invoice.routes.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-index/invoice-manage-index.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-index/invoice-manage-index.html","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-create/invoice-manage-create.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-create/invoice-manage-create.html","../../../../packages/angular-billing/src/lib/components/invoice-edit/invoice-edit.ts","../../../../packages/angular-billing/src/lib/components/invoice-edit/invoice-edit.html","../../../../packages/angular-billing/src/lib/store/invoice.store.ts","../../../../packages/angular-billing/src/lib/components/invoice-line-property-selector/invoice-line-property-selector.ts","../../../../packages/angular-billing/src/lib/components/invoice-line-property-selector/invoice-line-property-selector.html","../../../../packages/angular-billing/src/lib/components/invoice-manage-line/invoice-manage-line.ts","../../../../packages/angular-billing/src/lib/components/invoice-manage-line/invoice-manage-line.html","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-detail/invoice-manage-detail.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-detail/invoice-manage-detail.html","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-download/invoice-manage-download.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-download/invoice-manage-download.html","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage.routes.ts","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice-index/agent-invoice-index.ts","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice-index/agent-invoice-index.html","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice-detail/agent-invoice-detail.ts","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice-detail/agent-invoice-detail.html","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice.routes.ts","../../../../packages/angular-billing/src/lib/store/billing-profile.facade.ts","../../../../packages/angular-billing/src/lib/utils/billing-profile-form.util.ts","../../../../packages/angular-billing/src/lib/pages/billing-profile/billing-profile-setting-page/billing-profile-setting-page.ts","../../../../packages/angular-billing/src/lib/pages/billing-profile/billing-profile-setting-page/billing-profile-setting-page.html","../../../../packages/angular-billing/src/lib/pages/billing-profile/billing-profile.routes.ts","../../../../packages/angular-billing/src/rolatech-angular-billing.ts"],"sourcesContent":["import { Routes } from '@angular/router';\n\nexport const billingRoutes: Routes = [];\n","export interface Invoice {\n id: string;\n invoiceNumber: string;\n firstName: string;\n lastName: string;\n fullName: string;\n email: string;\n phone: string;\n taxAmount: number;\n discountAmount: number;\n currency: string;\n dueAt: string;\n paidAt: string;\n holdingDepositApplied: number;\n subtotal: number;\n gross: number;\n vatTotal: number;\n total: number;\n lines: InvoiceLine[];\n status: InvoiceStatus;\n type: InvoiceType;\n createdAt: string;\n updateAt: string;\n pdfUrl: string;\n note: string;\n vatMode: InvoiceVatMode;\n}\nexport enum InvoiceVatMode {\n EXCLUSIVE = 'EXCLUSIVE',\n INCLUSIVE = 'INCLUSIVE',\n}\nexport enum InvoiceLineType {\n PROPERTY_RENT = 'PROPERTY_RENT',\n PROPERTY_SALE = 'PROPERTY_SALE',\n HOLDING_DEPOSIT = 'HOLDING_DEPOSIT',\n SECURITY_DEPOSIT = 'SECURITY_DEPOSIT',\n DISCOUNT = 'DISCOUNT',\n FEE = 'FEE',\n ADJUSTMENT = 'ADJUSTMENT',\n CUSTOM = 'CUSTOM',\n}\nexport interface InvoiceLine {\n id?: string;\n code: string;\n title: string;\n description: string;\n imageUrl: string;\n amount: number;\n unitPrice: number;\n vatRate: number;\n vatAmount: number;\n lineTotal: number;\n quantity: number;\n currency: string;\n refId: string;\n type: InvoiceLineType;\n position: number;\n}\nexport enum InvoiceType {\n FIRST_PAYMENT = 'First Payment',\n RECURRING_RENT = 'Recurring',\n ADJUSTMENT = 'Adjustment',\n}\nexport enum InvoiceStatus {\n DRAFT = 'Draft',\n SENT = 'Sent',\n CREATED = 'Created',\n ISSUED = 'Issued',\n PARTIALLY_PAID = 'Partially paid',\n PAID = 'Paid',\n VOID = 'void',\n}\n/**\n * Minimal DTOs matching a typical backend (adjust to your API):\n */\nexport interface InvoiceLineCreateDto {\n description: string;\n quantity: number; // whole units\n unitPrice: number; // store in pence per your preference\n taxRate: number; // e.g. 0, 5, 20 (percent)\n}\n\nexport interface InvoiceCreateDto {\n customerName: string;\n customerEmail?: string;\n customerAddress?: string;\n currency: 'GBP' | 'USD' | 'EUR';\n issueDate: string; // YYYY-MM-DD\n dueDate?: string; // YYYY-MM-DD\n notes?: string;\n lines: InvoiceLineCreateDto[];\n}\n","import { Component, input, output } from '@angular/core';\nimport { Invoice, InvoiceStatus } from '../../interfaces';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { CommonModule, DatePipe } from '@angular/common';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-item',\n imports: [CommonModule, MatButtonModule, MatIcon, DatePipe, PricePipe],\n templateUrl: './invoice-item.html',\n styleUrl: './invoice-item.scss',\n})\nexport class InvoiceItem {\n invoice = input.required<Invoice>();\n status: any = InvoiceStatus;\n download = output();\n\n customerName() {\n return this.invoice().fullName || `${this.invoice().firstName} ${this.invoice().lastName}`.trim();\n }\n\n onDownload() {\n this.download.emit();\n }\n\n statusBadgeClass(status: InvoiceStatus): string {\n switch (status.toString()) {\n case 'CREATED':\n return 'invoice-item__status invoice-item__status--draft';\n case 'ISSUED':\n case 'SENT':\n case 'PARTIALLY_PAID':\n return 'invoice-item__status invoice-item__status--issued';\n case 'PAID':\n return 'invoice-item__status invoice-item__status--paid';\n case 'VOID':\n return 'invoice-item__status invoice-item__status--void';\n default:\n return 'invoice-item__status invoice-item__status--neutral';\n }\n }\n}\n","<article class=\"invoice-item\">\n <div class=\"invoice-item__top\">\n <div class=\"invoice-item__identity\">\n <span class=\"invoice-item__eyebrow\">Invoice</span>\n <h3 class=\"invoice-item__number\">{{ invoice().invoiceNumber || invoice().id }}</h3>\n <p class=\"invoice-item__customer\">{{ customerName() }}</p>\n </div>\n\n <div class=\"invoice-item__summary\">\n <span [ngClass]=\"statusBadgeClass(invoice().status)\">{{ status[invoice().status] }}</span>\n <strong class=\"invoice-item__total\">{{ invoice().total | price }}</strong>\n </div>\n </div>\n\n <div class=\"invoice-item__meta\">\n <div class=\"invoice-item__meta-card\">\n <span class=\"invoice-item__meta-label\">Created</span>\n <strong>{{ invoice().createdAt | date: 'dd/MM/yyyy':'Europe/London' }}</strong>\n </div>\n\n <div class=\"invoice-item__meta-card\">\n <span class=\"invoice-item__meta-label\">Due</span>\n <strong>\n @if (invoice().dueAt) {\n {{ invoice().dueAt | date: 'dd/MM/yyyy':'Europe/London' }}\n } @else {\n On receipt\n }\n </strong>\n </div>\n\n <div class=\"invoice-item__meta-card\">\n <span class=\"invoice-item__meta-label\">Type</span>\n <strong>{{ invoice().type }}</strong>\n </div>\n\n <button mat-stroked-button class=\"invoice-item__download\" (click)=\"onDownload(); $event.stopPropagation()\">\n <mat-icon>download</mat-icon>\n <span>Download</span>\n </button>\n </div>\n</article>\n","import { Component, input } from '@angular/core';\nimport { Invoice } from '../../interfaces/invoice';\n\n@Component({\n selector: 'rolatech-invoice-manage-item',\n imports: [],\n templateUrl: './invoice-manage-item.html',\n styleUrl: './invoice-manage-item.scss',\n})\nexport class InvoiceManageItem {\n invoice = input.required<Invoice>();\n}\n","<p>invoice-manage-item works!</p>\n<div>{{invoice().id}}</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-item-skeleton',\n imports: [Skeleton],\n templateUrl: './invoice-item-skeleton.html',\n styleUrl: './invoice-item-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceItemSkeleton {}\n","<div class=\"grid grid-cols-6 place-content-center h-16 p-3 gap-3\">\n <rolatech-skeleton class=\"col-span-1 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"col-start-3 col-span-2 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"col-start-6 col-span-1 h-4\"></rolatech-skeleton>\n</div>\n","import { Component, computed, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { KeyValuePipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { RouterModule } from '@angular/router';\nimport { BaseComponent, PageCollectionShellComponent } from '@rolatech/angular-components';\nimport { InvoiceItem } from '../../../components';\nimport { InvoiceService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceStatus, InvoiceType } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { InvoiceItemSkeleton } from '../../../components/invoice-item-skeleton/invoice-item-skeleton';\n\n@Component({\n selector: 'rolatech-invoice-index',\n imports: [\n RouterModule,\n InvoiceItem,\n MatButtonModule,\n MatIconModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n KeyValuePipe,\n MatPaginatorModule,\n InvoiceItemSkeleton,\n PageCollectionShellComponent,\n ],\n templateUrl: './invoice-index.component.html',\n styleUrl: './invoice-index.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceIndexComponent extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n filterOptions: any = {\n type: '',\n status: '',\n };\n loading = false;\n meta: any;\n invoiceType = InvoiceType;\n invoiceStatus = InvoiceStatus;\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Created',\n icon: 'category',\n status: 'created',\n },\n {\n name: 'Issued',\n icon: 'category',\n status: 'issued',\n },\n {\n name: 'Paid',\n icon: 'category',\n status: 'paid',\n },\n ];\n invoices = signal<Invoice[]>([]);\n select = 0;\n filter = false;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n pageIndex = signal(0);\n\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Billing workspace'),\n title: this.readRouteData('invoiceCollectionTitle', 'Invoices'),\n description: this.readRouteData(\n 'invoiceCollectionDescription',\n 'Track invoice status, total value, and due dates in one calm workspace.',\n ),\n };\n\n readonly stats = computed(() => {\n const invoices = this.invoices();\n return [\n { label: 'Invoices', value: this.length || invoices.length, hint: 'Every invoice in the current scope' },\n { label: 'Created', value: invoices.filter((item) => item.status === InvoiceStatus.CREATED).length, hint: 'Drafted and waiting to move forward' },\n { label: 'Issued', value: invoices.filter((item) => item.status === InvoiceStatus.ISSUED || item.status === InvoiceStatus.SENT).length, hint: 'Sent and awaiting payment' },\n { label: 'Paid', value: invoices.filter((item) => item.status === InvoiceStatus.PAID).length, hint: 'Successfully settled' },\n ];\n });\n\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n const type = p.get('type') || undefined;\n this.filterOptions = {\n type: type || '',\n status: status || '',\n };\n\n const filters: string[] = [];\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filters.push(`status:${status.toUpperCase()}`);\n } else {\n this.select = 0;\n }\n if (type) {\n filters.push(`type:${type}`);\n }\n return {\n page,\n filter: filters.join(','),\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.invoiceService.me(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.invoices.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.invoices.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n find() {\n this.router.navigate([], {\n queryParams: {\n type: this.filterOptions.type || null,\n status: this.filterOptions.status || null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n resetFilter() {\n this.filterOptions = {\n type: '',\n status: '',\n };\n this.router.navigate([], {\n queryParams: {\n type: null,\n status: null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n statusCompareFn(t1: any, t2: any) {\n return t1 === t2;\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<rolatech-page-collection-shell [eyebrow]=\"pageMeta.eyebrow\" [title]=\"pageMeta.title\" [subtitle]=\"pageMeta.description\">\n <div page-shell-header-meta class=\"invoice-index-page__stats\">\n @for (stat of stats(); track stat.label) {\n <article class=\"invoice-index-page__stat\">\n <span class=\"invoice-index-page__stat-value\">{{ stat.value }}</span>\n <span class=\"invoice-index-page__stat-label\">{{ stat.label }}</span>\n <span class=\"invoice-index-page__stat-hint\">{{ stat.hint }}</span>\n </article>\n }\n </div>\n\n <section class=\"invoice-index-page__filters\">\n <nav class=\"invoice-index-page__status-nav\" aria-label=\"Invoice status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"invoice-index-page__status-link\"\n [class.invoice-index-page__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <div class=\"invoice-index-page__filter-grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Type</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"filterOptions.type\">\n @for (type of invoiceType | keyvalue; track type.key) {\n <mat-option [value]=\"type.key\">{{ type.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Status</mat-label>\n <mat-select [compareWith]=\"statusCompareFn\" [(ngModel)]=\"filterOptions.status\">\n @for (status of invoiceStatus | keyvalue; track status.key) {\n <mat-option [value]=\"status.key\">{{ status.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <div class=\"invoice-index-page__filter-actions\">\n <button mat-flat-button (click)=\"find()\">Apply filters</button>\n <button mat-stroked-button (click)=\"resetFilter()\">Reset</button>\n </div>\n </div>\n </section>\n\n <section class=\"invoice-index-page__list\">\n @if (loading) {\n @for (dummy of [0, 1, 2, 3]; track dummy) {\n <rolatech-invoice-item-skeleton></rolatech-invoice-item-skeleton>\n }\n } @else if (invoices().length > 0) {\n @for (item of invoices(); track item.id) {\n <rolatech-invoice-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [invoice]=\"item\"></rolatech-invoice-item>\n }\n } @else {\n <div class=\"invoice-index-page__empty\">\n <h3>No invoices yet</h3>\n <p>The invoices for this workspace will appear here once billing is created.</p>\n </div>\n }\n\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </section>\n</rolatech-page-collection-shell>\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'rolatech-invoice-user',\n imports: [],\n templateUrl: './invoice-user.html',\n styleUrl: './invoice-user.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n id: 'rolatech-invoice-user',\n class: 'rolatech-invoice-user',\n },\n})\nexport class InvoiceUser {\n firstName = input.required<string>();\n lastName = input.required<string>();\n email = input.required<string>();\n phone = input.required<string>();\n}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <h2 class=\"text-sm font-semibold\">User</h2>\n <div class=\"text-sm\">\n <div class=\"font-medium\">{{ firstName() }}, {{ lastName() }}</div>\n <div class=\"font-medium\">{{ phone() }}</div>\n <div>{{ email() }}</div>\n </div>\n</div>\n","import { Component, ViewEncapsulation, input } from '@angular/core';\nimport { InvoiceLine } from '../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-lines',\n imports: [PricePipe],\n templateUrl: './invoice-lines.html',\n styleUrl: './invoice-lines.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceLines {\n lines = input<InvoiceLine[]>([]);\n add() {}\n}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <div class=\"flex justify-between\">\n <h2 class=\"text-sm font-semibold\">Invoice lines</h2>\n </div>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full text-sm border border-(--rt-border-color) rounded-lg\">\n <thead class=\"bg-(--rt-raised-background)\">\n <tr>\n <th class=\"px-3 py-2 text-left font-medium border-b border-(--rt-border-color)\">Title</th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-28\">Unit (£)</th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-20\">VAT %</th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-28\">VAT (£)</th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-32\">Total (£)</th>\n </tr>\n </thead>\n\n <tbody class=\"[&>tr:nth-child(even)]:bg-(--rt-raised-background)\">\n @if (lines().length > 0) { @for (line of lines(); track line.id) {\n <tr class=\"hover:bg-(--rt-raised-background) cursor-pointer\">\n <!-- Title -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color)\">\n <div class=\"font-medium\">{{ line.title }}</div>\n </td>\n\n <!-- Unit price -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n {{ line.unitPrice | price }}\n </td>\n\n <!-- VAT rate -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n {{ line.vatRate }}%\n </td>\n\n <!-- VAT amount -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n {{ line.vatAmount | price }}\n </td>\n\n <!-- Total -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right font-semibold text-(--rt-text-secondary)\">\n {{ line.lineTotal | price }}\n </td>\n </tr>\n } } @else {\n <tr>\n <td [attr.colspan]=\"6\" class=\"px-3 py-4 text-center text-(--rt-text-secondary) text-sm\">No invoice lines</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-summary',\n imports: [PricePipe],\n templateUrl: './invoice-summary.html',\n styleUrl: './invoice-summary.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n id: 'rolatech-invoice-summary',\n class: 'rolatech-invoice-summary',\n },\n})\nexport class InvoiceSummary {\n tax = input.required<number>();\n credit = input<number>(0);\n subtotal = input.required<number>();\n total = input.required<number>();\n}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <h2 class=\"text-sm font-semibold text-(--rt-text-secondary)\">Totals</h2>\n\n <dl class=\"space-y-2 text-sm\">\n <div class=\"flex justify-between\">\n <dt class=\"text-(--rt-text-secondary)\">Subtotal</dt>\n <dd class=\"font-medium\">{{ subtotal() | price }}</dd>\n </div>\n\n <div class=\"flex justify-between\">\n <dt class=\"text-(--rt-text-secondary)\">VAT</dt>\n <dd class=\"font-medium\">{{ tax() | price}}</dd>\n </div>\n\n @if (credit() > 0) {\n <div class=\"flex justify-between\">\n <dt class=\"text-(--rt-text-secondary)\">Less holding deposit</dt>\n <dd class=\"font-medium text-red-600\">−{{ credit() | price }}</dd>\n </div>\n }\n\n <div class=\"border-t border-dashed border-(--rt-border-color) my-2\"></div>\n\n <div class=\"flex justify-between items-center\">\n <dt class=\"text-(--rt-text-secondary) font-semibold\">Total</dt>\n <dd class=\"text-lg font-semibold\">{{ total() | price }}</dd>\n </div>\n </dl>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-user-skeleton',\n imports: [Skeleton],\n templateUrl: './invoice-user-skeleton.html',\n styleUrl: './invoice-user-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceUserSkeleton {}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <rolatech-skeleton class=\"w-12 h-6\"></rolatech-skeleton>\n <div class=\"flex flex-col gap-2\">\n <rolatech-skeleton class=\"w-28 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-32 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-36 h-4\"></rolatech-skeleton>\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-summary-skeleton',\n imports: [Skeleton],\n templateUrl: './invoice-summary-skeleton.html',\n styleUrl: './invoice-summary-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceSummarySkeleton {}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <rolatech-skeleton class=\"w-12 h-6\"></rolatech-skeleton>\n\n <dl class=\"space-y-2 text-sm\">\n <div class=\"flex justify-between\">\n <rolatech-skeleton class=\"w-28 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-11 h-4\"></rolatech-skeleton>\n </div>\n <div class=\"flex justify-between\">\n <rolatech-skeleton class=\"w-28 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-11 h-4\"></rolatech-skeleton>\n </div>\n <div class=\"flex justify-between\">\n <rolatech-skeleton class=\"w-32 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-11 h-4\"></rolatech-skeleton>\n </div>\n\n <div class=\"border-t border-dashed border-(--rt-border-color) my-2\"></div>\n\n <div class=\"flex justify-between\">\n <rolatech-skeleton class=\"w-11 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-28 h-4\"></rolatech-skeleton>\n </div>\n </dl>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-lines-skeleton',\n imports: [Skeleton],\n templateUrl: './invoice-lines-skeleton.html',\n styleUrl: './invoice-lines-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceLinesSkeleton {}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <rolatech-skeleton class=\"w-20 h-6\"></rolatech-skeleton>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full text-sm border border-(--rt-border-color) rounded-lg\">\n <thead class=\"bg-(--rt-raised-background)\">\n <tr>\n <th class=\"px-3 py-2 text-left font-medium border-b border-(--rt-border-color)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-center font-medium border-b border-(--rt-border-color) w-20\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-28\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-20\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-28\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-32\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n </tr>\n </thead>\n\n <tbody class=\"[&>tr:nth-child(even)]:bg-(--rt-raised-background)\">\n @for (dummy of [0, 1, 2, 3]; track dummy) {\n <tr>\n <!-- Title -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color)\">\n <rolatech-skeleton class=\"h-6\"></rolatech-skeleton>\n </td>\n\n <!-- Qty -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-center text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n\n <!-- Unit price -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n\n <!-- VAT rate -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n <!-- VAT amount -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n\n <!-- Total -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right font-semibold text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, signal } from '@angular/core';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { RouterModule } from '@angular/router';\nimport { InvoiceService, PaymentService } from '@rolatech/angular-services';\nimport { switchMap } from 'rxjs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Invoice, InvoiceStatus } from '../../../interfaces';\nimport { InvoiceUser } from '../../../components/invoice-user/invoice-user';\nimport { InvoiceLines } from '../../../components/invoice-lines/invoice-lines';\nimport { InvoiceSummary } from '../../../components/invoice-summary/invoice-summary';\nimport { InvoiceUserSkeleton } from '../../../components/invoice-user-skeleton/invoice-user-skeleton';\nimport { InvoiceSummarySkeleton } from '../../../components/invoice-summary-skeleton/invoice-summary-skeleton';\nimport { InvoiceLinesSkeleton } from '../../../components/invoice-lines-skeleton/invoice-lines-skeleton';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-detail',\n imports: [\n CommonModule,\n RouterModule,\n MatButtonModule,\n MatIconModule,\n InvoiceUser,\n InvoiceLines,\n InvoiceSummary,\n InvoiceUserSkeleton,\n InvoiceSummarySkeleton,\n InvoiceLinesSkeleton,\n PricePipe,\n ],\n templateUrl: './invoice-detail.component.html',\n styleUrl: './invoice-detail.component.scss',\n})\nexport class InvoiceDetailComponent extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n paymentService = inject(PaymentService);\n invoice = signal<Invoice | null>(null);\n status = InvoiceStatus;\n paying = false;\n loading = signal<boolean>(true);\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n collectionTitle: this.readRouteData('invoiceCollectionTitle', 'Invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Billing workspace'),\n };\n\n ngOnInit(): void {\n this.route.params.subscribe((params) => {\n const id = params['id'];\n this.get(id);\n });\n this.route.queryParams.subscribe(async (params) => {\n const sessionId = params['session_id'];\n if (sessionId) {\n // this.invoiceService.checkOfferPaymentStatus(this.id, sessionId).subscribe({\n // next: (res) => {\n // if (res.status === 'paid') {\n // this.invoice.update((state) => {\n // if (!state) return state;\n // state.status = InvoiceStatus.PAID;\n // return state;\n // });\n // }\n // },\n // });\n }\n });\n }\n get(id: string) {\n this.loading.set(true);\n this.invoiceService.get(id).subscribe({\n next: (res: any) => {\n this.invoice.set(res.data);\n this.loading.set(false);\n },\n error: () => {\n this.loading.set(false);\n },\n });\n }\n pay() {\n this.paying = true;\n const data = {\n businessType: 'INVOICE',\n businessId: this.id,\n provider: 'STRIPE',\n method: 'STRIPE_CHECKOUT',\n };\n this.paymentService\n .createPaymentIntent(data)\n .pipe(\n switchMap((res: any) => {\n const intent = {\n intentId: res.data.id,\n provider: 'STRIPE',\n method: 'STRIPE_CHECKOUT',\n successUrl: window.location.href + '?session_id={CHECKOUT_SESSION_ID}',\n cancelUrl: window.location.href,\n };\n return this.paymentService.createPayment(intent);\n }),\n )\n .subscribe({\n next: (res) => {\n this.paying = false;\n const { checkoutUrl } = res.data;\n window.open(checkoutUrl, '_blank');\n },\n error: (error) => {\n this.paying = false;\n this.snackBarService.open(error.message);\n },\n });\n }\n\n statusToneClass(status: InvoiceStatus) {\n switch (status) {\n case InvoiceStatus.PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--paid';\n case InvoiceStatus.ISSUED:\n case InvoiceStatus.SENT:\n case InvoiceStatus.PARTIALLY_PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--issued';\n case InvoiceStatus.VOID:\n return 'invoice-detail-page__status invoice-detail-page__status--void';\n default:\n return 'invoice-detail-page__status invoice-detail-page__status--neutral';\n }\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<section class=\"invoice-detail-page\">\n @if (loading()) {\n <section class=\"invoice-detail-page__hero invoice-detail-page__hero--loading\">\n <div class=\"invoice-detail-page__hero-copy\">\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">Loading invoice...</h1>\n </div>\n </section>\n\n <section class=\"invoice-detail-page__content\">\n <div class=\"invoice-detail-page__main\">\n <rolatech-invoice-user-skeleton></rolatech-invoice-user-skeleton>\n <rolatech-invoice-lines-skeleton></rolatech-invoice-lines-skeleton>\n </div>\n <div class=\"invoice-detail-page__side\">\n <rolatech-invoice-summary-skeleton></rolatech-invoice-summary-skeleton>\n </div>\n </section>\n } @else if (invoice(); as invoice) {\n <section class=\"invoice-detail-page__hero\">\n <div class=\"invoice-detail-page__hero-copy\">\n <a class=\"invoice-detail-page__back\" [routerLink]=\"pageMeta.baseLink\">← {{ pageMeta.collectionTitle }}</a>\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">{{ invoice.invoiceNumber || invoice.id }}</h1>\n <p class=\"invoice-detail-page__description\">\n Invoice for {{ invoice.fullName || invoice.firstName + ' ' + invoice.lastName }} created\n {{ invoice.createdAt | date: 'mediumDate' }}.\n </p>\n </div>\n\n <div class=\"invoice-detail-page__hero-side\">\n <span [class]=\"statusToneClass(invoice.status)\">{{ status[invoice.status] }}</span>\n <div class=\"invoice-detail-page__total\">{{ invoice.total | price }}</div>\n <div class=\"invoice-detail-page__note\">\n @if (invoice.dueAt) {\n Due {{ invoice.dueAt | date: 'mediumDate' }}\n } @else {\n Payable on receipt\n }\n </div>\n\n @if (invoice.status.toString() === 'ISSUED' || invoice.status.toString() === 'SENT') {\n <button mat-flat-button [disabled]=\"paying\" class=\"invoice-detail-page__cta\" (click)=\"pay()\">\n {{ paying ? 'Processing payment...' : 'Pay invoice' }}\n </button>\n }\n </div>\n </section>\n\n <section class=\"invoice-detail-page__content\">\n <div class=\"invoice-detail-page__main\">\n <rolatech-invoice-user\n [firstName]=\"invoice.firstName\"\n [lastName]=\"invoice.lastName\"\n [email]=\"invoice.email\"\n [phone]=\"invoice.phone\"\n ></rolatech-invoice-user>\n\n @if (invoice.lines; as lines) {\n <rolatech-invoice-lines [lines]=\"lines\"></rolatech-invoice-lines>\n }\n </div>\n\n <div class=\"invoice-detail-page__side\">\n <rolatech-invoice-summary\n [tax]=\"invoice.vatTotal\"\n [credit]=\"invoice.holdingDepositApplied\"\n [subtotal]=\"invoice.subtotal\"\n [total]=\"invoice.total\"\n ></rolatech-invoice-summary>\n\n <article class=\"invoice-detail-page__panel\">\n <h2 class=\"invoice-detail-page__panel-title\">Invoice note</h2>\n <p class=\"invoice-detail-page__panel-copy\">{{ invoice.note || 'No note added for this invoice.' }}</p>\n\n @if (invoice.status.toString() === 'CREATED' || invoice.status.toString() === 'PAID') {\n <div class=\"invoice-detail-page__panel-row\">\n <span>Payment method</span>\n <strong>Stripe</strong>\n </div>\n }\n </article>\n </div>\n </section>\n }\n</section>\n","import { Routes } from '@angular/router';\nimport { InvoiceIndexComponent } from './invoice-index/invoice-index.component';\nimport { InvoiceDetailComponent } from './invoice-detail/invoice-detail.component';\n\nexport const invoiceRoutes: Routes = [\n {\n path: '',\n component: InvoiceIndexComponent,\n },\n {\n path: ':id',\n component: InvoiceDetailComponent,\n },\n];\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, inject, OnInit, signal } from '@angular/core';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\nimport { BaseComponent, TabComponent, TabsComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { EnumApiClient, InvoiceService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceStatus } from '../../../interfaces';\nimport { distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-manage-index',\n imports: [CommonModule, RouterLink, ToolbarComponent, TabsComponent, TabComponent, MatPaginatorModule, PricePipe],\n templateUrl: './invoice-manage-index.html',\n styleUrl: './invoice-manage-index.scss',\n})\nexport class InvoiceManageIndex extends BaseComponent implements OnInit {\n private invoiceService = inject(InvoiceService);\n private enumApi = inject(EnumApiClient);\n readonly invoiceTypeMap = signal<Record<string, string>>({});\n select = 0;\n loading = false;\n invoices = signal<Invoice[]>([]);\n meta: any;\n length = 100;\n pageSize = 15;\n pageIndex = signal(0);\n pageSizeOptions: number[] = [5, 10, 25, 100];\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Created',\n icon: 'category',\n status: 'created',\n },\n {\n name: 'Issued',\n icon: 'category',\n status: 'issued',\n },\n {\n name: 'Paid',\n icon: 'category',\n status: 'paid',\n },\n ];\n ngOnInit(): void {\n this.getOptions('billing', 'InvoiceType');\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n\n let filter = '';\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filter = `status:${status?.toUpperCase()}`;\n }\n return {\n page,\n filter,\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.invoiceService.findByManager(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n console.log(res);\n this.invoices.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.invoices.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n getOptions(resource: any, enumName: string) {\n this.enumApi.getOptions(resource, enumName).subscribe({\n next: (res) => {\n const map = res.reduce<Record<string, string>>((acc, cur) => {\n acc[cur.value] = cur.label;\n return acc;\n }, {});\n\n this.invoiceTypeMap.set(map);\n },\n error: () => {},\n });\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n statusBadgeClass(status: InvoiceStatus): string {\n switch (status.toString()) {\n case 'CREATED':\n return 'bg-yellow-100 text-yellow-800';\n case 'ISSUED':\n return 'bg-blue-100 text-blue-800';\n case 'PAID':\n return 'bg-emerald-100 text-emerald-800';\n case 'VOID':\n return 'bg-red-100 text-red-800';\n default:\n return 'bg-gray-100 text-gray-700';\n }\n }\n}\n","<rolatech-toolbar title=\"Invoices\">\n <div class=\"flex items-center gap-2\"></div>\n</rolatech-toolbar>\n<rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab class=\"cursor-pointer\" [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab class=\"cursor-pointer\" [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n</rolatech-tabs>\n<div class=\"p-3 overflow-x-auto\">\n <table class=\"min-w-full\">\n <thead class=\"bg-(--rt-raised-background)\">\n <tr>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">#ID</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Status</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Email</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Profile</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Type</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Total</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoices(); track $index) {\n <!-- <rolatech-invoice-manage-item [invoice]=\"item\"></rolatech-invoice-manage-item> -->\n <tr class=\"hover:bg-(--rt-raised-background) hover:cursor-pointer cursor-pointer\" [routerLink]=\"['./', item.id]\">\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{item.id}}</td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">\n <span\n class=\"inline-flex items-center rounded-full px-3 py-1 text-xs font-medium\"\n [ngClass]=\"statusBadgeClass(item.status)\"\n >{{item.status}}</span\n >\n </td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{item.email}}</td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{item.fullName}}</td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{invoiceTypeMap()[item.type] || item.type}}</td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{item.total | price}}</td>\n </tr>\n }\n </tbody>\n </table>\n</div>\n<!-- <div>\n <table class=\"min-w-full text-sm\">\n <thead class=\"border-b border-(--rt-border-color) bg-(--rt-raised-background)\">\n <tr>\n <th class=\"py-2 text-left font-medium text-gray-600\">#ID</th>\n <th class=\"py-2 text-right font-medium text-gray-600\">Status</th>\n <th class=\"py-2 text-right font-medium text-gray-600\">Email</th>\n <th class=\"py-2 text-right font-medium text-gray-600\">Profile</th>\n <th class=\"py-2 text-right font-medium text-gray-600\">Total</th>\n </tr>\n </thead>\n\n <tbody>\n @for (item of invoices(); track $index) {\n <tr class=\"border-b border-(--rt-border-color) hover:bg-(--rt-raised-background) hover:cursor-pointer\">\n <td class=\"py-2\">{{item.id}}</td>\n <td class=\"py-2 text-right\">{{item.status}}</td>\n <td class=\"py-2 text-right\">{{item.email}}</td>\n <td class=\"py-2 text-right\">{{item.firstName}}, {{item.lastName}}</td>\n <td class=\"py-2 text-right font-semibold\">{{item.total | price}}</td>\n </tr>\n }\n </tbody>\n </table>\n</div> -->\n<mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n>\n</mat-paginator>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, signal } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { InvoiceService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceCreateDto, InvoiceLineCreateDto } from '../../../interfaces';\nimport { ApiResponse } from '@rolatech/angular-common';\nimport { ToolbarComponent, EnumSelect } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-manage-create',\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDividerModule,\n MatCardModule,\n ToolbarComponent,\n EnumSelect,\n ],\n templateUrl: './invoice-manage-create.html',\n styleUrl: './invoice-manage-create.scss',\n})\nexport class InvoiceManageCreate {\n private service = inject(InvoiceService);\n\n // Template-driven model\n invoice: {\n customerName: string;\n customerEmail?: string;\n customerAddress?: string;\n currency: 'GBP' | 'USD' | 'EUR';\n issueDate: string;\n dueDate?: string;\n notes?: string;\n lines: Array<{ type: string; description: string; quantity: number; unitPrice: number; taxRate: number }>;\n } = {\n customerName: '',\n customerEmail: '',\n customerAddress: '',\n currency: 'GBP',\n issueDate: this.todayIso(),\n dueDate: '',\n notes: '',\n lines: [{ type: '', description: '', quantity: 1, unitPrice: 0, taxRate: 0 }],\n };\n\n lastResponse: ApiResponse<Invoice> | null = null;\n selectedLineType;\n addLine() {\n this.invoice.lines.push({ type: '', description: '', quantity: 1, unitPrice: 0, taxRate: 0 });\n }\n removeLine(i: number) {\n this.invoice.lines.splice(i, 1);\n }\n\n subtotalPence(): number {\n return this.invoice.lines.reduce((sum, l) => sum + Math.round((l.unitPrice || 0) * 100) * (l.quantity || 0), 0);\n }\n taxPence(): number {\n return this.invoice.lines.reduce((t, l) => {\n const unitPence = Math.round((l.unitPrice || 0) * 100);\n const rate = (l.taxRate || 0) / 100;\n return t + Math.round(unitPence * (l.quantity || 0) * rate);\n }, 0);\n }\n totalPence(): number {\n return this.subtotalPence() + this.taxPence();\n }\n\n subtotalMajor(): number {\n return this.penceToMajor(this.subtotalPence());\n }\n taxMajor(): number {\n return this.penceToMajor(this.taxPence());\n }\n totalMajor(): number {\n return this.penceToMajor(this.totalPence());\n }\n\n save(form: any) {\n if (!form.form.valid || this.invoice.lines.length === 0) return;\n\n const dto: InvoiceCreateDto = {\n customerName: this.invoice.customerName,\n customerEmail: this.invoice.customerEmail || undefined,\n customerAddress: this.invoice.customerAddress || undefined,\n currency: this.invoice.currency,\n issueDate: this.invoice.issueDate,\n dueDate: this.invoice.dueDate || undefined,\n notes: this.invoice.notes || undefined,\n lines: this.invoice.lines.map((l) => ({\n description: l.description,\n quantity: Number(l.quantity || 0),\n unitPrice: Math.round(Number(l.unitPrice || 0)),\n taxRate: Number(l.taxRate || 0),\n })),\n };\n\n this.service.create(dto).subscribe({\n next: (res: any) => {\n this.lastResponse = res;\n },\n error: (err) => {\n alert(err?.message || 'Failed to create invoice');\n },\n });\n }\n\n resetForm() {\n this.invoice = {\n customerName: '',\n customerEmail: '',\n customerAddress: '',\n currency: 'GBP',\n issueDate: this.todayIso(),\n dueDate: '',\n notes: '',\n lines: [{ type: '', description: '', quantity: 1, unitPrice: 0, taxRate: 0 }],\n };\n this.lastResponse = null;\n }\n\n penceToMajor(pence: number) {\n return Math.round(pence) / 100;\n }\n private todayIso() {\n return new Date().toISOString().slice(0, 10);\n }\n}\n","<rolatech-toolbar title=\"Create Invoice\">\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"save(invoiceForm)\"\n [disabled]=\"!invoiceForm.form.valid || invoice.lines.length === 0\"\n >\n Save\n </button>\n</rolatech-toolbar>\n<div class=\"p-4 space-y-6\">\n <form #invoiceForm=\"ngForm\" novalidate>\n <mat-card appearance=\"outlined\" class=\"p-4\">\n <div class=\"grid lg:grid-cols-2 gap-4\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Customer name</mat-label>\n <input matInput name=\"customerName\" [(ngModel)]=\"invoice.customerName\" required />\n @if (invoiceForm.submitted && !invoice.customerName) {<mat-error>Name is required</mat-error>}\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Customer email</mat-label>\n <input matInput type=\"email\" name=\"customerEmail\" [(ngModel)]=\"invoice.customerEmail\" #email=\"ngModel\" email />\n @if (email.invalid && (email.dirty || email.touched)) {<mat-error>Invalid email</mat-error>}\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\" class=\"lg:col-span-2\">\n <mat-label>Customer address</mat-label>\n <textarea matInput rows=\"2\" name=\"customerAddress\" [(ngModel)]=\"invoice.customerAddress\"></textarea>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Currency</mat-label>\n <mat-select name=\"currency\" [(ngModel)]=\"invoice.currency\" required>\n <mat-option value=\"GBP\">GBP</mat-option>\n <mat-option value=\"USD\">USD</mat-option>\n <mat-option value=\"EUR\">EUR</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Issue date</mat-label>\n <input matInput type=\"date\" name=\"issueDate\" [(ngModel)]=\"invoice.issueDate\" required />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Due date</mat-label>\n <input matInput type=\"date\" name=\"dueDate\" [(ngModel)]=\"invoice.dueDate\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\" class=\"lg:col-span-2\">\n <mat-label>Notes</mat-label>\n <textarea\n matInput\n rows=\"2\"\n name=\"notes\"\n [(ngModel)]=\"invoice.notes\"\n placeholder=\"Optional notes shown on the invoice\"\n ></textarea>\n </mat-form-field>\n </div>\n </mat-card>\n\n <mat-card appearance=\"outlined\" class=\"p-4 space-y-4 mt-4\">\n <div class=\"flex items-center justify-between\">\n <h2 class=\"text-xl font-medium\">Line items</h2>\n <button mat-stroked-button type=\"button\" (click)=\"addLine()\">\n <mat-icon>add</mat-icon>\n Add line\n </button>\n </div>\n\n <div class=\"hidden lg:grid grid-cols-12 gap-2 text-sm font-medium px-2\">\n <div class=\"col-span-3\">Type</div>\n <div class=\"col-span-3\">Description</div>\n <div class=\"col-span-1 text-right\">Qty</div>\n <div class=\"col-span-2 text-right\">Unit Price</div>\n <div class=\"col-span-2 text-right\">Tax %</div>\n <div class=\"col-span-1\"></div>\n </div>\n\n <div class=\"space-y-3\">\n @for ( line of invoice.lines; track line; let i = $index) {\n <div class=\"grid grid-cols-1 lg:grid-cols-12 gap-2 items-start\">\n <rolatech-enum-select\n class=\"lg:col-span-3\"\n [resource]=\"'billing'\"\n [enumName]=\"'InvoiceLineType'\"\n [label]=\"'Line type'\"\n [placeholder]=\"'Select…'\"\n [(value)]=\"line.type\"\n ></rolatech-enum-select>\n <mat-form-field class=\"lg:col-span-3\" appearance=\"fill\">\n <mat-label>Description</mat-label>\n <input\n matInput\n [name]=\"'desc'+i\"\n [(ngModel)]=\"line.description\"\n required\n placeholder=\"e.g. Photo editing package\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"lg:col-span-1\" appearance=\"fill\">\n <mat-label>Quantity</mat-label>\n <input matInput type=\"number\" min=\"1\" step=\"1\" [name]=\"'qty'+i\" [(ngModel)]=\"line.quantity\" required />\n </mat-form-field>\n\n <mat-form-field class=\"lg:col-span-2\" appearance=\"fill\">\n <mat-label>Unit Price</mat-label>\n <input matInput type=\"number\" min=\"0\" step=\"0.01\" [name]=\"'unit'+i\" [(ngModel)]=\"line.unitPrice\" required />\n <mat-hint>e.g. 99.99</mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"lg:col-span-2\" appearance=\"fill\">\n <mat-label>Tax %</mat-label>\n <input matInput type=\"number\" min=\"0\" step=\"0.01\" [name]=\"'tax'+i\" [(ngModel)]=\"line.taxRate\" />\n </mat-form-field>\n\n <div class=\"lg:col-span-1 flex items-center justify-end\">\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"removeLine(i)\" aria-label=\"Remove line\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n <mat-divider></mat-divider>\n }\n </div>\n\n <div class=\"flex flex-col items-end space-y-1\">\n <div class=\"text-sm\">\n Subtotal: <span class=\"font-medium\">{{ subtotalMajor() | number:'1.2-2' }} {{ invoice.currency }}</span>\n </div>\n <div class=\"text-sm\">\n Tax: <span class=\"font-medium\">{{ taxMajor() | number:'1.2-2' }} {{ invoice.currency }}</span>\n </div>\n <div class=\"text-lg font-semibold\">Total: {{ totalMajor() | number:'1.2-2' }} {{ invoice.currency }}</div>\n </div>\n </mat-card>\n </form>\n\n @if (lastResponse) {\n <mat-card appearance=\"outlined\" class=\"p-4 flex items-center justify-between\">\n <div>\n <div class=\"font-medium\">Created invoice #{{ lastResponse.data.id }}</div>\n <div class=\"text-sm opacity-70\">\n Total: {{ penceToMajor(lastResponse.data.total) | number:'1.2-2' }} {{ invoice.currency }}\n </div>\n </div>\n <div class=\"space-x-2\">\n <button mat-stroked-button (click)=\"resetForm()\">Create another</button>\n <button mat-flat-button color=\"primary\">Download PDF</button>\n </div>\n </mat-card>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, DoCheck, model, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { BaseComponent } from '@rolatech/angular-components';\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n\n@Component({\n selector: 'rolatech-invoice-edit',\n imports: [CommonModule, FormsModule, MatInputModule, MatDatepickerModule, MatSelectModule, MatOptionModule],\n templateUrl: './invoice-edit.html',\n styleUrl: './invoice-edit.scss',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\nexport class InvoiceEdit extends BaseComponent implements DoCheck {\n minDate = new Date();\n invoice = model.required<any>();\n output = output<any>();\n ngDoCheck(): void {\n this.output.emit(this.invoice());\n }\n}\n","<div class=\"flex flex-col gap-2\">\n <div class=\"flex justify-between gap-3\">\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Firstname</mat-label>\n <input matInput [(ngModel)]=\"invoice().firstName\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Lastname</mat-label>\n <input matInput [(ngModel)]=\"invoice().lastName\" />\n </mat-form-field>\n </div>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Email</mat-label>\n <input matInput [(ngModel)]=\"invoice().email\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Phone</mat-label>\n <input matInput [(ngModel)]=\"invoice().phone\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Discount total</mat-label>\n <input matInput [(ngModel)]=\"invoice().discountAmount\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Total</mat-label>\n <input matInput [(ngModel)]=\"invoice().total\" />\n </mat-form-field>\n <!-- <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label i18n>Move-in date</mat-label>\n <input\n matInput\n placeholder=\"Move-in date\"\n [min]=\"minDate\"\n [matDatepicker]=\"startDatePicker\"\n (focus)=\"startDatePicker.open()\"\n [(ngModel)]=\"invoice().startDate\"\n (dateInput)=\"invoice().startDate = $event.value.format('YYYY-MM-DD')\"\n required\n readonly\n />\n <mat-datepicker-toggle matIconPrefix [for]=\"startDatePicker\"></mat-datepicker-toggle>\n <mat-datepicker #startDatePicker></mat-datepicker>\n </mat-form-field> -->\n</div>\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { InvoiceLineService, InvoiceService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceLine, InvoiceLineType, InvoiceVatMode } from '../interfaces';\n\ntype SaveState = 'idle' | 'loading' | 'saving' | 'error';\n\n@Injectable({ providedIn: 'root' })\nexport class InvoiceStore {\n private readonly api = inject(InvoiceService);\n private readonly _lines = signal<InvoiceLine[]>([]);\n\n // --- state ---\n readonly invoiceId = signal<string | null>(null);\n readonly invoice = signal<Invoice | null>(null);\n\n /** last server-saved snapshot */\n private readonly pristine = signal<Invoice | null>(null);\n readonly status = signal<SaveState>('idle');\n readonly error = signal<string | null>(null);\n\n // editor UI state\n readonly editorOpen = signal(false);\n readonly editingLineId = signal<string | null>(null);\n\n // --- derived ---\n readonly lines = computed(() => this.invoice()?.lines ?? []);\n readonly currency = computed(() => this.invoice()?.currency ?? 'GBP');\n readonly vatMode = computed<InvoiceVatMode>(() => this.invoice()?.vatMode ?? InvoiceVatMode.EXCLUSIVE);\n\n readonly totals = computed(() => {\n const inv = this.invoice();\n if (!inv) {\n return { subtotal: 0, vatTotal: 0, total: 0 };\n }\n\n const lines = inv.lines ?? [];\n const subtotal = lines.reduce((s, l) => s + (l.amount ?? 0), 0);\n const vatTotal = lines.reduce((s, l) => s + (l.vatAmount ?? 0), 0);\n const total = lines.reduce((s, l) => s + (l.lineTotal ?? 0), 0);\n\n return { subtotal, vatTotal, total };\n });\n\n /** 🔴 DIRTY FLAG */\n readonly dirty = computed(() => {\n const a = this.invoice();\n const b = this.pristine();\n if (!a || !b) return false;\n return JSON.stringify(a) !== JSON.stringify(b);\n });\n\n // --- API: load / refresh ---\n load(id: string) {\n this.invoiceId.set(id);\n this.status.set('loading');\n this.error.set(null);\n\n // ✅ Adapt to your actual API signature:\n // e.g. this.api.get(id) or this.api.getInvoice(id)\n this.api\n .get(id)\n .pipe(finalize(() => this.status.set('idle')))\n .subscribe({\n next: (inv: any) => {\n console.log(inv);\n const normalized = this.normalizeInvoice(inv.data);\n this.invoice.set(normalized);\n this.pristine.set(structuredClone(normalized));\n },\n error: (e: any) => {\n this.status.set('error');\n this.error.set(this.errMsg(e));\n },\n });\n }\n\n refresh() {\n const id = this.invoiceId();\n if (!id) return;\n this.load(id);\n }\n\n // --- API: save ---\n saveInvoice() {\n const id = this.invoiceId();\n const inv = this.invoice();\n if (!id || !inv) return;\n\n this.status.set('saving');\n this.error.set(null);\n\n // ✅ Adapt: this.api.update(id, dto)\n this.api\n .update(id, inv)\n .pipe(finalize(() => this.status.set('idle')))\n .subscribe({\n next: (saved: Invoice) => this.invoice.set(this.normalizeInvoice(saved)),\n error: (e: any) => {\n this.status.set('error');\n this.error.set(this.errMsg(e));\n },\n });\n }\n\n saveLines() {\n const id = this.invoiceId();\n const inv = this.invoice();\n if (!id || !inv) return;\n\n this.status.set('saving');\n this.error.set(null);\n\n const payload = (inv.lines ?? []).map((l) => this.toLinePayload(l));\n\n // ✅ Adapt: this.api.updateLines(id, payload)\n // If your backend updates invoice lines via PATCH /invoices/{id}/lines\n this.api\n .updateLines(id, payload)\n .pipe(finalize(() => this.status.set('idle')))\n .subscribe({\n next: (saved) => {\n const normalized = this.normalizeInvoice(saved.data);\n this.invoice.set(normalized);\n this.pristine.set(structuredClone(normalized));\n },\n error: (e: any) => {\n this.status.set('error');\n this.error.set(this.errMsg(e));\n },\n });\n }\n\n // ─────────────────────────────────────────────\n // Editor lifecycle\n // ─────────────────────────────────────────────\n openLineEditor(lineId?: string) {\n this.editorOpen.set(true);\n this.editingLineId.set(lineId ?? null);\n }\n\n closeLineEditor() {\n this.editorOpen.set(false);\n this.editingLineId.set(null);\n }\n\n getLineById(lineId: string): InvoiceLine | null {\n return this.lines().find((l) => l.id === lineId) ?? null;\n }\n\n // ─────────────────────────────────────────────\n // Line operations (ALL mark dirty automatically)\n // ─────────────────────────────────────────────\n addLineAndEdit() {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n const newLine = this.recalcLine(this.createEmptyLine(inv.currency), inv.vatMode);\n queueMicrotask(() => this.openLineEditor(newLine.id));\n return { ...inv, lines: [...inv.lines, newLine] };\n });\n }\n\n updateLineById(lineId: string, patch: Partial<InvoiceLine>) {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n\n const mode = inv.vatMode;\n const lines = (inv.lines ?? []).map((l) => {\n if (l.id !== lineId) return l;\n const merged = { ...l, ...patch };\n return this.recalcLine(merged, mode);\n });\n\n return { ...inv, lines };\n });\n }\n\n removeLineById(lineId: string) {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n if (this.editingLineId() === lineId) this.closeLineEditor();\n return { ...inv, lines: inv.lines.filter((l) => l.id !== lineId) };\n });\n }\n // If vatMode changes, recalc all lines\n setVatMode(mode: InvoiceVatMode) {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n const lines = (inv.lines ?? []).map((l) => this.recalcLine(l, mode));\n return { ...inv, vatMode: mode, lines };\n });\n }\n reorderLines(fromIndex: number, toIndex: number) {\n if (fromIndex === toIndex) return;\n\n this.invoice.update((inv) => {\n if (!inv) return inv;\n\n const lines = [...(inv.lines ?? [])];\n const [moved] = lines.splice(fromIndex, 1);\n lines.splice(toIndex, 0, moved);\n\n // re-index positions (1..n)\n const rePos = lines.map((l, idx) => ({ ...l, position: idx + 1 }));\n\n return { ...inv, lines: rePos };\n });\n }\n setLines(lines: InvoiceLine[]) {\n this._lines.set(lines);\n }\n\n updateLine(id: string, patch: Partial<InvoiceLine>) {\n this._lines.update((lines) => lines.map((l) => (l.id === id ? { ...l, ...patch } : l)));\n }\n\n // --- helpers: normalize / compute ---\n private normalizeInvoice(inv: Invoice): Invoice {\n const mode = inv.vatMode ?? InvoiceVatMode.EXCLUSIVE;\n\n const sorted = [...(inv.lines ?? [])]\n .sort((a, b) => (a.position ?? 0) - (b.position ?? 0))\n .map((l, idx) => this.recalcLine({ ...l, position: idx + 1 }, mode));\n\n return { ...inv, lines: sorted };\n }\n\n private recalcLine(line: InvoiceLine, mode: InvoiceVatMode): InvoiceLine {\n const qty = this.num(line.quantity, 1);\n const unit = this.num(line.unitPrice, 0);\n const rate = this.num(line.vatRate, 0);\n\n const grossUnit = unit;\n const netUnit = mode === InvoiceVatMode.INCLUSIVE ? grossUnit / (1 + rate / 100) : grossUnit;\n\n const net = netUnit * qty;\n const vat = net * (rate / 100);\n const total = mode === InvoiceVatMode.INCLUSIVE ? grossUnit * qty : net + vat;\n\n return {\n ...line,\n quantity: qty,\n unitPrice: unit,\n vatRate: rate,\n amount: this.round2(net),\n vatAmount: this.round2(mode === InvoiceVatMode.INCLUSIVE ? total - net : vat),\n lineTotal: this.round2(total),\n };\n }\n\n private createEmptyLine(currency: string): InvoiceLine {\n return {\n id: this.newId(),\n code: '',\n title: 'New item',\n description: '',\n imageUrl: '',\n amount: 0,\n unitPrice: 0,\n vatRate: 0,\n vatAmount: 0,\n lineTotal: 0,\n quantity: 1,\n currency,\n refId: '',\n type: InvoiceLineType.CUSTOM,\n position: 0,\n };\n }\n\n private toLinePayload(l: InvoiceLine) {\n return {\n id: l.id,\n position: l.position, // ✅ persist order\n type: l.type,\n title: l.title,\n description: l.description,\n quantity: l.quantity,\n unitPrice: l.unitPrice,\n vatRate: l.vatRate,\n currency: l.currency,\n };\n }\n\n private newId(): string {\n return typeof crypto !== 'undefined' && 'randomUUID' in crypto\n ? crypto.randomUUID()\n : `tmp_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n }\n\n private num(v: any, def: number) {\n const n = Number(v);\n return Number.isFinite(n) ? n : def;\n }\n\n private round2(n: number) {\n return Math.round((n + Number.EPSILON) * 100) / 100;\n }\n\n private errMsg(e: any) {\n return e?.error?.message || e?.message || 'Request failed';\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-invoice-line-property-selector',\n imports: [],\n templateUrl: './invoice-line-property-selector.html',\n styleUrl: './invoice-line-property-selector.scss',\n})\nexport class InvoiceLinePropertySelector {}\n","<p>invoice-line-property-selector works!</p>\n","import { DragDropModule, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { EnumSelect } from '@rolatech/angular-components';\nimport { InvoiceLineType } from '../../interfaces';\nimport { InvoiceStore } from '../../store/invoice.store';\nimport { InvoiceLinePropertySelector } from '../invoice-line-property-selector/invoice-line-property-selector';\n\n@Component({\n selector: 'rolatech-invoice-manage-line',\n imports: [DragDropModule, MatButtonModule, MatIcon, MatFormFieldModule, MatInputModule, PricePipe, EnumSelect],\n templateUrl: './invoice-manage-line.html',\n styleUrl: './invoice-manage-line.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceManageLine {\n readonly store = inject(InvoiceStore);\n readonly dialog = inject(MatDialog);\n\n lines = this.store.lines;\n vatMode = this.store.vatMode;\n\n readonly editMode = signal(false);\n private openingForLine = new Set<string>();\n\n toggleEdit() {\n this.editMode.update((v) => !v);\n }\n\n add() {\n this.store.addLineAndEdit(); // or addLine()\n }\n\n remove(id: string) {\n this.store.removeLineById(id);\n }\n\n update(id: string, patch: any) {\n this.store.updateLineById(id, patch);\n }\n\n drop(event: CdkDragDrop<any>) {\n if (!this.editMode()) return; // ⛔ prevent reorder when not editing\n this.store.reorderLines(event.previousIndex, event.currentIndex);\n }\n\n isVatExclusive = () => this.vatMode() === 'EXCLUSIVE';\n isPropertyLine(type: InvoiceLineType) {\n return type === 'PROPERTY_RENT' || type === 'PROPERTY_SALE';\n }\n\n onTitleFocus(line: any) {\n if (!this.isPropertyLine(line.type)) return;\n\n // guard: focusing can fire repeatedly (click, focus, programmatic)\n if (this.openingForLine.has(line.id)) return;\n\n this.openingForLine.add(line.id);\n this.openPropertyDialog(line).finally(() => {\n // release guard a tick later so re-focus works after dialog closes\n queueMicrotask(() => this.openingForLine.delete(line.id));\n });\n }\n\n onTitleKeydown(ev: KeyboardEvent, line: any) {\n if (!this.isPropertyLine(line.type)) return;\n\n // Block manual typing when it’s a property picker\n const allow = ['Tab', 'Shift', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Escape', 'Enter'];\n if (!allow.includes(ev.key)) {\n ev.preventDefault();\n }\n\n // Optional: Enter opens dialog too\n if (ev.key === 'Enter') {\n ev.preventDefault();\n this.onTitleFocus(line);\n }\n }\n async openPropertyDialog(line: any) {\n if (!this.isPropertyLine(line.type)) return;\n\n const ref = this.dialog.open(InvoiceLinePropertySelector, {\n data: {\n title: 'Select property',\n initialQuery: line.title ?? '',\n },\n autoFocus: false,\n restoreFocus: false,\n });\n\n const selected = await ref.afterClosed().toPromise();\n if (!selected) return;\n\n // ✅ update with title + refId(propertyId)\n this.store.updateLine(line.id, {\n title: selected.title,\n refId: selected.id,\n });\n }\n saveLines() {}\n}\n","<!-- invoice-lines.html -->\n<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <!-- Header -->\n <div class=\"flex items-center justify-between\">\n <h2 class=\"text-sm font-semibold\">Invoice lines</h2>\n\n <div class=\"flex items-center gap-2\">\n <button mat-icon-button type=\"button\" aria-label=\"Toggle edit\" (click)=\"toggleEdit()\">\n <mat-icon> {{ editMode() ? 'done' : 'edit' }} </mat-icon>\n </button>\n <button mat-stroked-button type=\"button\" [disabled]=\"store.dirty() || store.status() === 'saving'\" (click)=\"saveLines()\">\n @if (store.status() === 'saving') { Saving… } @else { Save lines }\n </button>\n </div>\n </div>\n\n <!-- Column labels (desktop only) -->\n <div class=\"hidden lg:grid grid-cols-12 gap-2 text-sm font-medium px-2 text-(--rt-text-secondary)\">\n <!-- Drag column -->\n @if (editMode()) {\n <div class=\"col-span-1\"></div>\n }\n\n <!-- Type -->\n <div [class]=\"editMode() ? 'col-span-3' : 'col-span-3'\">Type</div>\n\n <!-- Description (take extra space when not editing) -->\n <div [class]=\"editMode() ? 'col-span-4' : 'col-span-5'\">Title</div>\n\n <!-- Unit Price -->\n <div class=\"col-span-2 text-right\">Unit Price</div>\n\n <!-- Tax % (optional) -->\n @if (!isVatExclusive()) {\n <div class=\"col-span-1 text-right\">Tax %</div>\n }\n\n <!-- Amount (take extra space when not editing) -->\n <div [class]=\"editMode() ? 'col-span-1' : 'col-span-2'\" class=\"text-right\">Amount</div>\n\n <!-- Delete column -->\n @if (editMode()) {\n <div class=\"col-span-1\"></div>\n }\n </div>\n\n <!-- invoice-lines.html (rows section) -->\n\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" [cdkDropListDisabled]=\"!editMode()\" class=\"space-y-2\">\n @if (lines().length > 0) { @for (line of lines(); track line.id; let i = $index) {\n\n <div\n cdkDrag\n class=\"grid grid-cols-12 gap-2 items-start rounded-xl border border-(--rt-border-color) bg-(--rt-background) p-2 hover:bg-(--rt-raised-background)\"\n [class.opacity-70]=\"!editMode()\"\n >\n <!-- Drag handle column (only in edit mode) -->\n @if (editMode()) {\n <div class=\"col-span-1 flex items-center justify-center\">\n <button mat-icon-button type=\"button\" cdkDragHandle aria-label=\"Reorder line\" (click)=\"$event.stopPropagation()\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n }\n\n <!-- Type -->\n <div class=\"col-span-12 lg:col-span-3\">\n <rolatech-enum-select\n [resource]=\"'billing'\"\n [enumName]=\"'InvoiceLineType'\"\n [label]=\"'Line type'\"\n [placeholder]=\"'Select…'\"\n [value]=\"line.type\"\n (valueChange)=\"editMode() && update(line.id!, { type: $event })\"\n ></rolatech-enum-select>\n </div>\n\n <!-- Title (expands when NOT editMode) -->\n <div [class]=\"editMode() ? 'col-span-12 lg:col-span-4' : 'col-span-12 lg:col-span-5'\">\n <mat-form-field appearance=\"fill\" class=\"w-full\" subscriptSizing=\"dynamic\">\n <mat-label>Title</mat-label>\n <input\n matInput\n placeholder=\"e.g. Photo editing package\"\n [readonly]=\"!editMode()\"\n [readonly]=\"isPropertyLine(line.type)\"\n (focus)=\"onTitleFocus(line)\"\n (click)=\"onTitleFocus(line)\"\n (keydown)=\"onTitleKeydown($event, line)\"\n [value]=\"line.title\"\n (input)=\"editMode() && update(line.id!, { title: $any($event.target).value })\"\n />\n </mat-form-field>\n </div>\n\n <!-- Unit Price -->\n <div class=\"col-span-6 lg:col-span-2\">\n <mat-form-field appearance=\"fill\" class=\"w-full\" subscriptSizing=\"dynamic\">\n <mat-label>Unit</mat-label>\n <input\n matInput\n type=\"number\"\n min=\"0\"\n step=\"0.01\"\n class=\"text-right\"\n [readonly]=\"!editMode()\"\n [value]=\"line.unitPrice\"\n (input)=\"editMode() && update(line.id!, { unitPrice: +$any($event.target).value })\"\n />\n </mat-form-field>\n </div>\n\n <!-- Tax % (optional, hidden if VAT exclusive) -->\n @if (!isVatExclusive()) {\n <div class=\"col-span-6 lg:col-span-1\">\n <mat-form-field appearance=\"fill\" class=\"w-full\" subscriptSizing=\"dynamic\">\n <mat-label>Tax %</mat-label>\n <input\n matInput\n type=\"number\"\n min=\"0\"\n step=\"0.01\"\n class=\"text-right\"\n [readonly]=\"!editMode()\"\n [value]=\"line.vatRate\"\n (input)=\"editMode() && update(line.id!, { vatRate: +$any($event.target).value })\"\n />\n </mat-form-field>\n </div>\n }\n\n <!-- Amount (expands when NOT editMode) -->\n <div\n [class]=\"editMode() ? 'col-span-6 lg:col-span-1' : 'col-span-6 lg:col-span-2'\"\n class=\"flex items-center justify-end px-1 lg:pt-3\"\n >\n <div class=\"text-right font-semibold text-(--rt-text-secondary)\">{{ line.lineTotal | price }}</div>\n </div>\n\n <!-- Delete column (only in edit mode) -->\n @if (editMode()) {\n <div class=\"col-span-6 lg:col-span-1 flex items-center justify-end lg:pt-1\">\n <button mat-icon-button color=\"warn\" type=\"button\" aria-label=\"Delete line\" (click)=\"remove(line.id!)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n }\n </div>\n } } @else {\n <div class=\"py-8 text-center text-sm text-(--rt-text-secondary)\">No invoice lines</div>\n }\n </div>\n\n <!-- Footer -->\n <div>\n <button mat-stroked-button (click)=\"add()\">Add item</button>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject, computed } from '@angular/core';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { BaseComponent, ConfirmationDialogComponent, MaterialModule } from '@rolatech/angular-components';\nimport { InvoiceService } from '@rolatech/angular-services';\n\nimport { InvoiceStatus } from '../../../interfaces';\nimport { InvoiceEdit } from '../../../components/invoice-edit/invoice-edit';\nimport { InvoiceStore } from '../../../store/invoice.store';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { InvoiceManageLine } from '../../../components/invoice-manage-line/invoice-manage-line';\nimport { InvoiceLines } from '../../../components/invoice-lines/invoice-lines';\n\n@Component({\n selector: 'rolatech-invoice-manage-detail',\n standalone: true,\n imports: [CommonModule, MaterialModule, MatMenuModule, InvoiceLines, InvoiceManageLine, PricePipe],\n templateUrl: './invoice-manage-detail.html',\n styleUrl: './invoice-manage-detail.scss',\n})\nexport class InvoiceManageDetail extends BaseComponent implements OnInit {\n private readonly invoiceService = inject(InvoiceService);\n readonly store = inject(InvoiceStore);\n\n // expose store signals\n readonly invoice = this.store.invoice;\n readonly status = InvoiceStatus;\n\n // convenience derived values for template\n readonly loading = computed(() => this.store.status() === 'loading');\n readonly pdfUrl = computed(() => this.store.invoice()?.pdfUrl ?? '');\n\n ngOnInit(): void {\n this.store.load(this.id);\n }\n\n openPdf() {\n const url = this.pdfUrl();\n if (!url) return;\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n\n statusBadgeClass(status: InvoiceStatus): string {\n switch (String(status)) {\n case 'CREATED':\n return 'bg-yellow-100 text-yellow-800';\n case 'ISSUED':\n return 'bg-blue-100 text-blue-800';\n case 'PAID':\n return 'bg-emerald-100 text-emerald-800';\n case 'VOID':\n return 'bg-red-100 text-red-800';\n default:\n return 'bg-gray-100 text-gray-700';\n }\n }\n\n edit() {\n const inv = this.invoice();\n if (!inv) return;\n\n this.dialogService.open({\n title: 'Update invoice',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n data: { invoice: inv },\n component: InvoiceEdit,\n });\n\n // IMPORTANT: avoid stacking subscriptions if user opens dialog repeatedly\n const sub = this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (!res) return;\n\n const payload = {\n firstName: res.firstName,\n lastName: res.lastName,\n email: res.email,\n phone: res.phone,\n vatTotal: res.vatTotal,\n total: res.total,\n };\n\n this.invoiceService.updateInvoice(this.id, payload).subscribe({\n next: () => {\n this.snackBarService.open('Invoice updated');\n this.store.refresh(); // reload from API so UI stays consistent\n },\n error: (err) => this.snackBarService.open(err?.message ?? 'Update failed'),\n });\n },\n error: (error) => this.snackBarService.open(error?.message ?? 'Dialog error'),\n complete: () => sub.unsubscribe(),\n });\n }\n\n addLine() {\n // add and open editor (recommended)\n this.store.addLineAndEdit();\n\n // OR if you just want to add without opening editor:\n // this.store.addLine();\n }\n\n // Optional: persist changes\n saveLines() {\n this.store.saveLines();\n }\n editCustomer() {}\n sendEmail() {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '400px',\n data: {\n title: 'Send invoice',\n message: 'Send this invoice to the customer’s email address?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.invoiceService.sendInvoice(this.id).subscribe({\n next: (res) => {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n inv.status = InvoiceStatus.SENT;\n return inv;\n });\n this.snackBarService.open('Invoice sent successfully.');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n}\n","@if (store.status() === 'loading') {\n<div class=\"flex justify-center py-16\">Loading invoice…</div>\n} @else if (!store.invoice()) {\n<div class=\"flex justify-center py-16\">Invoice not found.</div>\n} @else { @if (store.invoice(); as inv) {\n\n<!-- Sticky header -->\n<div class=\"sticky top-0 z-10 border-b border-(--rt-border-color) bg-(--rt-background)\">\n <div class=\"px-4 py-3 flex items-start justify-between gap-4\">\n <div class=\"min-w-0\">\n <div class=\"flex items-center gap-2\">\n <h1 class=\"text-lg font-semibold truncate\">Invoice {{ inv.invoiceNumber || inv.id }}</h1>\n\n <span class=\"px-2 py-0.5 rounded-full text-xs font-semibold\" [class]=\"statusBadgeClass(inv.status)\">\n {{ inv.status }}\n </span>\n\n @if (store.dirty() ) {\n <span class=\"text-xs text-(--rt-text-secondary)\">• Unsaved changes</span>\n }\n </div>\n\n <div class=\"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-(--rt-text-secondary)\">\n <span class=\"truncate\"> {{ inv.fullName }} • {{ inv.email }} </span>\n <span>Created {{ inv.createdAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n @if (inv.dueAt) { <span>Due {{ inv.dueAt | date:'dd/MM/yyyy':'Europe/London' }}</span> }\n </div>\n </div>\n\n <!-- Desktop actions -->\n\n <div class=\"hidden lg:flex items-center gap-2 shrink-0\">\n @if (inv.pdfUrl) {\n <button mat-stroked-button type=\"button\" (click)=\"openPdf()\">Preview PDF</button>\n } @if (inv.status.toString() === 'ISSUED') {\n <button mat-flat-button type=\"button\" (click)=\"sendEmail()\">Send email</button>\n } @if (inv.status.toString() !== 'SENT' && inv.status.toString() !== 'PAID') {\n <button mat-flat-button (click)=\"edit()\">Edit</button>\n } @if (inv.status.toString() === 'SENT') {\n <button mat-flat-button type=\"button\" (click)=\"sendEmail()\">Resend</button>\n }\n </div>\n\n <!-- Mobile actions -->\n <div class=\"lg:hidden shrink-0\">\n <button mat-icon-button type=\"button\" [matMenuTriggerFor]=\"moreMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n</div>\n\n<!-- Body -->\n<div class=\"p-4 space-y-4\">\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <!-- Left column -->\n <div class=\"grid lg:col-span-2 space-y-4\">\n <!-- Customer -->\n <div class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-background) p-4\">\n <div class=\"flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-semibold\">Customer</div>\n <div class=\"text-sm text-(--rt-text-secondary)\">{{ inv.fullName }} • {{ inv.email }}</div>\n </div>\n </div>\n\n <div class=\"mt-3 grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm\">\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Phone</div>\n <div class=\"font-medium\">{{ inv.phone || '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Currency</div>\n <div class=\"font-medium\">{{ inv.currency }}</div>\n </div>\n </div>\n </div>\n\n <!-- Lines -->\n\n @if (inv.status.toString() !== 'SENT' && inv.status.toString() !== 'PAID') {\n <rolatech-invoice-manage-line></rolatech-invoice-manage-line>\n } @else {\n <rolatech-invoice-lines [lines]=\"store.lines()\"></rolatech-invoice-lines>\n }\n\n <!-- Notes (optional) -->\n @if (inv.note) {\n <div class=\"rounded-xl border border-(--rt-border-color) p-4\">\n <div class=\"text-sm font-semibold\">Notes</div>\n <div class=\"mt-2 text-sm text-(--rt-text-secondary) whitespace-pre-wrap\">{{ inv.note }}</div>\n </div>\n }\n </div>\n\n <!-- Right rail -->\n <div class=\"space-y-4\">\n <div class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-background) p-4\">\n <div class=\"text-sm font-semibold\">Summary</div>\n\n @if (store.totals(); as t) {\n <div class=\"mt-3 space-y-2 text-sm\">\n <div class=\"flex justify-between\">\n <span class=\"text-(--rt-text-secondary)\">Subtotal</span>\n <span class=\"font-medium\">{{ t.subtotal | price }}</span>\n </div>\n\n <div class=\"flex justify-between\">\n <span class=\"text-(--rt-text-secondary)\">VAT</span>\n <span class=\"font-medium\">{{ t.vatTotal | price }}</span>\n </div>\n\n @if (inv.holdingDepositApplied) {\n <div class=\"flex justify-between\">\n <span class=\"text-(--rt-text-secondary)\">Credit</span>\n <span class=\"font-medium\">-{{ inv.holdingDepositApplied | price }}</span>\n </div>\n }\n\n <div class=\"pt-2 mt-2 border-t border-(--rt-border-color) flex justify-between text-base\">\n <span class=\"font-semibold\">Total</span>\n <span class=\"font-semibold\">{{ t.total | price }}</span>\n </div>\n </div>\n }\n </div>\n <div class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-background) p-4\">\n <div class=\"text-sm font-semibold\">Payment</div>\n <div class=\"mt-2 text-sm text-(--rt-text-secondary)\">\n Status:\n <span class=\"font-medium text-(--rt-text-primary)\">{{ inv.status.toString() === 'PAID' ? 'Paid': 'Unpaid' }}</span>\n </div>\n @if (inv.paidAt) {\n <div class=\"mt-1 text-sm text-(--rt-text-secondary)\">\n Paid: <span class=\"font-medium text-(--rt-text-primary)\">{{ inv.paidAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n\n<mat-menu #moreMenu=\"matMenu\" xPosition=\"after\" class=\"divide-y divide-light-900\">\n @if (inv.pdfUrl) {\n <button mat-menu-item type=\"button\" (click)=\"openPdf()\">Preview PDF</button>\n } @if (inv.status.toString() === 'ISSUED') {\n <button mat-menu-item type=\"button\" (click)=\"sendEmail()\">Send email</button>\n } @if (inv.status.toString() !== 'SENT' && inv.status.toString() !== 'PAID') {\n <button mat-menu-item type=\"button\" (click)=\"edit()\">Edit</button>\n\n }\n</mat-menu>\n} }\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-invoice-manage-download',\n imports: [],\n templateUrl: './invoice-manage-download.html',\n styleUrl: './invoice-manage-download.scss',\n})\nexport class InvoiceManageDownload {}\n","<p>invoice-manage-download works!</p>\n","import { Routes } from '@angular/router';\nimport { InvoiceManageIndex } from './invoice-manage-index/invoice-manage-index';\nimport { InvoiceManageCreate } from './invoice-manage-create/invoice-manage-create';\nimport { InvoiceManageDetail } from './invoice-manage-detail/invoice-manage-detail';\nimport { InvoiceManageDownload } from './invoice-manage-download/invoice-manage-download';\n\nexport const invoiceManageRoutes: Routes = [\n {\n path: '',\n component: InvoiceManageIndex,\n },\n {\n path: 'create',\n component: InvoiceManageCreate,\n },\n\n {\n path: 'download',\n component: InvoiceManageDownload,\n },\n {\n path: ':id',\n component: InvoiceManageDetail,\n },\n];\n","import { KeyValuePipe } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { RouterModule } from '@angular/router';\nimport {\n BaseComponent,\n} from '@rolatech/angular-components';\nimport { InvoiceService } from '@rolatech/angular-services';\nimport { InvoiceItem } from '../../../components';\nimport { InvoiceType, InvoiceStatus, Invoice } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { InvoiceItemSkeleton } from '../../../components/invoice-item-skeleton/invoice-item-skeleton';\n\n@Component({\n selector: 'rolatech-agent-invoice-index',\n imports: [\n RouterModule,\n InvoiceItem,\n MatButtonModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n KeyValuePipe,\n MatPaginatorModule,\n InvoiceItemSkeleton,\n ],\n templateUrl: './agent-invoice-index.html',\n styleUrl: './agent-invoice-index.scss',\n})\nexport class AgentInvoiceIndex extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n filterOptions: any = {\n type: '',\n status: '',\n };\n invoiceType = InvoiceType;\n invoiceStatus = InvoiceStatus;\n\n select = 0;\n loading = false;\n invoices = signal<Invoice[]>([]);\n meta: any;\n length = 100;\n pageSize = 15;\n pageIndex = signal(0);\n pageSizeOptions: number[] = [5, 10, 25, 100];\n links = [\n {\n name: 'All',\n status: '',\n },\n {\n name: 'Created',\n status: 'created',\n },\n {\n name: 'Issued',\n status: 'issued',\n },\n {\n name: 'Paid',\n status: 'paid',\n },\n ];\n\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Agent workspace'),\n title: this.readRouteData('invoiceCollectionTitle', 'Listing invoices'),\n description: this.readRouteData(\n 'invoiceCollectionDescription',\n 'Monitor invoices tied to your listings, with billing status and payment movement visible at a glance.',\n ),\n };\n\n readonly stats = computed(() => {\n const invoices = this.invoices();\n return [\n { label: 'Invoices', value: this.length || invoices.length, hint: 'Billing records in your agent workspace' },\n { label: 'Created', value: invoices.filter((item) => item.status === InvoiceStatus.CREATED).length, hint: 'Prepared but not yet settled' },\n { label: 'Issued', value: invoices.filter((item) => item.status === InvoiceStatus.ISSUED || item.status === InvoiceStatus.SENT).length, hint: 'Awaiting payment' },\n { label: 'Paid', value: invoices.filter((item) => item.status === InvoiceStatus.PAID).length, hint: 'Completed payments' },\n ];\n });\n\n find() {\n this.router.navigate([], {\n queryParams: {\n type: this.filterOptions.type || null,\n status: this.filterOptions.status || null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n const type = p.get('type') || undefined;\n this.filterOptions = {\n type: type || '',\n status: status || '',\n };\n\n const filters: string[] = [];\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filters.push(`status:${status.toUpperCase()}`);\n } else {\n this.select = 0;\n }\n if (type) {\n filters.push(`type:${type}`);\n }\n return {\n page,\n filter: filters.join(','),\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n return this.invoiceService.findByManager(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.invoices.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.invoices.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n resetFilter() {\n this.filterOptions = {\n type: '',\n status: '',\n };\n this.router.navigate([], {\n queryParams: {\n type: null,\n status: null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n statusCompareFn(t1: any, t2: any) {\n return t1 === t2;\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<section class=\"invoice-index-page\">\n <section class=\"invoice-index-page__hero\">\n <div class=\"invoice-index-page__copy\">\n <span class=\"invoice-index-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-index-page__title\">{{ pageMeta.title }}</h1>\n <p class=\"invoice-index-page__description\">{{ pageMeta.description }}</p>\n </div>\n\n <div class=\"invoice-index-page__stats\">\n @for (stat of stats(); track stat.label) {\n <article class=\"invoice-index-page__stat\">\n <span class=\"invoice-index-page__stat-value\">{{ stat.value }}</span>\n <span class=\"invoice-index-page__stat-label\">{{ stat.label }}</span>\n <span class=\"invoice-index-page__stat-hint\">{{ stat.hint }}</span>\n </article>\n }\n </div>\n </section>\n\n <section class=\"invoice-index-page__filters\">\n <nav class=\"invoice-index-page__status-nav\" aria-label=\"Invoice status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"invoice-index-page__status-link\"\n [class.invoice-index-page__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <div class=\"invoice-index-page__filter-grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Type</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"filterOptions.type\">\n @for (type of invoiceType | keyvalue; track type.key) {\n <mat-option [value]=\"type.key\">{{ type.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Status</mat-label>\n <mat-select [compareWith]=\"statusCompareFn\" [(ngModel)]=\"filterOptions.status\">\n @for (status of invoiceStatus | keyvalue; track status.key) {\n <mat-option [value]=\"status.key\">{{ status.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <div class=\"invoice-index-page__filter-actions\">\n <button mat-flat-button (click)=\"find()\">Apply filters</button>\n <button mat-stroked-button (click)=\"resetFilter()\">Reset</button>\n </div>\n </div>\n </section>\n\n <section class=\"invoice-index-page__list\">\n @if (loading) {\n @for (dummy of [0, 1, 2, 3]; track dummy) {\n <rolatech-invoice-item-skeleton></rolatech-invoice-item-skeleton>\n }\n } @else if (invoices().length > 0) {\n @for (item of invoices(); track item.id) {\n <rolatech-invoice-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [invoice]=\"item\"></rolatech-invoice-item>\n }\n } @else {\n <div class=\"invoice-index-page__empty\">\n <h3>No invoices yet</h3>\n <p>The invoices for this workspace will appear here once billing is created.</p>\n </div>\n }\n\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </section>\n</section>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { InvoiceService, PaymentService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceStatus } from '../../../interfaces';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { InvoiceLines } from '../../../components/invoice-lines/invoice-lines';\nimport { InvoiceSummary } from '../../../components/invoice-summary/invoice-summary';\nimport { InvoiceUser } from '../../../components/invoice-user/invoice-user';\nimport { InvoiceEdit } from '../../../components/invoice-edit/invoice-edit';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-agent-invoice-detail',\n imports: [\n CommonModule,\n RouterLink,\n MatButtonModule,\n MatIconModule,\n MatMenuModule,\n InvoiceSummary,\n InvoiceLines,\n InvoiceUser,\n PricePipe,\n ],\n templateUrl: './agent-invoice-detail.html',\n styleUrl: './agent-invoice-detail.scss',\n})\nexport class AgentInvoiceDetail extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n paymentService = inject(PaymentService);\n pdfUrl = '';\n readonly loading = signal<boolean>(true);\n readonly invoice = signal<Invoice | null>(null);\n status = InvoiceStatus;\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n collectionTitle: this.readRouteData('invoiceCollectionTitle', 'Invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Agent workspace'),\n };\n ngOnInit(): void {\n this.getInvoice();\n }\n getInvoice() {\n this.invoiceService.getInvoice(this.id).subscribe({\n next: (res) => {\n this.invoice.set(res.data);\n this.loading.set(false);\n this.pdfUrl = res.data.pdfUrl;\n },\n });\n }\n openPdf() {\n window.open(this.pdfUrl, '_blank');\n }\n edit() {\n const options = {\n title: 'Update invoice',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n data: {\n invoice: this.invoice(),\n },\n component: InvoiceEdit,\n };\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (res) {\n const data = {\n firstName: res.firstName,\n lastName: res.lastName,\n email: res.email,\n phone: res.phone,\n vatTotal: res.vatTotal,\n total: res.total,\n };\n this.invoiceService.updateInvoice(this.id, data).subscribe({\n next: (res: any) => {\n this.snackBarService.open('Invoice updated');\n },\n });\n }\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n\n statusToneClass(status: InvoiceStatus) {\n switch (status) {\n case InvoiceStatus.PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--paid';\n case InvoiceStatus.ISSUED:\n case InvoiceStatus.SENT:\n case InvoiceStatus.PARTIALLY_PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--issued';\n case InvoiceStatus.VOID:\n return 'invoice-detail-page__status invoice-detail-page__status--void';\n default:\n return 'invoice-detail-page__status invoice-detail-page__status--neutral';\n }\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<section class=\"invoice-detail-page\">\n @if (loading()) {\n <section class=\"invoice-detail-page__hero invoice-detail-page__hero--loading\">\n <div class=\"invoice-detail-page__hero-copy\">\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">Loading invoice...</h1>\n </div>\n </section>\n } @else if (!invoice()) {\n <section class=\"invoice-detail-page__panel\">\n <h2 class=\"invoice-detail-page__panel-title\">Invoice not found</h2>\n <p class=\"invoice-detail-page__panel-copy\">The requested invoice could not be loaded for this workspace.</p>\n </section>\n } @else if (invoice(); as invoice) {\n <section class=\"invoice-detail-page__hero\">\n <div class=\"invoice-detail-page__hero-copy\">\n <a class=\"invoice-detail-page__back\" [routerLink]=\"pageMeta.baseLink\">← {{ pageMeta.collectionTitle }}</a>\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">{{ invoice.invoiceNumber || invoice.id }}</h1>\n <p class=\"invoice-detail-page__description\">\n Invoice for {{ invoice.fullName || invoice.firstName + ' ' + invoice.lastName }} created\n {{ invoice.createdAt | date: 'mediumDate' }}.\n </p>\n </div>\n\n <div class=\"invoice-detail-page__hero-side\">\n <span [class]=\"statusToneClass(invoice.status)\">{{ status[invoice.status] }}</span>\n <div class=\"invoice-detail-page__total\">{{ invoice.total | price }}</div>\n <div class=\"invoice-detail-page__note\">\n @if (invoice.dueAt) {\n Due {{ invoice.dueAt | date: 'mediumDate' }}\n } @else {\n Payable on receipt\n }\n </div>\n\n <div class=\"invoice-detail-page__hero-actions\">\n @if (invoice.pdfUrl) {\n <button mat-stroked-button (click)=\"openPdf()\">Preview PDF</button>\n }\n <button mat-flat-button (click)=\"edit()\">Edit invoice</button>\n </div>\n </div>\n </section>\n\n <section class=\"invoice-detail-page__content\">\n <div class=\"invoice-detail-page__main\">\n <rolatech-invoice-user\n [firstName]=\"invoice.firstName\"\n [lastName]=\"invoice.lastName\"\n [email]=\"invoice.email\"\n [phone]=\"invoice.phone\"\n ></rolatech-invoice-user>\n\n @if (invoice.lines; as lines) {\n <rolatech-invoice-lines [lines]=\"lines\"></rolatech-invoice-lines>\n }\n </div>\n\n <div class=\"invoice-detail-page__side\">\n <rolatech-invoice-summary\n [tax]=\"invoice.vatTotal\"\n [credit]=\"invoice.holdingDepositApplied\"\n [subtotal]=\"invoice.subtotal\"\n [total]=\"invoice.total\"\n ></rolatech-invoice-summary>\n\n <article class=\"invoice-detail-page__panel\">\n <h2 class=\"invoice-detail-page__panel-title\">Invoice note</h2>\n <p class=\"invoice-detail-page__panel-copy\">{{ invoice.note || 'No note added for this invoice.' }}</p>\n </article>\n </div>\n </section>\n }\n</section>\n","import { Route } from '@angular/router';\nimport { AgentInvoiceIndex } from './agent-invoice-index/agent-invoice-index';\nimport { AgentInvoiceDetail } from './agent-invoice-detail/agent-invoice-detail';\n\nexport const agentInvoiceRoutes: Route[] = [\n {\n path: '',\n component: AgentInvoiceIndex,\n },\n {\n path: ':id',\n component: AgentInvoiceDetail,\n },\n];\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { finalize } from 'rxjs';\nimport { BillingProfileResponse, BillingProfileService, BillingProfileUpsertParam } from '@rolatech/angular-services';\n\n@Injectable()\nexport class BillingProfileFacade {\n private readonly billingProfileService = inject(BillingProfileService);\n\n readonly loading = signal(false);\n readonly saving = signal(false);\n readonly profile = signal<BillingProfileResponse | null>(null);\n readonly error = signal<string | null>(null);\n readonly saveMessage = signal<string | null>(null);\n\n readonly enabled = computed(() => this.profile()?.enabled ?? false);\n\n load(): void {\n this.loading.set(true);\n this.error.set(null);\n\n this.billingProfileService\n .getOrCreate()\n .pipe(finalize(() => this.loading.set(false)))\n .subscribe({\n next: (response) => {\n this.profile.set(response.data);\n },\n error: (error) => {\n this.error.set(error?.error?.message ?? 'Failed to load billing profile.');\n },\n });\n }\n\n save(body: BillingProfileUpsertParam, done?: (profile: BillingProfileResponse) => void): void {\n this.saving.set(true);\n this.error.set(null);\n this.saveMessage.set(null);\n\n this.billingProfileService\n .updateProfile(body)\n .pipe(finalize(() => this.saving.set(false)))\n .subscribe({\n next: (response) => {\n this.profile.set(response.data);\n this.saveMessage.set('Billing profile saved successfully.');\n done?.(response.data);\n },\n error: (error) => {\n this.error.set(error?.error?.message ?? 'Failed to save billing profile.');\n },\n });\n }\n\n setEnabled(enabled: boolean): void {\n this.saving.set(true);\n this.error.set(null);\n this.saveMessage.set(null);\n\n this.billingProfileService\n .patch({ enabled })\n .pipe(finalize(() => this.saving.set(false)))\n .subscribe({\n next: (response) => {\n this.profile.set(response.data);\n this.saveMessage.set(enabled ? 'Billing profile enabled.' : 'Billing profile disabled.');\n },\n error: (error) => {\n this.error.set(error?.error?.message ?? 'Failed to update billing profile status.');\n },\n });\n }\n}\n","import { FormBuilder, Validators } from '@angular/forms';\nimport { BillingProfileResponse } from '@rolatech/angular-services';\n\nexport function createBillingProfileForm(formBuilder: FormBuilder) {\n return formBuilder.nonNullable.group({\n displayName: [''],\n\n companyName: [''],\n companyWebsite: [''],\n companyRegistrationNo: [''],\n companyVatNo: [''],\n companyAddressLine: [''],\n companyEmail: ['', [Validators.email]],\n companyPhone: [''],\n\n bankInstitution: [''],\n bankAccountName: [''],\n bankSortCode: [''],\n bankAccountNo: [''],\n bankSwift: [''],\n bankIban: [''],\n bankPaymentRef: [''],\n\n invoiceFooter: [''],\n paymentInstructions: [''],\n logoUrl: [''],\n\n enabled: [true],\n });\n}\n\nexport function patchBillingProfileForm(\n form: ReturnType<typeof createBillingProfileForm>,\n value: BillingProfileResponse | null | undefined,\n): void {\n if (!value) {\n return;\n }\n\n form.patchValue({\n displayName: value.displayName ?? '',\n companyName: value.companyName ?? '',\n companyWebsite: value.companyWebsite ?? '',\n companyRegistrationNo: value.companyRegistrationNo ?? '',\n companyVatNo: value.companyVatNo ?? '',\n companyAddressLine: value.companyAddressLine ?? '',\n companyEmail: value.companyEmail ?? '',\n companyPhone: value.companyPhone ?? '',\n\n bankInstitution: value.bankInstitution ?? '',\n bankAccountName: value.bankAccountName ?? '',\n bankSortCode: value.bankSortCode ?? '',\n bankAccountNo: value.bankAccountNo ?? '',\n bankSwift: value.bankSwift ?? '',\n bankIban: value.bankIban ?? '',\n bankPaymentRef: value.bankPaymentRef ?? '',\n\n invoiceFooter: value.invoiceFooter ?? '',\n paymentInstructions: value.paymentInstructions ?? '',\n logoUrl: value.logoUrl ?? '',\n\n enabled: value.enabled ?? true,\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\nimport { BillingProfileFacade } from '../../../store/billing-profile.facade';\nimport { createBillingProfileForm, patchBillingProfileForm } from '../../../utils/billing-profile-form.util';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'rolatech-billing-profile-setting-page',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatSlideToggleModule,\n MatCardModule,\n ],\n templateUrl: './billing-profile-setting-page.html',\n styleUrl: './billing-profile-setting-page.scss',\n providers: [BillingProfileFacade],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BillingProfileSettingPage {\n private readonly formBuilder = inject(FormBuilder);\n readonly facade = inject(BillingProfileFacade);\n\n readonly form = createBillingProfileForm(this.formBuilder);\n\n readonly canSubmit = computed(() => !this.facade.loading() && !this.facade.saving());\n\n constructor() {\n effect(() => {\n const profile = this.facade.profile();\n patchBillingProfileForm(this.form, profile);\n });\n\n this.facade.load();\n }\n\n submit(): void {\n if (!this.canSubmit()) {\n return;\n }\n\n this.facade.save(this.form.getRawValue());\n }\n\n toggleEnabled(enabled: boolean): void {\n this.facade.setEnabled(enabled);\n }\n}\n","<section class=\"rt-platform-theme flex flex-col gap-6 bg-(--rt-base-background) p-6 text-(--rt-text-primary)\">\n <header class=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div class=\"min-w-0\">\n <div class=\"space-y-1\">\n <h1 class=\"text-2xl font-semibold tracking-tight\">Member Management</h1>\n <p class=\"text-sm text-muted-foreground\">\n Review organization members, invitation state, and current role assignments from one workspace.\n </p>\n </div>\n </div>\n </header>\n <section class=\"grid gap-4\">\n @if (facade.error()) {\n <div class=\"mb-4 rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\">{{ facade.error() }}</div>\n } @if (facade.saveMessage()) {\n <div class=\"mb-4 rounded-xl border border-green-200 bg-green-50 px-4 py-3 text-sm text-green-700\">\n {{ facade.saveMessage() }}\n </div>\n }\n\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\" class=\"space-y-6\">\n <mat-card class=\"rounded-2xl\">\n <div class=\"grid gap-4 p-4 md:grid-cols-2\">\n <div class=\"md:col-span-2 flex items-center justify-between\">\n <div>\n <div class=\"text-base font-medium\">Billing Profile Status</div>\n <div class=\"text-sm text-gray-500\">Enable this profile for invoice generation and payment instructions.</div>\n </div>\n\n <mat-slide-toggle formControlName=\"enabled\" (change)=\"toggleEnabled($event.checked)\"> Enabled </mat-slide-toggle>\n </div>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Display Name</mat-label>\n <input matInput formControlName=\"displayName\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Logo URL</mat-label>\n <input matInput formControlName=\"logoUrl\" />\n </mat-form-field>\n </div>\n </mat-card>\n\n <mat-card class=\"rounded-2xl\">\n <div class=\"p-4\">\n <h2 class=\"mb-4 text-lg font-medium\">Company Information</h2>\n\n <div class=\"grid gap-4 md:grid-cols-2\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Company Name</mat-label>\n <input matInput formControlName=\"companyName\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Website</mat-label>\n <input matInput formControlName=\"companyWebsite\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Registration No</mat-label>\n <input matInput formControlName=\"companyRegistrationNo\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>VAT No</mat-label>\n <input matInput formControlName=\"companyVatNo\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"md:col-span-2\">\n <mat-label>Address</mat-label>\n <textarea matInput rows=\"3\" formControlName=\"companyAddressLine\"></textarea>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Company Email</mat-label>\n <input matInput formControlName=\"companyEmail\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Company Phone</mat-label>\n <input matInput formControlName=\"companyPhone\" />\n </mat-form-field>\n </div>\n </div>\n </mat-card>\n\n <mat-card class=\"rounded-2xl\">\n <div class=\"p-4\">\n <h2 class=\"mb-4 text-lg font-medium\">Bank Information</h2>\n\n <div class=\"grid gap-4 md:grid-cols-2\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Bank Institution</mat-label>\n <input matInput formControlName=\"bankInstitution\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Account Name</mat-label>\n <input matInput formControlName=\"bankAccountName\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Sort Code</mat-label>\n <input matInput formControlName=\"bankSortCode\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Account No</mat-label>\n <input matInput formControlName=\"bankAccountNo\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>SWIFT</mat-label>\n <input matInput formControlName=\"bankSwift\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>IBAN</mat-label>\n <input matInput formControlName=\"bankIban\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"md:col-span-2\">\n <mat-label>Payment Reference</mat-label>\n <input matInput formControlName=\"bankPaymentRef\" />\n </mat-form-field>\n </div>\n </div>\n </mat-card>\n\n <mat-card class=\"rounded-2xl\">\n <div class=\"p-4\">\n <h2 class=\"mb-4 text-lg font-medium\">Invoice & Payment Content</h2>\n\n <div class=\"grid gap-4\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Invoice Footer</mat-label>\n <textarea matInput rows=\"4\" formControlName=\"invoiceFooter\"></textarea>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Payment Instructions</mat-label>\n <textarea matInput rows=\"5\" formControlName=\"paymentInstructions\"></textarea>\n </mat-form-field>\n </div>\n </div>\n </mat-card>\n\n <div class=\"flex justify-end\">\n <button mat-flat-button color=\"primary\" type=\"submit\" [disabled]=\"facade.saving() || facade.loading()\">\n {{ facade.saving() ? 'Saving...' : 'Save Billing Profile' }}\n </button>\n </div>\n </form>\n </section>\n</section>\n","import { Route } from '@angular/router';\nimport { BillingProfileSettingPage } from './billing-profile-setting-page/billing-profile-setting-page';\n\nexport const BILLING_PROFILE_ROUTES: Route[] = [\n {\n path: '',\n component: BillingProfileSettingPage,\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i1","i5","i6","i9","i2","finalize","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rolatech-angular-billing.mjs","sources":["../../../../packages/angular-billing/src/lib/pages/billing/billing.routes.ts","../../../../packages/angular-billing/src/lib/interfaces/invoice.ts","../../../../packages/angular-billing/src/lib/components/invoice-item/invoice-item.ts","../../../../packages/angular-billing/src/lib/components/invoice-item/invoice-item.html","../../../../packages/angular-billing/src/lib/components/invoice-manage-item/invoice-manage-item.ts","../../../../packages/angular-billing/src/lib/components/invoice-manage-item/invoice-manage-item.html","../../../../packages/angular-billing/src/lib/components/invoice-item-skeleton/invoice-item-skeleton.ts","../../../../packages/angular-billing/src/lib/components/invoice-item-skeleton/invoice-item-skeleton.html","../../../../packages/angular-billing/src/lib/pages/invoice/invoice-index/invoice-index.component.ts","../../../../packages/angular-billing/src/lib/pages/invoice/invoice-index/invoice-index.component.html","../../../../packages/angular-billing/src/lib/components/invoice-user/invoice-user.ts","../../../../packages/angular-billing/src/lib/components/invoice-user/invoice-user.html","../../../../packages/angular-billing/src/lib/components/invoice-lines/invoice-lines.ts","../../../../packages/angular-billing/src/lib/components/invoice-lines/invoice-lines.html","../../../../packages/angular-billing/src/lib/components/invoice-summary/invoice-summary.ts","../../../../packages/angular-billing/src/lib/components/invoice-summary/invoice-summary.html","../../../../packages/angular-billing/src/lib/components/invoice-user-skeleton/invoice-user-skeleton.ts","../../../../packages/angular-billing/src/lib/components/invoice-user-skeleton/invoice-user-skeleton.html","../../../../packages/angular-billing/src/lib/components/invoice-summary-skeleton/invoice-summary-skeleton.ts","../../../../packages/angular-billing/src/lib/components/invoice-summary-skeleton/invoice-summary-skeleton.html","../../../../packages/angular-billing/src/lib/components/invoice-lines-skeleton/invoice-lines-skeleton.ts","../../../../packages/angular-billing/src/lib/components/invoice-lines-skeleton/invoice-lines-skeleton.html","../../../../packages/angular-billing/src/lib/pages/invoice/invoice-detail/invoice-detail.component.ts","../../../../packages/angular-billing/src/lib/pages/invoice/invoice-detail/invoice-detail.component.html","../../../../packages/angular-billing/src/lib/pages/invoice/invoice.routes.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-index/invoice-manage-index.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-index/invoice-manage-index.html","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-create/invoice-manage-create.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-create/invoice-manage-create.html","../../../../packages/angular-billing/src/lib/components/invoice-edit/invoice-edit.ts","../../../../packages/angular-billing/src/lib/components/invoice-edit/invoice-edit.html","../../../../packages/angular-billing/src/lib/store/invoice.store.ts","../../../../packages/angular-billing/src/lib/components/invoice-line-property-selector/invoice-line-property-selector.ts","../../../../packages/angular-billing/src/lib/components/invoice-line-property-selector/invoice-line-property-selector.html","../../../../packages/angular-billing/src/lib/components/invoice-manage-line/invoice-manage-line.ts","../../../../packages/angular-billing/src/lib/components/invoice-manage-line/invoice-manage-line.html","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-detail/invoice-manage-detail.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-detail/invoice-manage-detail.html","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-download/invoice-manage-download.ts","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage-download/invoice-manage-download.html","../../../../packages/angular-billing/src/lib/pages/invoice-manage/invoice-manage.routes.ts","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice-index/agent-invoice-index.ts","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice-index/agent-invoice-index.html","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice-detail/agent-invoice-detail.ts","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice-detail/agent-invoice-detail.html","../../../../packages/angular-billing/src/lib/pages/agent-invoice/agent-invoice.routes.ts","../../../../packages/angular-billing/src/lib/store/billing-profile.facade.ts","../../../../packages/angular-billing/src/lib/utils/billing-profile-form.util.ts","../../../../packages/angular-billing/src/lib/pages/billing-profile/billing-profile-setting-page/billing-profile-setting-page.ts","../../../../packages/angular-billing/src/lib/pages/billing-profile/billing-profile-setting-page/billing-profile-setting-page.html","../../../../packages/angular-billing/src/lib/pages/billing-profile/billing-profile.routes.ts","../../../../packages/angular-billing/src/lib/pages/market-invoice/market-invoice-index/market-invoice-index.ts","../../../../packages/angular-billing/src/lib/pages/market-invoice/market-invoice-index/market-invoice-index.html","../../../../packages/angular-billing/src/lib/pages/market-invoice/market-invoice-detail/market-invoice-detail.ts","../../../../packages/angular-billing/src/lib/pages/market-invoice/market-invoice-detail/market-invoice-detail.html","../../../../packages/angular-billing/src/lib/pages/market-invoice/market-invoice.routes.ts","../../../../packages/angular-billing/src/rolatech-angular-billing.ts"],"sourcesContent":["import { Routes } from '@angular/router';\n\nexport const billingRoutes: Routes = [];\n","export interface Invoice {\n id: string;\n invoiceNumber: string;\n firstName: string;\n lastName: string;\n fullName: string;\n email: string;\n phone: string;\n taxAmount: number;\n discountAmount: number;\n currency: string;\n dueAt: string;\n paidAt: string;\n holdingDepositApplied: number;\n subtotal: number;\n gross: number;\n vatTotal: number;\n total: number;\n lines: InvoiceLine[];\n status: InvoiceStatus;\n type: InvoiceType;\n createdAt: string;\n updateAt: string;\n pdfUrl: string;\n note: string;\n vatMode: InvoiceVatMode;\n}\nexport enum InvoiceVatMode {\n EXCLUSIVE = 'EXCLUSIVE',\n INCLUSIVE = 'INCLUSIVE',\n}\nexport enum InvoiceLineType {\n PROPERTY_RENT = 'PROPERTY_RENT',\n PROPERTY_SALE = 'PROPERTY_SALE',\n HOLDING_DEPOSIT = 'HOLDING_DEPOSIT',\n SECURITY_DEPOSIT = 'SECURITY_DEPOSIT',\n DISCOUNT = 'DISCOUNT',\n FEE = 'FEE',\n ADJUSTMENT = 'ADJUSTMENT',\n CUSTOM = 'CUSTOM',\n}\nexport interface InvoiceLine {\n id?: string;\n code: string;\n title: string;\n description: string;\n imageUrl: string;\n amount: number;\n unitPrice: number;\n vatRate: number;\n vatAmount: number;\n lineTotal: number;\n quantity: number;\n currency: string;\n refId: string;\n type: InvoiceLineType;\n position: number;\n}\nexport enum InvoiceType {\n FIRST_PAYMENT = 'First Payment',\n RECURRING_RENT = 'Recurring',\n ADJUSTMENT = 'Adjustment',\n}\nexport enum InvoiceStatus {\n DRAFT = 'Draft',\n SENT = 'Sent',\n CREATED = 'Created',\n ISSUED = 'Issued',\n PARTIALLY_PAID = 'Partially paid',\n PAID = 'Paid',\n VOID = 'void',\n}\n/**\n * Minimal DTOs matching a typical backend (adjust to your API):\n */\nexport interface InvoiceLineCreateDto {\n description: string;\n quantity: number; // whole units\n unitPrice: number; // store in pence per your preference\n taxRate: number; // e.g. 0, 5, 20 (percent)\n}\n\nexport interface InvoiceCreateDto {\n customerName: string;\n customerEmail?: string;\n customerAddress?: string;\n currency: 'GBP' | 'USD' | 'EUR';\n issueDate: string; // YYYY-MM-DD\n dueDate?: string; // YYYY-MM-DD\n notes?: string;\n lines: InvoiceLineCreateDto[];\n}\n","import { Component, input, output } from '@angular/core';\nimport { Invoice, InvoiceStatus } from '../../interfaces';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { CommonModule, DatePipe } from '@angular/common';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-item',\n imports: [CommonModule, MatButtonModule, MatIcon, DatePipe, PricePipe],\n templateUrl: './invoice-item.html',\n styleUrl: './invoice-item.scss',\n})\nexport class InvoiceItem {\n invoice = input.required<Invoice>();\n status: any = InvoiceStatus;\n download = output();\n\n customerName() {\n return this.invoice().fullName || `${this.invoice().firstName} ${this.invoice().lastName}`.trim();\n }\n\n onDownload() {\n this.download.emit();\n }\n\n statusBadgeClass(status: InvoiceStatus): string {\n switch (status.toString()) {\n case 'CREATED':\n return 'invoice-item__status invoice-item__status--draft';\n case 'ISSUED':\n case 'SENT':\n case 'PARTIALLY_PAID':\n return 'invoice-item__status invoice-item__status--issued';\n case 'PAID':\n return 'invoice-item__status invoice-item__status--paid';\n case 'VOID':\n return 'invoice-item__status invoice-item__status--void';\n default:\n return 'invoice-item__status invoice-item__status--neutral';\n }\n }\n}\n","<article class=\"invoice-item\">\n <div class=\"invoice-item__top\">\n <div class=\"invoice-item__identity\">\n <span class=\"invoice-item__eyebrow\">Invoice</span>\n <h3 class=\"invoice-item__number\">{{ invoice().invoiceNumber || invoice().id }}</h3>\n <p class=\"invoice-item__customer\">{{ customerName() }}</p>\n </div>\n\n <div class=\"invoice-item__summary\">\n <span [ngClass]=\"statusBadgeClass(invoice().status)\">{{ status[invoice().status] }}</span>\n <strong class=\"invoice-item__total\">{{ invoice().total | price }}</strong>\n </div>\n </div>\n\n <div class=\"invoice-item__meta\">\n <div class=\"invoice-item__meta-card\">\n <span class=\"invoice-item__meta-label\">Created</span>\n <strong>{{ invoice().createdAt | date: 'dd/MM/yyyy':'Europe/London' }}</strong>\n </div>\n\n <div class=\"invoice-item__meta-card\">\n <span class=\"invoice-item__meta-label\">Due</span>\n <strong>\n @if (invoice().dueAt) {\n {{ invoice().dueAt | date: 'dd/MM/yyyy':'Europe/London' }}\n } @else {\n On receipt\n }\n </strong>\n </div>\n\n <div class=\"invoice-item__meta-card\">\n <span class=\"invoice-item__meta-label\">Type</span>\n <strong>{{ invoice().type }}</strong>\n </div>\n\n <button mat-stroked-button class=\"invoice-item__download\" (click)=\"onDownload(); $event.stopPropagation()\">\n <mat-icon>download</mat-icon>\n <span>Download</span>\n </button>\n </div>\n</article>\n","import { Component, input } from '@angular/core';\nimport { Invoice } from '../../interfaces/invoice';\n\n@Component({\n selector: 'rolatech-invoice-manage-item',\n imports: [],\n templateUrl: './invoice-manage-item.html',\n styleUrl: './invoice-manage-item.scss',\n})\nexport class InvoiceManageItem {\n invoice = input.required<Invoice>();\n}\n","<p>invoice-manage-item works!</p>\n<div>{{invoice().id}}</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-item-skeleton',\n imports: [Skeleton],\n templateUrl: './invoice-item-skeleton.html',\n styleUrl: './invoice-item-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceItemSkeleton {}\n","<div class=\"grid grid-cols-6 place-content-center h-16 p-3 gap-3\">\n <rolatech-skeleton class=\"col-span-1 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"col-start-3 col-span-2 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"col-start-6 col-span-1 h-4\"></rolatech-skeleton>\n</div>\n","import { Component, computed, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { KeyValuePipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { RouterModule } from '@angular/router';\nimport { BaseComponent, PageCollectionShellComponent } from '@rolatech/angular-components';\nimport { InvoiceItem } from '../../../components';\nimport { InvoiceService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceStatus, InvoiceType } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { InvoiceItemSkeleton } from '../../../components/invoice-item-skeleton/invoice-item-skeleton';\n\n@Component({\n selector: 'rolatech-invoice-index',\n imports: [\n RouterModule,\n InvoiceItem,\n MatButtonModule,\n MatIconModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n KeyValuePipe,\n MatPaginatorModule,\n InvoiceItemSkeleton,\n PageCollectionShellComponent,\n ],\n templateUrl: './invoice-index.component.html',\n styleUrl: './invoice-index.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceIndexComponent extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n filterOptions: any = {\n type: '',\n status: '',\n };\n loading = false;\n meta: any;\n invoiceType = InvoiceType;\n invoiceStatus = InvoiceStatus;\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Created',\n icon: 'category',\n status: 'created',\n },\n {\n name: 'Issued',\n icon: 'category',\n status: 'issued',\n },\n {\n name: 'Paid',\n icon: 'category',\n status: 'paid',\n },\n ];\n invoices = signal<Invoice[]>([]);\n select = 0;\n filter = false;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n pageIndex = signal(0);\n\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Billing workspace'),\n title: this.readRouteData('invoiceCollectionTitle', 'Invoices'),\n description: this.readRouteData(\n 'invoiceCollectionDescription',\n 'Track invoice status, total value, and due dates in one calm workspace.',\n ),\n };\n\n readonly stats = computed(() => {\n const invoices = this.invoices();\n return [\n { label: 'Invoices', value: this.length || invoices.length, hint: 'Every invoice in the current scope' },\n { label: 'Created', value: invoices.filter((item) => item.status === InvoiceStatus.CREATED).length, hint: 'Drafted and waiting to move forward' },\n { label: 'Issued', value: invoices.filter((item) => item.status === InvoiceStatus.ISSUED || item.status === InvoiceStatus.SENT).length, hint: 'Sent and awaiting payment' },\n { label: 'Paid', value: invoices.filter((item) => item.status === InvoiceStatus.PAID).length, hint: 'Successfully settled' },\n ];\n });\n\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n const type = p.get('type') || undefined;\n this.filterOptions = {\n type: type || '',\n status: status || '',\n };\n\n const filters: string[] = [];\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filters.push(`status:${status.toUpperCase()}`);\n } else {\n this.select = 0;\n }\n if (type) {\n filters.push(`type:${type}`);\n }\n return {\n page,\n filter: filters.join(','),\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.invoiceService.me(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.invoices.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.invoices.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n find() {\n this.router.navigate([], {\n queryParams: {\n type: this.filterOptions.type || null,\n status: this.filterOptions.status || null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n resetFilter() {\n this.filterOptions = {\n type: '',\n status: '',\n };\n this.router.navigate([], {\n queryParams: {\n type: null,\n status: null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n statusCompareFn(t1: any, t2: any) {\n return t1 === t2;\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<rolatech-page-collection-shell [eyebrow]=\"pageMeta.eyebrow\" [title]=\"pageMeta.title\" [subtitle]=\"pageMeta.description\">\n <div page-shell-header-meta class=\"invoice-index-page__stats\">\n @for (stat of stats(); track stat.label) {\n <article class=\"invoice-index-page__stat\">\n <span class=\"invoice-index-page__stat-value\">{{ stat.value }}</span>\n <span class=\"invoice-index-page__stat-label\">{{ stat.label }}</span>\n <span class=\"invoice-index-page__stat-hint\">{{ stat.hint }}</span>\n </article>\n }\n </div>\n\n <section class=\"invoice-index-page__filters\">\n <nav class=\"invoice-index-page__status-nav\" aria-label=\"Invoice status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"invoice-index-page__status-link\"\n [class.invoice-index-page__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <div class=\"invoice-index-page__filter-grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Type</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"filterOptions.type\">\n @for (type of invoiceType | keyvalue; track type.key) {\n <mat-option [value]=\"type.key\">{{ type.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Status</mat-label>\n <mat-select [compareWith]=\"statusCompareFn\" [(ngModel)]=\"filterOptions.status\">\n @for (status of invoiceStatus | keyvalue; track status.key) {\n <mat-option [value]=\"status.key\">{{ status.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <div class=\"invoice-index-page__filter-actions\">\n <button mat-flat-button (click)=\"find()\">Apply filters</button>\n <button mat-stroked-button (click)=\"resetFilter()\">Reset</button>\n </div>\n </div>\n </section>\n\n <section class=\"invoice-index-page__list\">\n @if (loading) {\n @for (dummy of [0, 1, 2, 3]; track dummy) {\n <rolatech-invoice-item-skeleton></rolatech-invoice-item-skeleton>\n }\n } @else if (invoices().length > 0) {\n @for (item of invoices(); track item.id) {\n <rolatech-invoice-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [invoice]=\"item\"></rolatech-invoice-item>\n }\n } @else {\n <div class=\"invoice-index-page__empty\">\n <h3>No invoices yet</h3>\n <p>The invoices for this workspace will appear here once billing is created.</p>\n </div>\n }\n\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </section>\n</rolatech-page-collection-shell>\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'rolatech-invoice-user',\n imports: [],\n templateUrl: './invoice-user.html',\n styleUrl: './invoice-user.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n id: 'rolatech-invoice-user',\n class: 'rolatech-invoice-user',\n },\n})\nexport class InvoiceUser {\n firstName = input.required<string>();\n lastName = input.required<string>();\n email = input.required<string>();\n phone = input.required<string>();\n}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <h2 class=\"text-sm font-semibold\">User</h2>\n <div class=\"text-sm\">\n <div class=\"font-medium\">{{ firstName() }}, {{ lastName() }}</div>\n <div class=\"font-medium\">{{ phone() }}</div>\n <div>{{ email() }}</div>\n </div>\n</div>\n","import { Component, ViewEncapsulation, input } from '@angular/core';\nimport { InvoiceLine } from '../../interfaces';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-lines',\n imports: [PricePipe],\n templateUrl: './invoice-lines.html',\n styleUrl: './invoice-lines.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceLines {\n lines = input<InvoiceLine[]>([]);\n add() {}\n}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <div class=\"flex justify-between\">\n <h2 class=\"text-sm font-semibold\">Invoice lines</h2>\n </div>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full text-sm border border-(--rt-border-color) rounded-lg\">\n <thead class=\"bg-(--rt-raised-background)\">\n <tr>\n <th class=\"px-3 py-2 text-left font-medium border-b border-(--rt-border-color)\">Title</th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-28\">Unit (£)</th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-20\">VAT %</th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-28\">VAT (£)</th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-32\">Total (£)</th>\n </tr>\n </thead>\n\n <tbody class=\"[&>tr:nth-child(even)]:bg-(--rt-raised-background)\">\n @if (lines().length > 0) { @for (line of lines(); track line.id) {\n <tr class=\"hover:bg-(--rt-raised-background) cursor-pointer\">\n <!-- Title -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color)\">\n <div class=\"font-medium\">{{ line.title }}</div>\n </td>\n\n <!-- Unit price -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n {{ line.unitPrice | price }}\n </td>\n\n <!-- VAT rate -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n {{ line.vatRate }}%\n </td>\n\n <!-- VAT amount -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n {{ line.vatAmount | price }}\n </td>\n\n <!-- Total -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right font-semibold text-(--rt-text-secondary)\">\n {{ line.lineTotal | price }}\n </td>\n </tr>\n } } @else {\n <tr>\n <td [attr.colspan]=\"6\" class=\"px-3 py-4 text-center text-(--rt-text-secondary) text-sm\">No invoice lines</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-summary',\n imports: [PricePipe],\n templateUrl: './invoice-summary.html',\n styleUrl: './invoice-summary.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n id: 'rolatech-invoice-summary',\n class: 'rolatech-invoice-summary',\n },\n})\nexport class InvoiceSummary {\n tax = input.required<number>();\n credit = input<number>(0);\n subtotal = input.required<number>();\n total = input.required<number>();\n}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <h2 class=\"text-sm font-semibold text-(--rt-text-secondary)\">Totals</h2>\n\n <dl class=\"space-y-2 text-sm\">\n <div class=\"flex justify-between\">\n <dt class=\"text-(--rt-text-secondary)\">Subtotal</dt>\n <dd class=\"font-medium\">{{ subtotal() | price }}</dd>\n </div>\n\n <div class=\"flex justify-between\">\n <dt class=\"text-(--rt-text-secondary)\">VAT</dt>\n <dd class=\"font-medium\">{{ tax() | price}}</dd>\n </div>\n\n @if (credit() > 0) {\n <div class=\"flex justify-between\">\n <dt class=\"text-(--rt-text-secondary)\">Less holding deposit</dt>\n <dd class=\"font-medium text-red-600\">−{{ credit() | price }}</dd>\n </div>\n }\n\n <div class=\"border-t border-dashed border-(--rt-border-color) my-2\"></div>\n\n <div class=\"flex justify-between items-center\">\n <dt class=\"text-(--rt-text-secondary) font-semibold\">Total</dt>\n <dd class=\"text-lg font-semibold\">{{ total() | price }}</dd>\n </div>\n </dl>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-user-skeleton',\n imports: [Skeleton],\n templateUrl: './invoice-user-skeleton.html',\n styleUrl: './invoice-user-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceUserSkeleton {}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <rolatech-skeleton class=\"w-12 h-6\"></rolatech-skeleton>\n <div class=\"flex flex-col gap-2\">\n <rolatech-skeleton class=\"w-28 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-32 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-36 h-4\"></rolatech-skeleton>\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-summary-skeleton',\n imports: [Skeleton],\n templateUrl: './invoice-summary-skeleton.html',\n styleUrl: './invoice-summary-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceSummarySkeleton {}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <rolatech-skeleton class=\"w-12 h-6\"></rolatech-skeleton>\n\n <dl class=\"space-y-2 text-sm\">\n <div class=\"flex justify-between\">\n <rolatech-skeleton class=\"w-28 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-11 h-4\"></rolatech-skeleton>\n </div>\n <div class=\"flex justify-between\">\n <rolatech-skeleton class=\"w-28 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-11 h-4\"></rolatech-skeleton>\n </div>\n <div class=\"flex justify-between\">\n <rolatech-skeleton class=\"w-32 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-11 h-4\"></rolatech-skeleton>\n </div>\n\n <div class=\"border-t border-dashed border-(--rt-border-color) my-2\"></div>\n\n <div class=\"flex justify-between\">\n <rolatech-skeleton class=\"w-11 h-4\"></rolatech-skeleton>\n <rolatech-skeleton class=\"w-28 h-4\"></rolatech-skeleton>\n </div>\n </dl>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Skeleton } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-lines-skeleton',\n imports: [Skeleton],\n templateUrl: './invoice-lines-skeleton.html',\n styleUrl: './invoice-lines-skeleton.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceLinesSkeleton {}\n","<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <rolatech-skeleton class=\"w-20 h-6\"></rolatech-skeleton>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full text-sm border border-(--rt-border-color) rounded-lg\">\n <thead class=\"bg-(--rt-raised-background)\">\n <tr>\n <th class=\"px-3 py-2 text-left font-medium border-b border-(--rt-border-color)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-center font-medium border-b border-(--rt-border-color) w-20\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-28\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-20\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-28\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n <th class=\"px-3 py-2 text-right font-medium border-b border-(--rt-border-color) w-32\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </th>\n </tr>\n </thead>\n\n <tbody class=\"[&>tr:nth-child(even)]:bg-(--rt-raised-background)\">\n @for (dummy of [0, 1, 2, 3]; track dummy) {\n <tr>\n <!-- Title -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color)\">\n <rolatech-skeleton class=\"h-6\"></rolatech-skeleton>\n </td>\n\n <!-- Qty -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-center text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n\n <!-- Unit price -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n\n <!-- VAT rate -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n <!-- VAT amount -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n\n <!-- Total -->\n <td class=\"px-3 py-2 border-t border-(--rt-border-color) text-right font-semibold text-(--rt-text-secondary)\">\n <rolatech-skeleton class=\"h-4\"></rolatech-skeleton>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, signal } from '@angular/core';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { RouterModule } from '@angular/router';\nimport { InvoiceService, PaymentService } from '@rolatech/angular-services';\nimport { switchMap } from 'rxjs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Invoice, InvoiceStatus } from '../../../interfaces';\nimport { InvoiceUser } from '../../../components/invoice-user/invoice-user';\nimport { InvoiceLines } from '../../../components/invoice-lines/invoice-lines';\nimport { InvoiceSummary } from '../../../components/invoice-summary/invoice-summary';\nimport { InvoiceUserSkeleton } from '../../../components/invoice-user-skeleton/invoice-user-skeleton';\nimport { InvoiceSummarySkeleton } from '../../../components/invoice-summary-skeleton/invoice-summary-skeleton';\nimport { InvoiceLinesSkeleton } from '../../../components/invoice-lines-skeleton/invoice-lines-skeleton';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-detail',\n imports: [\n CommonModule,\n RouterModule,\n MatButtonModule,\n MatIconModule,\n InvoiceUser,\n InvoiceLines,\n InvoiceSummary,\n InvoiceUserSkeleton,\n InvoiceSummarySkeleton,\n InvoiceLinesSkeleton,\n PricePipe,\n ],\n templateUrl: './invoice-detail.component.html',\n styleUrl: './invoice-detail.component.scss',\n})\nexport class InvoiceDetailComponent extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n paymentService = inject(PaymentService);\n invoice = signal<Invoice | null>(null);\n status = InvoiceStatus;\n paying = false;\n loading = signal<boolean>(true);\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n collectionTitle: this.readRouteData('invoiceCollectionTitle', 'Invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Billing workspace'),\n };\n\n ngOnInit(): void {\n this.route.params.subscribe((params) => {\n const id = params['id'];\n this.get(id);\n });\n this.route.queryParams.subscribe(async (params) => {\n const sessionId = params['session_id'];\n if (sessionId) {\n // this.invoiceService.checkOfferPaymentStatus(this.id, sessionId).subscribe({\n // next: (res) => {\n // if (res.status === 'paid') {\n // this.invoice.update((state) => {\n // if (!state) return state;\n // state.status = InvoiceStatus.PAID;\n // return state;\n // });\n // }\n // },\n // });\n }\n });\n }\n get(id: string) {\n this.loading.set(true);\n this.invoiceService.getInvoice(id).subscribe({\n next: (res: any) => {\n this.invoice.set(res.data);\n this.loading.set(false);\n },\n error: () => {\n this.loading.set(false);\n },\n });\n }\n pay() {\n this.paying = true;\n const data = {\n businessType: 'INVOICE',\n businessId: this.id,\n provider: 'STRIPE',\n method: 'STRIPE_CHECKOUT',\n };\n this.paymentService\n .createPaymentIntent(data)\n .pipe(\n switchMap((res: any) => {\n const intent = {\n intentId: res.data.id,\n provider: 'STRIPE',\n method: 'STRIPE_CHECKOUT',\n successUrl: window.location.href + '?session_id={CHECKOUT_SESSION_ID}',\n cancelUrl: window.location.href,\n };\n return this.paymentService.createPayment(intent);\n }),\n )\n .subscribe({\n next: (res) => {\n this.paying = false;\n const { checkoutUrl } = res.data;\n window.open(checkoutUrl, '_blank');\n },\n error: (error) => {\n this.paying = false;\n this.snackBarService.open(error.message);\n },\n });\n }\n\n statusToneClass(status: InvoiceStatus) {\n switch (status) {\n case InvoiceStatus.PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--paid';\n case InvoiceStatus.ISSUED:\n case InvoiceStatus.SENT:\n case InvoiceStatus.PARTIALLY_PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--issued';\n case InvoiceStatus.VOID:\n return 'invoice-detail-page__status invoice-detail-page__status--void';\n default:\n return 'invoice-detail-page__status invoice-detail-page__status--neutral';\n }\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<section class=\"invoice-detail-page\">\n @if (loading()) {\n <section class=\"invoice-detail-page__hero invoice-detail-page__hero--loading\">\n <div class=\"invoice-detail-page__hero-copy\">\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">Loading invoice...</h1>\n </div>\n </section>\n\n <section class=\"invoice-detail-page__content\">\n <div class=\"invoice-detail-page__main\">\n <rolatech-invoice-user-skeleton></rolatech-invoice-user-skeleton>\n <rolatech-invoice-lines-skeleton></rolatech-invoice-lines-skeleton>\n </div>\n <div class=\"invoice-detail-page__side\">\n <rolatech-invoice-summary-skeleton></rolatech-invoice-summary-skeleton>\n </div>\n </section>\n } @else if (invoice(); as invoice) {\n <section class=\"invoice-detail-page__hero\">\n <div class=\"invoice-detail-page__hero-copy\">\n <a class=\"invoice-detail-page__back\" [routerLink]=\"pageMeta.baseLink\">← {{ pageMeta.collectionTitle }}</a>\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">{{ invoice.invoiceNumber || invoice.id }}</h1>\n <p class=\"invoice-detail-page__description\">\n Invoice for {{ invoice.fullName || invoice.firstName + ' ' + invoice.lastName }} created\n {{ invoice.createdAt | date: 'mediumDate' }}.\n </p>\n </div>\n\n <div class=\"invoice-detail-page__hero-side\">\n <span [class]=\"statusToneClass(invoice.status)\">{{ status[invoice.status] }}</span>\n <div class=\"invoice-detail-page__total\">{{ invoice.total | price }}</div>\n <div class=\"invoice-detail-page__note\">\n @if (invoice.dueAt) {\n Due {{ invoice.dueAt | date: 'mediumDate' }}\n } @else {\n Payable on receipt\n }\n </div>\n\n @if (invoice.status.toString() === 'ISSUED' || invoice.status.toString() === 'SENT') {\n <button mat-flat-button [disabled]=\"paying\" class=\"invoice-detail-page__cta\" (click)=\"pay()\">\n {{ paying ? 'Processing payment...' : 'Pay invoice' }}\n </button>\n }\n </div>\n </section>\n\n <section class=\"invoice-detail-page__content\">\n <div class=\"invoice-detail-page__main\">\n <rolatech-invoice-user\n [firstName]=\"invoice.firstName\"\n [lastName]=\"invoice.lastName\"\n [email]=\"invoice.email\"\n [phone]=\"invoice.phone\"\n ></rolatech-invoice-user>\n\n @if (invoice.lines; as lines) {\n <rolatech-invoice-lines [lines]=\"lines\"></rolatech-invoice-lines>\n }\n </div>\n\n <div class=\"invoice-detail-page__side\">\n <rolatech-invoice-summary\n [tax]=\"invoice.vatTotal\"\n [credit]=\"invoice.holdingDepositApplied\"\n [subtotal]=\"invoice.subtotal\"\n [total]=\"invoice.total\"\n ></rolatech-invoice-summary>\n\n <article class=\"invoice-detail-page__panel\">\n <h2 class=\"invoice-detail-page__panel-title\">Invoice note</h2>\n <p class=\"invoice-detail-page__panel-copy\">{{ invoice.note || 'No note added for this invoice.' }}</p>\n\n @if (invoice.status.toString() === 'CREATED' || invoice.status.toString() === 'PAID') {\n <div class=\"invoice-detail-page__panel-row\">\n <span>Payment method</span>\n <strong>Stripe</strong>\n </div>\n }\n </article>\n </div>\n </section>\n }\n</section>\n","import { Routes } from '@angular/router';\nimport { InvoiceIndexComponent } from './invoice-index/invoice-index.component';\nimport { InvoiceDetailComponent } from './invoice-detail/invoice-detail.component';\n\nexport const invoiceRoutes: Routes = [\n {\n path: '',\n component: InvoiceIndexComponent,\n },\n {\n path: ':id',\n component: InvoiceDetailComponent,\n },\n];\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, inject, OnInit, signal } from '@angular/core';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\nimport { BaseComponent, TabComponent, TabsComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { EnumApiClient, InvoiceService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceStatus } from '../../../interfaces';\nimport { distinctUntilChanged, finalize, map, switchMap } from 'rxjs';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-invoice-manage-index',\n imports: [CommonModule, RouterLink, ToolbarComponent, TabsComponent, TabComponent, MatPaginatorModule, PricePipe],\n templateUrl: './invoice-manage-index.html',\n styleUrl: './invoice-manage-index.scss',\n})\nexport class InvoiceManageIndex extends BaseComponent implements OnInit {\n private invoiceService = inject(InvoiceService);\n private enumApi = inject(EnumApiClient);\n readonly invoiceTypeMap = signal<Record<string, string>>({});\n select = 0;\n loading = false;\n invoices = signal<Invoice[]>([]);\n meta: any;\n length = 100;\n pageSize = 15;\n pageIndex = signal(0);\n pageSizeOptions: number[] = [5, 10, 25, 100];\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Created',\n icon: 'category',\n status: 'created',\n },\n {\n name: 'Issued',\n icon: 'category',\n status: 'issued',\n },\n {\n name: 'Paid',\n icon: 'category',\n status: 'paid',\n },\n ];\n ngOnInit(): void {\n this.getOptions('billing', 'InvoiceType');\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n\n let filter = '';\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filter = `status:${status?.toUpperCase()}`;\n }\n return {\n page,\n filter,\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.invoiceService.findByManager(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.invoices.set(res.data ?? []);\n this.meta = res.meta;\n this.length = res.meta?.pagination?.count ?? res.data?.length ?? 0;\n },\n error: () => {\n this.invoices.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n getOptions(resource: any, enumName: string) {\n this.enumApi.getOptions(resource, enumName).subscribe({\n next: (res) => {\n const map = res.reduce<Record<string, string>>((acc, cur) => {\n acc[cur.value] = cur.label;\n return acc;\n }, {});\n\n this.invoiceTypeMap.set(map);\n },\n error: () => {},\n });\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n statusBadgeClass(status: InvoiceStatus): string {\n switch (status.toString()) {\n case 'CREATED':\n return 'bg-yellow-100 text-yellow-800';\n case 'ISSUED':\n return 'bg-blue-100 text-blue-800';\n case 'PAID':\n return 'bg-emerald-100 text-emerald-800';\n case 'VOID':\n return 'bg-red-100 text-red-800';\n default:\n return 'bg-gray-100 text-gray-700';\n }\n }\n}\n","<rolatech-toolbar title=\"Invoices\">\n <div class=\"flex items-center gap-2\"></div>\n</rolatech-toolbar>\n<rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab class=\"cursor-pointer\" [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab class=\"cursor-pointer\" [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n</rolatech-tabs>\n<div class=\"p-3 overflow-x-auto\">\n <table class=\"min-w-full\">\n <thead class=\"bg-(--rt-raised-background)\">\n <tr>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">#ID</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Status</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Email</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Profile</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Type</th>\n <th class=\"p-3 border-b border-(--rt-border-color) text-left\">Total</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoices(); track $index) {\n <!-- <rolatech-invoice-manage-item [invoice]=\"item\"></rolatech-invoice-manage-item> -->\n <tr class=\"hover:bg-(--rt-raised-background) hover:cursor-pointer cursor-pointer\" [routerLink]=\"['./', item.id]\">\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{item.id}}</td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">\n <span\n class=\"inline-flex items-center rounded-full px-3 py-1 text-xs font-medium\"\n [ngClass]=\"statusBadgeClass(item.status)\"\n >{{item.status}}</span\n >\n </td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{item.email}}</td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{item.fullName}}</td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{invoiceTypeMap()[item.type] || item.type}}</td>\n <td class=\"p-3 border-b border-(--rt-border-color)\">{{item.total | price}}</td>\n </tr>\n }\n </tbody>\n </table>\n</div>\n<!-- <div>\n <table class=\"min-w-full text-sm\">\n <thead class=\"border-b border-(--rt-border-color) bg-(--rt-raised-background)\">\n <tr>\n <th class=\"py-2 text-left font-medium text-gray-600\">#ID</th>\n <th class=\"py-2 text-right font-medium text-gray-600\">Status</th>\n <th class=\"py-2 text-right font-medium text-gray-600\">Email</th>\n <th class=\"py-2 text-right font-medium text-gray-600\">Profile</th>\n <th class=\"py-2 text-right font-medium text-gray-600\">Total</th>\n </tr>\n </thead>\n\n <tbody>\n @for (item of invoices(); track $index) {\n <tr class=\"border-b border-(--rt-border-color) hover:bg-(--rt-raised-background) hover:cursor-pointer\">\n <td class=\"py-2\">{{item.id}}</td>\n <td class=\"py-2 text-right\">{{item.status}}</td>\n <td class=\"py-2 text-right\">{{item.email}}</td>\n <td class=\"py-2 text-right\">{{item.firstName}}, {{item.lastName}}</td>\n <td class=\"py-2 text-right font-semibold\">{{item.total | price}}</td>\n </tr>\n }\n </tbody>\n </table>\n</div> -->\n<mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n>\n</mat-paginator>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, signal } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { InvoiceService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceCreateDto, InvoiceLineCreateDto } from '../../../interfaces';\nimport { ApiResponse } from '@rolatech/angular-common';\nimport { ToolbarComponent, EnumSelect } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-invoice-manage-create',\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDividerModule,\n MatCardModule,\n ToolbarComponent,\n EnumSelect,\n ],\n templateUrl: './invoice-manage-create.html',\n styleUrl: './invoice-manage-create.scss',\n})\nexport class InvoiceManageCreate {\n private service = inject(InvoiceService);\n\n // Template-driven model\n invoice: {\n customerName: string;\n customerEmail?: string;\n customerAddress?: string;\n currency: 'GBP' | 'USD' | 'EUR';\n issueDate: string;\n dueDate?: string;\n notes?: string;\n lines: Array<{ type: string; description: string; quantity: number; unitPrice: number; taxRate: number }>;\n } = {\n customerName: '',\n customerEmail: '',\n customerAddress: '',\n currency: 'GBP',\n issueDate: this.todayIso(),\n dueDate: '',\n notes: '',\n lines: [{ type: '', description: '', quantity: 1, unitPrice: 0, taxRate: 0 }],\n };\n\n lastResponse: ApiResponse<Invoice> | null = null;\n selectedLineType;\n addLine() {\n this.invoice.lines.push({ type: '', description: '', quantity: 1, unitPrice: 0, taxRate: 0 });\n }\n removeLine(i: number) {\n this.invoice.lines.splice(i, 1);\n }\n\n subtotalPence(): number {\n return this.invoice.lines.reduce((sum, l) => sum + Math.round((l.unitPrice || 0) * 100) * (l.quantity || 0), 0);\n }\n taxPence(): number {\n return this.invoice.lines.reduce((t, l) => {\n const unitPence = Math.round((l.unitPrice || 0) * 100);\n const rate = (l.taxRate || 0) / 100;\n return t + Math.round(unitPence * (l.quantity || 0) * rate);\n }, 0);\n }\n totalPence(): number {\n return this.subtotalPence() + this.taxPence();\n }\n\n subtotalMajor(): number {\n return this.penceToMajor(this.subtotalPence());\n }\n taxMajor(): number {\n return this.penceToMajor(this.taxPence());\n }\n totalMajor(): number {\n return this.penceToMajor(this.totalPence());\n }\n\n save(form: any) {\n if (!form.form.valid || this.invoice.lines.length === 0) return;\n\n const dto: InvoiceCreateDto = {\n customerName: this.invoice.customerName,\n customerEmail: this.invoice.customerEmail || undefined,\n customerAddress: this.invoice.customerAddress || undefined,\n currency: this.invoice.currency,\n issueDate: this.invoice.issueDate,\n dueDate: this.invoice.dueDate || undefined,\n notes: this.invoice.notes || undefined,\n lines: this.invoice.lines.map((l) => ({\n description: l.description,\n quantity: Number(l.quantity || 0),\n unitPrice: Math.round(Number(l.unitPrice || 0)),\n taxRate: Number(l.taxRate || 0),\n })),\n };\n\n this.service.create(dto).subscribe({\n next: (res: any) => {\n this.lastResponse = res;\n },\n error: (err) => {\n alert(err?.message || 'Failed to create invoice');\n },\n });\n }\n\n resetForm() {\n this.invoice = {\n customerName: '',\n customerEmail: '',\n customerAddress: '',\n currency: 'GBP',\n issueDate: this.todayIso(),\n dueDate: '',\n notes: '',\n lines: [{ type: '', description: '', quantity: 1, unitPrice: 0, taxRate: 0 }],\n };\n this.lastResponse = null;\n }\n\n penceToMajor(pence: number) {\n return Math.round(pence) / 100;\n }\n private todayIso() {\n return new Date().toISOString().slice(0, 10);\n }\n}\n","<rolatech-toolbar title=\"Create Invoice\">\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"save(invoiceForm)\"\n [disabled]=\"!invoiceForm.form.valid || invoice.lines.length === 0\"\n >\n Save\n </button>\n</rolatech-toolbar>\n<div class=\"p-4 space-y-6\">\n <form #invoiceForm=\"ngForm\" novalidate>\n <mat-card appearance=\"outlined\" class=\"p-4\">\n <div class=\"grid lg:grid-cols-2 gap-4\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Customer name</mat-label>\n <input matInput name=\"customerName\" [(ngModel)]=\"invoice.customerName\" required />\n @if (invoiceForm.submitted && !invoice.customerName) {<mat-error>Name is required</mat-error>}\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Customer email</mat-label>\n <input matInput type=\"email\" name=\"customerEmail\" [(ngModel)]=\"invoice.customerEmail\" #email=\"ngModel\" email />\n @if (email.invalid && (email.dirty || email.touched)) {<mat-error>Invalid email</mat-error>}\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\" class=\"lg:col-span-2\">\n <mat-label>Customer address</mat-label>\n <textarea matInput rows=\"2\" name=\"customerAddress\" [(ngModel)]=\"invoice.customerAddress\"></textarea>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Currency</mat-label>\n <mat-select name=\"currency\" [(ngModel)]=\"invoice.currency\" required>\n <mat-option value=\"GBP\">GBP</mat-option>\n <mat-option value=\"USD\">USD</mat-option>\n <mat-option value=\"EUR\">EUR</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Issue date</mat-label>\n <input matInput type=\"date\" name=\"issueDate\" [(ngModel)]=\"invoice.issueDate\" required />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Due date</mat-label>\n <input matInput type=\"date\" name=\"dueDate\" [(ngModel)]=\"invoice.dueDate\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\" class=\"lg:col-span-2\">\n <mat-label>Notes</mat-label>\n <textarea\n matInput\n rows=\"2\"\n name=\"notes\"\n [(ngModel)]=\"invoice.notes\"\n placeholder=\"Optional notes shown on the invoice\"\n ></textarea>\n </mat-form-field>\n </div>\n </mat-card>\n\n <mat-card appearance=\"outlined\" class=\"p-4 space-y-4 mt-4\">\n <div class=\"flex items-center justify-between\">\n <h2 class=\"text-xl font-medium\">Line items</h2>\n <button mat-stroked-button type=\"button\" (click)=\"addLine()\">\n <mat-icon>add</mat-icon>\n Add line\n </button>\n </div>\n\n <div class=\"hidden lg:grid grid-cols-12 gap-2 text-sm font-medium px-2\">\n <div class=\"col-span-3\">Type</div>\n <div class=\"col-span-3\">Description</div>\n <div class=\"col-span-1 text-right\">Qty</div>\n <div class=\"col-span-2 text-right\">Unit Price</div>\n <div class=\"col-span-2 text-right\">Tax %</div>\n <div class=\"col-span-1\"></div>\n </div>\n\n <div class=\"space-y-3\">\n @for ( line of invoice.lines; track line; let i = $index) {\n <div class=\"grid grid-cols-1 lg:grid-cols-12 gap-2 items-start\">\n <rolatech-enum-select\n class=\"lg:col-span-3\"\n [resource]=\"'billing'\"\n [enumName]=\"'InvoiceLineType'\"\n [label]=\"'Line type'\"\n [placeholder]=\"'Select…'\"\n [(value)]=\"line.type\"\n ></rolatech-enum-select>\n <mat-form-field class=\"lg:col-span-3\" appearance=\"fill\">\n <mat-label>Description</mat-label>\n <input\n matInput\n [name]=\"'desc'+i\"\n [(ngModel)]=\"line.description\"\n required\n placeholder=\"e.g. Photo editing package\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"lg:col-span-1\" appearance=\"fill\">\n <mat-label>Quantity</mat-label>\n <input matInput type=\"number\" min=\"1\" step=\"1\" [name]=\"'qty'+i\" [(ngModel)]=\"line.quantity\" required />\n </mat-form-field>\n\n <mat-form-field class=\"lg:col-span-2\" appearance=\"fill\">\n <mat-label>Unit Price</mat-label>\n <input matInput type=\"number\" min=\"0\" step=\"0.01\" [name]=\"'unit'+i\" [(ngModel)]=\"line.unitPrice\" required />\n <mat-hint>e.g. 99.99</mat-hint>\n </mat-form-field>\n\n <mat-form-field class=\"lg:col-span-2\" appearance=\"fill\">\n <mat-label>Tax %</mat-label>\n <input matInput type=\"number\" min=\"0\" step=\"0.01\" [name]=\"'tax'+i\" [(ngModel)]=\"line.taxRate\" />\n </mat-form-field>\n\n <div class=\"lg:col-span-1 flex items-center justify-end\">\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"removeLine(i)\" aria-label=\"Remove line\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n <mat-divider></mat-divider>\n }\n </div>\n\n <div class=\"flex flex-col items-end space-y-1\">\n <div class=\"text-sm\">\n Subtotal: <span class=\"font-medium\">{{ subtotalMajor() | number:'1.2-2' }} {{ invoice.currency }}</span>\n </div>\n <div class=\"text-sm\">\n Tax: <span class=\"font-medium\">{{ taxMajor() | number:'1.2-2' }} {{ invoice.currency }}</span>\n </div>\n <div class=\"text-lg font-semibold\">Total: {{ totalMajor() | number:'1.2-2' }} {{ invoice.currency }}</div>\n </div>\n </mat-card>\n </form>\n\n @if (lastResponse) {\n <mat-card appearance=\"outlined\" class=\"p-4 flex items-center justify-between\">\n <div>\n <div class=\"font-medium\">Created invoice #{{ lastResponse.data.id }}</div>\n <div class=\"text-sm opacity-70\">\n Total: {{ penceToMajor(lastResponse.data.total) | number:'1.2-2' }} {{ invoice.currency }}\n </div>\n </div>\n <div class=\"space-x-2\">\n <button mat-stroked-button (click)=\"resetForm()\">Create another</button>\n <button mat-flat-button color=\"primary\">Download PDF</button>\n </div>\n </mat-card>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, DoCheck, model, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { BaseComponent } from '@rolatech/angular-components';\nexport const MY_FORMATS = {\n parse: {\n dateInput: 'YYYY-MM-DD',\n },\n display: {\n dateInput: 'YYYY-MM-DD',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'YYYY-MM-DD',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n\n@Component({\n selector: 'rolatech-invoice-edit',\n imports: [CommonModule, FormsModule, MatInputModule, MatDatepickerModule, MatSelectModule, MatOptionModule],\n templateUrl: './invoice-edit.html',\n styleUrl: './invoice-edit.scss',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\nexport class InvoiceEdit extends BaseComponent implements DoCheck {\n minDate = new Date();\n invoice = model.required<any>();\n output = output<any>();\n ngDoCheck(): void {\n this.output.emit(this.invoice());\n }\n}\n","<div class=\"flex flex-col gap-2\">\n <div class=\"flex justify-between gap-3\">\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Firstname</mat-label>\n <input matInput [(ngModel)]=\"invoice().firstName\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Lastname</mat-label>\n <input matInput [(ngModel)]=\"invoice().lastName\" />\n </mat-form-field>\n </div>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Email</mat-label>\n <input matInput [(ngModel)]=\"invoice().email\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Phone</mat-label>\n <input matInput [(ngModel)]=\"invoice().phone\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Discount total</mat-label>\n <input matInput [(ngModel)]=\"invoice().discountAmount\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label>Total</mat-label>\n <input matInput [(ngModel)]=\"invoice().total\" />\n </mat-form-field>\n <!-- <mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-label i18n>Move-in date</mat-label>\n <input\n matInput\n placeholder=\"Move-in date\"\n [min]=\"minDate\"\n [matDatepicker]=\"startDatePicker\"\n (focus)=\"startDatePicker.open()\"\n [(ngModel)]=\"invoice().startDate\"\n (dateInput)=\"invoice().startDate = $event.value.format('YYYY-MM-DD')\"\n required\n readonly\n />\n <mat-datepicker-toggle matIconPrefix [for]=\"startDatePicker\"></mat-datepicker-toggle>\n <mat-datepicker #startDatePicker></mat-datepicker>\n </mat-form-field> -->\n</div>\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { InvoiceLineService, InvoiceService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceLine, InvoiceLineType, InvoiceVatMode } from '../interfaces';\n\ntype SaveState = 'idle' | 'loading' | 'saving' | 'error';\n\n@Injectable({ providedIn: 'root' })\nexport class InvoiceStore {\n private readonly api = inject(InvoiceService);\n private readonly _lines = signal<InvoiceLine[]>([]);\n\n // --- state ---\n readonly invoiceId = signal<string | null>(null);\n readonly invoice = signal<Invoice | null>(null);\n\n /** last server-saved snapshot */\n private readonly pristine = signal<Invoice | null>(null);\n readonly status = signal<SaveState>('idle');\n readonly error = signal<string | null>(null);\n\n // editor UI state\n readonly editorOpen = signal(false);\n readonly editingLineId = signal<string | null>(null);\n\n // --- derived ---\n readonly lines = computed(() => this.invoice()?.lines ?? []);\n readonly currency = computed(() => this.invoice()?.currency ?? 'GBP');\n readonly vatMode = computed<InvoiceVatMode>(() => this.invoice()?.vatMode ?? InvoiceVatMode.EXCLUSIVE);\n\n readonly totals = computed(() => {\n const inv = this.invoice();\n if (!inv) {\n return { subtotal: 0, vatTotal: 0, total: 0 };\n }\n\n const lines = inv.lines ?? [];\n const subtotal = lines.reduce((s, l) => s + (l.amount ?? 0), 0);\n const vatTotal = lines.reduce((s, l) => s + (l.vatAmount ?? 0), 0);\n const total = lines.reduce((s, l) => s + (l.lineTotal ?? 0), 0);\n\n return { subtotal, vatTotal, total };\n });\n\n /** 🔴 DIRTY FLAG */\n readonly dirty = computed(() => {\n const a = this.invoice();\n const b = this.pristine();\n if (!a || !b) return false;\n return JSON.stringify(a) !== JSON.stringify(b);\n });\n\n // --- API: load / refresh ---\n load(id: string) {\n this.invoiceId.set(id);\n this.status.set('loading');\n this.error.set(null);\n\n // ✅ Adapt to your actual API signature:\n // e.g. this.api.get(id) or this.api.getInvoice(id)\n this.api\n .getInvoice(id)\n .pipe(finalize(() => this.status.set('idle')))\n .subscribe({\n next: (inv: any) => {\n console.log(inv);\n const normalized = this.normalizeInvoice(inv.data);\n this.invoice.set(normalized);\n this.pristine.set(structuredClone(normalized));\n },\n error: (e: any) => {\n this.status.set('error');\n this.error.set(this.errMsg(e));\n },\n });\n }\n\n refresh() {\n const id = this.invoiceId();\n if (!id) return;\n this.load(id);\n }\n\n // --- API: save ---\n saveInvoice() {\n const id = this.invoiceId();\n const inv = this.invoice();\n if (!id || !inv) return;\n\n this.status.set('saving');\n this.error.set(null);\n\n // ✅ Adapt: this.api.update(id, dto)\n this.api\n .update(id, inv)\n .pipe(finalize(() => this.status.set('idle')))\n .subscribe({\n next: (saved: Invoice) => this.invoice.set(this.normalizeInvoice(saved)),\n error: (e: any) => {\n this.status.set('error');\n this.error.set(this.errMsg(e));\n },\n });\n }\n\n saveLines() {\n const id = this.invoiceId();\n const inv = this.invoice();\n if (!id || !inv) return;\n\n this.status.set('saving');\n this.error.set(null);\n\n const payload = (inv.lines ?? []).map((l) => this.toLinePayload(l));\n\n // ✅ Adapt: this.api.updateLines(id, payload)\n // If your backend updates invoice lines via PATCH /invoices/{id}/lines\n this.api\n .updateLines(id, payload)\n .pipe(finalize(() => this.status.set('idle')))\n .subscribe({\n next: (saved) => {\n const normalized = this.normalizeInvoice(saved.data);\n this.invoice.set(normalized);\n this.pristine.set(structuredClone(normalized));\n },\n error: (e: any) => {\n this.status.set('error');\n this.error.set(this.errMsg(e));\n },\n });\n }\n\n // ─────────────────────────────────────────────\n // Editor lifecycle\n // ─────────────────────────────────────────────\n openLineEditor(lineId?: string) {\n this.editorOpen.set(true);\n this.editingLineId.set(lineId ?? null);\n }\n\n closeLineEditor() {\n this.editorOpen.set(false);\n this.editingLineId.set(null);\n }\n\n getLineById(lineId: string): InvoiceLine | null {\n return this.lines().find((l) => l.id === lineId) ?? null;\n }\n\n // ─────────────────────────────────────────────\n // Line operations (ALL mark dirty automatically)\n // ─────────────────────────────────────────────\n addLineAndEdit() {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n const newLine = this.recalcLine(this.createEmptyLine(inv.currency), inv.vatMode);\n queueMicrotask(() => this.openLineEditor(newLine.id));\n return { ...inv, lines: [...inv.lines, newLine] };\n });\n }\n\n updateLineById(lineId: string, patch: Partial<InvoiceLine>) {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n\n const mode = inv.vatMode;\n const lines = (inv.lines ?? []).map((l) => {\n if (l.id !== lineId) return l;\n const merged = { ...l, ...patch };\n return this.recalcLine(merged, mode);\n });\n\n return { ...inv, lines };\n });\n }\n\n removeLineById(lineId: string) {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n if (this.editingLineId() === lineId) this.closeLineEditor();\n return { ...inv, lines: inv.lines.filter((l) => l.id !== lineId) };\n });\n }\n // If vatMode changes, recalc all lines\n setVatMode(mode: InvoiceVatMode) {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n const lines = (inv.lines ?? []).map((l) => this.recalcLine(l, mode));\n return { ...inv, vatMode: mode, lines };\n });\n }\n reorderLines(fromIndex: number, toIndex: number) {\n if (fromIndex === toIndex) return;\n\n this.invoice.update((inv) => {\n if (!inv) return inv;\n\n const lines = [...(inv.lines ?? [])];\n const [moved] = lines.splice(fromIndex, 1);\n lines.splice(toIndex, 0, moved);\n\n // re-index positions (1..n)\n const rePos = lines.map((l, idx) => ({ ...l, position: idx + 1 }));\n\n return { ...inv, lines: rePos };\n });\n }\n setLines(lines: InvoiceLine[]) {\n this._lines.set(lines);\n }\n\n updateLine(id: string, patch: Partial<InvoiceLine>) {\n this._lines.update((lines) => lines.map((l) => (l.id === id ? { ...l, ...patch } : l)));\n }\n\n // --- helpers: normalize / compute ---\n private normalizeInvoice(inv: Invoice): Invoice {\n const mode = inv.vatMode ?? InvoiceVatMode.EXCLUSIVE;\n\n const sorted = [...(inv.lines ?? [])]\n .sort((a, b) => (a.position ?? 0) - (b.position ?? 0))\n .map((l, idx) => this.recalcLine({ ...l, position: idx + 1 }, mode));\n\n return { ...inv, lines: sorted };\n }\n\n private recalcLine(line: InvoiceLine, mode: InvoiceVatMode): InvoiceLine {\n const qty = this.num(line.quantity, 1);\n const unit = this.num(line.unitPrice, 0);\n const rate = this.num(line.vatRate, 0);\n\n const grossUnit = unit;\n const netUnit = mode === InvoiceVatMode.INCLUSIVE ? grossUnit / (1 + rate / 100) : grossUnit;\n\n const net = netUnit * qty;\n const vat = net * (rate / 100);\n const total = mode === InvoiceVatMode.INCLUSIVE ? grossUnit * qty : net + vat;\n\n return {\n ...line,\n quantity: qty,\n unitPrice: unit,\n vatRate: rate,\n amount: this.round2(net),\n vatAmount: this.round2(mode === InvoiceVatMode.INCLUSIVE ? total - net : vat),\n lineTotal: this.round2(total),\n };\n }\n\n private createEmptyLine(currency: string): InvoiceLine {\n return {\n id: this.newId(),\n code: '',\n title: 'New item',\n description: '',\n imageUrl: '',\n amount: 0,\n unitPrice: 0,\n vatRate: 0,\n vatAmount: 0,\n lineTotal: 0,\n quantity: 1,\n currency,\n refId: '',\n type: InvoiceLineType.CUSTOM,\n position: 0,\n };\n }\n\n private toLinePayload(l: InvoiceLine) {\n return {\n id: l.id,\n position: l.position, // ✅ persist order\n type: l.type,\n title: l.title,\n description: l.description,\n quantity: l.quantity,\n unitPrice: l.unitPrice,\n vatRate: l.vatRate,\n currency: l.currency,\n };\n }\n\n private newId(): string {\n return typeof crypto !== 'undefined' && 'randomUUID' in crypto\n ? crypto.randomUUID()\n : `tmp_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n }\n\n private num(v: any, def: number) {\n const n = Number(v);\n return Number.isFinite(n) ? n : def;\n }\n\n private round2(n: number) {\n return Math.round((n + Number.EPSILON) * 100) / 100;\n }\n\n private errMsg(e: any) {\n return e?.error?.message || e?.message || 'Request failed';\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-invoice-line-property-selector',\n imports: [],\n templateUrl: './invoice-line-property-selector.html',\n styleUrl: './invoice-line-property-selector.scss',\n})\nexport class InvoiceLinePropertySelector {}\n","<p>invoice-line-property-selector works!</p>\n","import { DragDropModule, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { EnumSelect } from '@rolatech/angular-components';\nimport { InvoiceLineType } from '../../interfaces';\nimport { InvoiceStore } from '../../store/invoice.store';\nimport { InvoiceLinePropertySelector } from '../invoice-line-property-selector/invoice-line-property-selector';\n\n@Component({\n selector: 'rolatech-invoice-manage-line',\n imports: [DragDropModule, MatButtonModule, MatIcon, MatFormFieldModule, MatInputModule, PricePipe, EnumSelect],\n templateUrl: './invoice-manage-line.html',\n styleUrl: './invoice-manage-line.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class InvoiceManageLine {\n readonly store = inject(InvoiceStore);\n readonly dialog = inject(MatDialog);\n\n lines = this.store.lines;\n vatMode = this.store.vatMode;\n\n readonly editMode = signal(false);\n private openingForLine = new Set<string>();\n\n toggleEdit() {\n this.editMode.update((v) => !v);\n }\n\n add() {\n this.store.addLineAndEdit(); // or addLine()\n }\n\n remove(id: string) {\n this.store.removeLineById(id);\n }\n\n update(id: string, patch: any) {\n this.store.updateLineById(id, patch);\n }\n\n drop(event: CdkDragDrop<any>) {\n if (!this.editMode()) return; // ⛔ prevent reorder when not editing\n this.store.reorderLines(event.previousIndex, event.currentIndex);\n }\n\n isVatExclusive = () => this.vatMode() === 'EXCLUSIVE';\n isPropertyLine(type: InvoiceLineType) {\n return type === 'PROPERTY_RENT' || type === 'PROPERTY_SALE';\n }\n\n onTitleFocus(line: any) {\n if (!this.isPropertyLine(line.type)) return;\n\n // guard: focusing can fire repeatedly (click, focus, programmatic)\n if (this.openingForLine.has(line.id)) return;\n\n this.openingForLine.add(line.id);\n this.openPropertyDialog(line).finally(() => {\n // release guard a tick later so re-focus works after dialog closes\n queueMicrotask(() => this.openingForLine.delete(line.id));\n });\n }\n\n onTitleKeydown(ev: KeyboardEvent, line: any) {\n if (!this.isPropertyLine(line.type)) return;\n\n // Block manual typing when it’s a property picker\n const allow = ['Tab', 'Shift', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Escape', 'Enter'];\n if (!allow.includes(ev.key)) {\n ev.preventDefault();\n }\n\n // Optional: Enter opens dialog too\n if (ev.key === 'Enter') {\n ev.preventDefault();\n this.onTitleFocus(line);\n }\n }\n async openPropertyDialog(line: any) {\n if (!this.isPropertyLine(line.type)) return;\n\n const ref = this.dialog.open(InvoiceLinePropertySelector, {\n data: {\n title: 'Select property',\n initialQuery: line.title ?? '',\n },\n autoFocus: false,\n restoreFocus: false,\n });\n\n const selected = await ref.afterClosed().toPromise();\n if (!selected) return;\n\n // ✅ update with title + refId(propertyId)\n this.store.updateLine(line.id, {\n title: selected.title,\n refId: selected.id,\n });\n }\n saveLines() {}\n}\n","<!-- invoice-lines.html -->\n<div class=\"rounded-xl border border-(--rt-border-color) p-4 grid space-y-3\">\n <!-- Header -->\n <div class=\"flex items-center justify-between\">\n <h2 class=\"text-sm font-semibold\">Invoice lines</h2>\n\n <div class=\"flex items-center gap-2\">\n <button mat-icon-button type=\"button\" aria-label=\"Toggle edit\" (click)=\"toggleEdit()\">\n <mat-icon> {{ editMode() ? 'done' : 'edit' }} </mat-icon>\n </button>\n <button mat-stroked-button type=\"button\" [disabled]=\"store.dirty() || store.status() === 'saving'\" (click)=\"saveLines()\">\n @if (store.status() === 'saving') { Saving… } @else { Save lines }\n </button>\n </div>\n </div>\n\n <!-- Column labels (desktop only) -->\n <div class=\"hidden lg:grid grid-cols-12 gap-2 text-sm font-medium px-2 text-(--rt-text-secondary)\">\n <!-- Drag column -->\n @if (editMode()) {\n <div class=\"col-span-1\"></div>\n }\n\n <!-- Type -->\n <div [class]=\"editMode() ? 'col-span-3' : 'col-span-3'\">Type</div>\n\n <!-- Description (take extra space when not editing) -->\n <div [class]=\"editMode() ? 'col-span-4' : 'col-span-5'\">Title</div>\n\n <!-- Unit Price -->\n <div class=\"col-span-2 text-right\">Unit Price</div>\n\n <!-- Tax % (optional) -->\n @if (!isVatExclusive()) {\n <div class=\"col-span-1 text-right\">Tax %</div>\n }\n\n <!-- Amount (take extra space when not editing) -->\n <div [class]=\"editMode() ? 'col-span-1' : 'col-span-2'\" class=\"text-right\">Amount</div>\n\n <!-- Delete column -->\n @if (editMode()) {\n <div class=\"col-span-1\"></div>\n }\n </div>\n\n <!-- invoice-lines.html (rows section) -->\n\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" [cdkDropListDisabled]=\"!editMode()\" class=\"space-y-2\">\n @if (lines().length > 0) { @for (line of lines(); track line.id; let i = $index) {\n\n <div\n cdkDrag\n class=\"grid grid-cols-12 gap-2 items-start rounded-xl border border-(--rt-border-color) bg-(--rt-background) p-2 hover:bg-(--rt-raised-background)\"\n [class.opacity-70]=\"!editMode()\"\n >\n <!-- Drag handle column (only in edit mode) -->\n @if (editMode()) {\n <div class=\"col-span-1 flex items-center justify-center\">\n <button mat-icon-button type=\"button\" cdkDragHandle aria-label=\"Reorder line\" (click)=\"$event.stopPropagation()\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n }\n\n <!-- Type -->\n <div class=\"col-span-12 lg:col-span-3\">\n <rolatech-enum-select\n [resource]=\"'billing'\"\n [enumName]=\"'InvoiceLineType'\"\n [label]=\"'Line type'\"\n [placeholder]=\"'Select…'\"\n [value]=\"line.type\"\n (valueChange)=\"editMode() && update(line.id!, { type: $event })\"\n ></rolatech-enum-select>\n </div>\n\n <!-- Title (expands when NOT editMode) -->\n <div [class]=\"editMode() ? 'col-span-12 lg:col-span-4' : 'col-span-12 lg:col-span-5'\">\n <mat-form-field appearance=\"fill\" class=\"w-full\" subscriptSizing=\"dynamic\">\n <mat-label>Title</mat-label>\n <input\n matInput\n placeholder=\"e.g. Photo editing package\"\n [readonly]=\"!editMode()\"\n [readonly]=\"isPropertyLine(line.type)\"\n (focus)=\"onTitleFocus(line)\"\n (click)=\"onTitleFocus(line)\"\n (keydown)=\"onTitleKeydown($event, line)\"\n [value]=\"line.title\"\n (input)=\"editMode() && update(line.id!, { title: $any($event.target).value })\"\n />\n </mat-form-field>\n </div>\n\n <!-- Unit Price -->\n <div class=\"col-span-6 lg:col-span-2\">\n <mat-form-field appearance=\"fill\" class=\"w-full\" subscriptSizing=\"dynamic\">\n <mat-label>Unit</mat-label>\n <input\n matInput\n type=\"number\"\n min=\"0\"\n step=\"0.01\"\n class=\"text-right\"\n [readonly]=\"!editMode()\"\n [value]=\"line.unitPrice\"\n (input)=\"editMode() && update(line.id!, { unitPrice: +$any($event.target).value })\"\n />\n </mat-form-field>\n </div>\n\n <!-- Tax % (optional, hidden if VAT exclusive) -->\n @if (!isVatExclusive()) {\n <div class=\"col-span-6 lg:col-span-1\">\n <mat-form-field appearance=\"fill\" class=\"w-full\" subscriptSizing=\"dynamic\">\n <mat-label>Tax %</mat-label>\n <input\n matInput\n type=\"number\"\n min=\"0\"\n step=\"0.01\"\n class=\"text-right\"\n [readonly]=\"!editMode()\"\n [value]=\"line.vatRate\"\n (input)=\"editMode() && update(line.id!, { vatRate: +$any($event.target).value })\"\n />\n </mat-form-field>\n </div>\n }\n\n <!-- Amount (expands when NOT editMode) -->\n <div\n [class]=\"editMode() ? 'col-span-6 lg:col-span-1' : 'col-span-6 lg:col-span-2'\"\n class=\"flex items-center justify-end px-1 lg:pt-3\"\n >\n <div class=\"text-right font-semibold text-(--rt-text-secondary)\">{{ line.lineTotal | price }}</div>\n </div>\n\n <!-- Delete column (only in edit mode) -->\n @if (editMode()) {\n <div class=\"col-span-6 lg:col-span-1 flex items-center justify-end lg:pt-1\">\n <button mat-icon-button color=\"warn\" type=\"button\" aria-label=\"Delete line\" (click)=\"remove(line.id!)\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n }\n </div>\n } } @else {\n <div class=\"py-8 text-center text-sm text-(--rt-text-secondary)\">No invoice lines</div>\n }\n </div>\n\n <!-- Footer -->\n <div>\n <button mat-stroked-button (click)=\"add()\">Add item</button>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject, computed } from '@angular/core';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { BaseComponent, ConfirmationDialogComponent, MaterialModule } from '@rolatech/angular-components';\nimport { InvoiceService } from '@rolatech/angular-services';\n\nimport { InvoiceStatus } from '../../../interfaces';\nimport { InvoiceEdit } from '../../../components/invoice-edit/invoice-edit';\nimport { InvoiceStore } from '../../../store/invoice.store';\nimport { PricePipe } from '@rolatech/angular-common';\nimport { InvoiceManageLine } from '../../../components/invoice-manage-line/invoice-manage-line';\nimport { InvoiceLines } from '../../../components/invoice-lines/invoice-lines';\n\n@Component({\n selector: 'rolatech-invoice-manage-detail',\n standalone: true,\n imports: [CommonModule, MaterialModule, MatMenuModule, InvoiceLines, InvoiceManageLine, PricePipe],\n templateUrl: './invoice-manage-detail.html',\n styleUrl: './invoice-manage-detail.scss',\n})\nexport class InvoiceManageDetail extends BaseComponent implements OnInit {\n private readonly invoiceService = inject(InvoiceService);\n readonly store = inject(InvoiceStore);\n\n // expose store signals\n readonly invoice = this.store.invoice;\n readonly status = InvoiceStatus;\n\n // convenience derived values for template\n readonly loading = computed(() => this.store.status() === 'loading');\n readonly pdfUrl = computed(() => this.store.invoice()?.pdfUrl ?? '');\n\n ngOnInit(): void {\n this.store.load(this.id);\n }\n\n openPdf() {\n const url = this.pdfUrl();\n if (!url) return;\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n\n statusBadgeClass(status: InvoiceStatus): string {\n switch (String(status)) {\n case 'CREATED':\n return 'bg-yellow-100 text-yellow-800';\n case 'ISSUED':\n return 'bg-blue-100 text-blue-800';\n case 'PAID':\n return 'bg-emerald-100 text-emerald-800';\n case 'VOID':\n return 'bg-red-100 text-red-800';\n default:\n return 'bg-gray-100 text-gray-700';\n }\n }\n\n edit() {\n const inv = this.invoice();\n if (!inv) return;\n\n this.dialogService.open({\n title: 'Update invoice',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n data: { invoice: inv },\n component: InvoiceEdit,\n });\n\n // IMPORTANT: avoid stacking subscriptions if user opens dialog repeatedly\n const sub = this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (!res) return;\n\n const payload = {\n firstName: res.firstName,\n lastName: res.lastName,\n email: res.email,\n phone: res.phone,\n vatTotal: res.vatTotal,\n total: res.total,\n };\n\n this.invoiceService.updateInvoice(this.id, payload).subscribe({\n next: () => {\n this.snackBarService.open('Invoice updated');\n this.store.refresh(); // reload from API so UI stays consistent\n },\n error: (err) => this.snackBarService.open(err?.message ?? 'Update failed'),\n });\n },\n error: (error) => this.snackBarService.open(error?.message ?? 'Dialog error'),\n complete: () => sub.unsubscribe(),\n });\n }\n\n addLine() {\n // add and open editor (recommended)\n this.store.addLineAndEdit();\n\n // OR if you just want to add without opening editor:\n // this.store.addLine();\n }\n\n // Optional: persist changes\n saveLines() {\n this.store.saveLines();\n }\n editCustomer() {}\n sendEmail() {\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\n width: '400px',\n data: {\n title: 'Send invoice',\n message: 'Send this invoice to the customer’s email address?',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.invoiceService.sendInvoice(this.id).subscribe({\n next: (res) => {\n this.invoice.update((inv) => {\n if (!inv) return inv;\n inv.status = InvoiceStatus.SENT;\n return inv;\n });\n this.snackBarService.open('Invoice sent successfully.');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n}\n","@if (store.status() === 'loading') {\n<div class=\"flex justify-center py-16\">Loading invoice…</div>\n} @else if (!store.invoice()) {\n<div class=\"flex justify-center py-16\">Invoice not found.</div>\n} @else { @if (store.invoice(); as inv) {\n\n<!-- Sticky header -->\n<div class=\"sticky top-0 z-10 border-b border-(--rt-border-color) bg-(--rt-background)\">\n <div class=\"px-4 py-3 flex items-start justify-between gap-4\">\n <div class=\"min-w-0\">\n <div class=\"flex items-center gap-2\">\n <h1 class=\"text-lg font-semibold truncate\">Invoice {{ inv.invoiceNumber || inv.id }}</h1>\n\n <span class=\"px-2 py-0.5 rounded-full text-xs font-semibold\" [class]=\"statusBadgeClass(inv.status)\">\n {{ inv.status }}\n </span>\n\n @if (store.dirty() ) {\n <span class=\"text-xs text-(--rt-text-secondary)\">• Unsaved changes</span>\n }\n </div>\n\n <div class=\"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-(--rt-text-secondary)\">\n <span class=\"truncate\"> {{ inv.fullName }} • {{ inv.email }} </span>\n <span>Created {{ inv.createdAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n @if (inv.dueAt) { <span>Due {{ inv.dueAt | date:'dd/MM/yyyy':'Europe/London' }}</span> }\n </div>\n </div>\n\n <!-- Desktop actions -->\n\n <div class=\"hidden lg:flex items-center gap-2 shrink-0\">\n @if (inv.pdfUrl) {\n <button mat-stroked-button type=\"button\" (click)=\"openPdf()\">Preview PDF</button>\n } @if (inv.status.toString() === 'ISSUED') {\n <button mat-flat-button type=\"button\" (click)=\"sendEmail()\">Send email</button>\n } @if (inv.status.toString() !== 'SENT' && inv.status.toString() !== 'PAID') {\n <button mat-flat-button (click)=\"edit()\">Edit</button>\n } @if (inv.status.toString() === 'SENT') {\n <button mat-flat-button type=\"button\" (click)=\"sendEmail()\">Resend</button>\n }\n </div>\n\n <!-- Mobile actions -->\n <div class=\"lg:hidden shrink-0\">\n <button mat-icon-button type=\"button\" [matMenuTriggerFor]=\"moreMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n</div>\n\n<!-- Body -->\n<div class=\"p-4 space-y-4\">\n <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n <!-- Left column -->\n <div class=\"grid lg:col-span-2 space-y-4\">\n <!-- Customer -->\n <div class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-background) p-4\">\n <div class=\"flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-semibold\">Customer</div>\n <div class=\"text-sm text-(--rt-text-secondary)\">{{ inv.fullName }} • {{ inv.email }}</div>\n </div>\n </div>\n\n <div class=\"mt-3 grid grid-cols-1 sm:grid-cols-2 gap-3 text-sm\">\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Phone</div>\n <div class=\"font-medium\">{{ inv.phone || '—' }}</div>\n </div>\n <div>\n <div class=\"text-xs text-(--rt-text-secondary)\">Currency</div>\n <div class=\"font-medium\">{{ inv.currency }}</div>\n </div>\n </div>\n </div>\n\n <!-- Lines -->\n\n @if (inv.status.toString() !== 'SENT' && inv.status.toString() !== 'PAID') {\n <rolatech-invoice-manage-line></rolatech-invoice-manage-line>\n } @else {\n <rolatech-invoice-lines [lines]=\"store.lines()\"></rolatech-invoice-lines>\n }\n\n <!-- Notes (optional) -->\n @if (inv.note) {\n <div class=\"rounded-xl border border-(--rt-border-color) p-4\">\n <div class=\"text-sm font-semibold\">Notes</div>\n <div class=\"mt-2 text-sm text-(--rt-text-secondary) whitespace-pre-wrap\">{{ inv.note }}</div>\n </div>\n }\n </div>\n\n <!-- Right rail -->\n <div class=\"space-y-4\">\n <div class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-background) p-4\">\n <div class=\"text-sm font-semibold\">Summary</div>\n\n @if (store.totals(); as t) {\n <div class=\"mt-3 space-y-2 text-sm\">\n <div class=\"flex justify-between\">\n <span class=\"text-(--rt-text-secondary)\">Subtotal</span>\n <span class=\"font-medium\">{{ t.subtotal | price }}</span>\n </div>\n\n <div class=\"flex justify-between\">\n <span class=\"text-(--rt-text-secondary)\">VAT</span>\n <span class=\"font-medium\">{{ t.vatTotal | price }}</span>\n </div>\n\n @if (inv.holdingDepositApplied) {\n <div class=\"flex justify-between\">\n <span class=\"text-(--rt-text-secondary)\">Credit</span>\n <span class=\"font-medium\">-{{ inv.holdingDepositApplied | price }}</span>\n </div>\n }\n\n <div class=\"pt-2 mt-2 border-t border-(--rt-border-color) flex justify-between text-base\">\n <span class=\"font-semibold\">Total</span>\n <span class=\"font-semibold\">{{ t.total | price }}</span>\n </div>\n </div>\n }\n </div>\n <div class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-background) p-4\">\n <div class=\"text-sm font-semibold\">Payment</div>\n <div class=\"mt-2 text-sm text-(--rt-text-secondary)\">\n Status:\n <span class=\"font-medium text-(--rt-text-primary)\">{{ inv.status.toString() === 'PAID' ? 'Paid': 'Unpaid' }}</span>\n </div>\n @if (inv.paidAt) {\n <div class=\"mt-1 text-sm text-(--rt-text-secondary)\">\n Paid: <span class=\"font-medium text-(--rt-text-primary)\">{{ inv.paidAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n\n<mat-menu #moreMenu=\"matMenu\" xPosition=\"after\" class=\"divide-y divide-light-900\">\n @if (inv.pdfUrl) {\n <button mat-menu-item type=\"button\" (click)=\"openPdf()\">Preview PDF</button>\n } @if (inv.status.toString() === 'ISSUED') {\n <button mat-menu-item type=\"button\" (click)=\"sendEmail()\">Send email</button>\n } @if (inv.status.toString() !== 'SENT' && inv.status.toString() !== 'PAID') {\n <button mat-menu-item type=\"button\" (click)=\"edit()\">Edit</button>\n\n }\n</mat-menu>\n} }\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-invoice-manage-download',\n imports: [],\n templateUrl: './invoice-manage-download.html',\n styleUrl: './invoice-manage-download.scss',\n})\nexport class InvoiceManageDownload {}\n","<p>invoice-manage-download works!</p>\n","import { Routes } from '@angular/router';\nimport { InvoiceManageIndex } from './invoice-manage-index/invoice-manage-index';\nimport { InvoiceManageCreate } from './invoice-manage-create/invoice-manage-create';\nimport { InvoiceManageDetail } from './invoice-manage-detail/invoice-manage-detail';\nimport { InvoiceManageDownload } from './invoice-manage-download/invoice-manage-download';\n\nexport const invoiceManageRoutes: Routes = [\n {\n path: '',\n component: InvoiceManageIndex,\n },\n {\n path: 'create',\n component: InvoiceManageCreate,\n },\n\n {\n path: 'download',\n component: InvoiceManageDownload,\n },\n {\n path: ':id',\n component: InvoiceManageDetail,\n },\n];\n","import { KeyValuePipe } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { RouterModule } from '@angular/router';\nimport {\n BaseComponent,\n} from '@rolatech/angular-components';\nimport { InvoiceService } from '@rolatech/angular-services';\nimport { InvoiceItem } from '../../../components';\nimport { InvoiceType, InvoiceStatus, Invoice } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { InvoiceItemSkeleton } from '../../../components/invoice-item-skeleton/invoice-item-skeleton';\n\n@Component({\n selector: 'rolatech-agent-invoice-index',\n imports: [\n RouterModule,\n InvoiceItem,\n MatButtonModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n KeyValuePipe,\n MatPaginatorModule,\n InvoiceItemSkeleton,\n ],\n templateUrl: './agent-invoice-index.html',\n styleUrl: './agent-invoice-index.scss',\n})\nexport class AgentInvoiceIndex extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n filterOptions: any = {\n type: '',\n status: '',\n };\n invoiceType = InvoiceType;\n invoiceStatus = InvoiceStatus;\n\n select = 0;\n loading = false;\n invoices = signal<Invoice[]>([]);\n meta: any;\n length = 100;\n pageSize = 15;\n pageIndex = signal(0);\n pageSizeOptions: number[] = [5, 10, 25, 100];\n links = [\n {\n name: 'All',\n status: '',\n },\n {\n name: 'Created',\n status: 'created',\n },\n {\n name: 'Issued',\n status: 'issued',\n },\n {\n name: 'Paid',\n status: 'paid',\n },\n ];\n\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Agent workspace'),\n title: this.readRouteData('invoiceCollectionTitle', 'Listing invoices'),\n description: this.readRouteData(\n 'invoiceCollectionDescription',\n 'Monitor invoices tied to your listings, with billing status and payment movement visible at a glance.',\n ),\n };\n\n readonly stats = computed(() => {\n const invoices = this.invoices();\n return [\n { label: 'Invoices', value: this.length || invoices.length, hint: 'Billing records in your agent workspace' },\n { label: 'Created', value: invoices.filter((item) => item.status === InvoiceStatus.CREATED).length, hint: 'Prepared but not yet settled' },\n { label: 'Issued', value: invoices.filter((item) => item.status === InvoiceStatus.ISSUED || item.status === InvoiceStatus.SENT).length, hint: 'Awaiting payment' },\n { label: 'Paid', value: invoices.filter((item) => item.status === InvoiceStatus.PAID).length, hint: 'Completed payments' },\n ];\n });\n\n find() {\n this.router.navigate([], {\n queryParams: {\n type: this.filterOptions.type || null,\n status: this.filterOptions.status || null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n const type = p.get('type') || undefined;\n this.filterOptions = {\n type: type || '',\n status: status || '',\n };\n\n const filters: string[] = [];\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filters.push(`status:${status.toUpperCase()}`);\n } else {\n this.select = 0;\n }\n if (type) {\n filters.push(`type:${type}`);\n }\n return {\n page,\n filter: filters.join(','),\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n return this.invoiceService.findByManager(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.invoices.set(res.data ?? []);\n this.meta = res.meta;\n this.length = res.meta?.pagination?.count ?? res.data?.length ?? 0;\n },\n error: () => {\n this.invoices.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n resetFilter() {\n this.filterOptions = {\n type: '',\n status: '',\n };\n this.router.navigate([], {\n queryParams: {\n type: null,\n status: null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n statusCompareFn(t1: any, t2: any) {\n return t1 === t2;\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<section class=\"invoice-index-page\">\n <section class=\"invoice-index-page__hero\">\n <div class=\"invoice-index-page__copy\">\n <span class=\"invoice-index-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-index-page__title\">{{ pageMeta.title }}</h1>\n <p class=\"invoice-index-page__description\">{{ pageMeta.description }}</p>\n </div>\n\n <div class=\"invoice-index-page__stats\">\n @for (stat of stats(); track stat.label) {\n <article class=\"invoice-index-page__stat\">\n <span class=\"invoice-index-page__stat-value\">{{ stat.value }}</span>\n <span class=\"invoice-index-page__stat-label\">{{ stat.label }}</span>\n <span class=\"invoice-index-page__stat-hint\">{{ stat.hint }}</span>\n </article>\n }\n </div>\n </section>\n\n <section class=\"invoice-index-page__filters\">\n <nav class=\"invoice-index-page__status-nav\" aria-label=\"Invoice status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"invoice-index-page__status-link\"\n [class.invoice-index-page__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <div class=\"invoice-index-page__filter-grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Type</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"filterOptions.type\">\n @for (type of invoiceType | keyvalue; track type.key) {\n <mat-option [value]=\"type.key\">{{ type.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Status</mat-label>\n <mat-select [compareWith]=\"statusCompareFn\" [(ngModel)]=\"filterOptions.status\">\n @for (status of invoiceStatus | keyvalue; track status.key) {\n <mat-option [value]=\"status.key\">{{ status.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <div class=\"invoice-index-page__filter-actions\">\n <button mat-flat-button (click)=\"find()\">Apply filters</button>\n <button mat-stroked-button (click)=\"resetFilter()\">Reset</button>\n </div>\n </div>\n </section>\n\n <section class=\"invoice-index-page__list\">\n @if (loading) {\n @for (dummy of [0, 1, 2, 3]; track dummy) {\n <rolatech-invoice-item-skeleton></rolatech-invoice-item-skeleton>\n }\n } @else if (invoices().length > 0) {\n @for (item of invoices(); track item.id) {\n <rolatech-invoice-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [invoice]=\"item\"></rolatech-invoice-item>\n }\n } @else {\n <div class=\"invoice-index-page__empty\">\n <h3>No invoices yet</h3>\n <p>The invoices for this workspace will appear here once billing is created.</p>\n </div>\n }\n\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </section>\n</section>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { InvoiceService, PaymentService } from '@rolatech/angular-services';\nimport { Invoice, InvoiceStatus } from '../../../interfaces';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { InvoiceLines } from '../../../components/invoice-lines/invoice-lines';\nimport { InvoiceSummary } from '../../../components/invoice-summary/invoice-summary';\nimport { InvoiceUser } from '../../../components/invoice-user/invoice-user';\nimport { InvoiceEdit } from '../../../components/invoice-edit/invoice-edit';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-agent-invoice-detail',\n imports: [\n CommonModule,\n RouterLink,\n MatButtonModule,\n MatIconModule,\n MatMenuModule,\n InvoiceSummary,\n InvoiceLines,\n InvoiceUser,\n PricePipe,\n ],\n templateUrl: './agent-invoice-detail.html',\n styleUrl: './agent-invoice-detail.scss',\n})\nexport class AgentInvoiceDetail extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n paymentService = inject(PaymentService);\n pdfUrl = '';\n readonly loading = signal<boolean>(true);\n readonly invoice = signal<Invoice | null>(null);\n status = InvoiceStatus;\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n collectionTitle: this.readRouteData('invoiceCollectionTitle', 'Invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Agent workspace'),\n };\n ngOnInit(): void {\n this.getInvoice();\n }\n getInvoice() {\n this.invoiceService.getInvoice(this.id).subscribe({\n next: (res) => {\n this.invoice.set(res.data);\n this.loading.set(false);\n this.pdfUrl = res.data.pdfUrl;\n },\n });\n }\n openPdf() {\n window.open(this.pdfUrl, '_blank');\n }\n edit() {\n const options = {\n title: 'Update invoice',\n cancelText: 'Cancel',\n confirmText: 'Confirm',\n data: {\n invoice: this.invoice(),\n },\n component: InvoiceEdit,\n };\n this.dialogService.open(options);\n this.dialogService.confirmed().subscribe({\n next: (res) => {\n if (res) {\n const data = {\n firstName: res.firstName,\n lastName: res.lastName,\n email: res.email,\n phone: res.phone,\n vatTotal: res.vatTotal,\n total: res.total,\n };\n this.invoiceService.updateInvoice(this.id, data).subscribe({\n next: (res: any) => {\n this.snackBarService.open('Invoice updated');\n },\n });\n }\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n\n statusToneClass(status: InvoiceStatus) {\n switch (status) {\n case InvoiceStatus.PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--paid';\n case InvoiceStatus.ISSUED:\n case InvoiceStatus.SENT:\n case InvoiceStatus.PARTIALLY_PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--issued';\n case InvoiceStatus.VOID:\n return 'invoice-detail-page__status invoice-detail-page__status--void';\n default:\n return 'invoice-detail-page__status invoice-detail-page__status--neutral';\n }\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<section class=\"invoice-detail-page\">\n @if (loading()) {\n <section class=\"invoice-detail-page__hero invoice-detail-page__hero--loading\">\n <div class=\"invoice-detail-page__hero-copy\">\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">Loading invoice...</h1>\n </div>\n </section>\n } @else if (!invoice()) {\n <section class=\"invoice-detail-page__panel\">\n <h2 class=\"invoice-detail-page__panel-title\">Invoice not found</h2>\n <p class=\"invoice-detail-page__panel-copy\">The requested invoice could not be loaded for this workspace.</p>\n </section>\n } @else if (invoice(); as invoice) {\n <section class=\"invoice-detail-page__hero\">\n <div class=\"invoice-detail-page__hero-copy\">\n <a class=\"invoice-detail-page__back\" [routerLink]=\"pageMeta.baseLink\">← {{ pageMeta.collectionTitle }}</a>\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">{{ invoice.invoiceNumber || invoice.id }}</h1>\n <p class=\"invoice-detail-page__description\">\n Invoice for {{ invoice.fullName || invoice.firstName + ' ' + invoice.lastName }} created\n {{ invoice.createdAt | date: 'mediumDate' }}.\n </p>\n </div>\n\n <div class=\"invoice-detail-page__hero-side\">\n <span [class]=\"statusToneClass(invoice.status)\">{{ status[invoice.status] }}</span>\n <div class=\"invoice-detail-page__total\">{{ invoice.total | price }}</div>\n <div class=\"invoice-detail-page__note\">\n @if (invoice.dueAt) {\n Due {{ invoice.dueAt | date: 'mediumDate' }}\n } @else {\n Payable on receipt\n }\n </div>\n\n <div class=\"invoice-detail-page__hero-actions\">\n @if (invoice.pdfUrl) {\n <button mat-stroked-button (click)=\"openPdf()\">Preview PDF</button>\n }\n <button mat-flat-button (click)=\"edit()\">Edit invoice</button>\n </div>\n </div>\n </section>\n\n <section class=\"invoice-detail-page__content\">\n <div class=\"invoice-detail-page__main\">\n <rolatech-invoice-user\n [firstName]=\"invoice.firstName\"\n [lastName]=\"invoice.lastName\"\n [email]=\"invoice.email\"\n [phone]=\"invoice.phone\"\n ></rolatech-invoice-user>\n\n @if (invoice.lines; as lines) {\n <rolatech-invoice-lines [lines]=\"lines\"></rolatech-invoice-lines>\n }\n </div>\n\n <div class=\"invoice-detail-page__side\">\n <rolatech-invoice-summary\n [tax]=\"invoice.vatTotal\"\n [credit]=\"invoice.holdingDepositApplied\"\n [subtotal]=\"invoice.subtotal\"\n [total]=\"invoice.total\"\n ></rolatech-invoice-summary>\n\n <article class=\"invoice-detail-page__panel\">\n <h2 class=\"invoice-detail-page__panel-title\">Invoice note</h2>\n <p class=\"invoice-detail-page__panel-copy\">{{ invoice.note || 'No note added for this invoice.' }}</p>\n </article>\n </div>\n </section>\n }\n</section>\n","import { Route } from '@angular/router';\nimport { AgentInvoiceIndex } from './agent-invoice-index/agent-invoice-index';\nimport { AgentInvoiceDetail } from './agent-invoice-detail/agent-invoice-detail';\n\nexport const agentInvoiceRoutes: Route[] = [\n {\n path: '',\n component: AgentInvoiceIndex,\n },\n {\n path: ':id',\n component: AgentInvoiceDetail,\n },\n];\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { finalize } from 'rxjs';\nimport { BillingProfileResponse, BillingProfileService, BillingProfileUpsertParam } from '@rolatech/angular-services';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BillingProfileFacade {\n private readonly billingProfileService = inject(BillingProfileService);\n\n readonly loading = signal(false);\n readonly saving = signal(false);\n readonly profile = signal<BillingProfileResponse | null>(null);\n readonly error = signal<string | null>(null);\n readonly saveMessage = signal<string | null>(null);\n\n readonly enabled = computed(() => this.profile()?.enabled ?? false);\n\n load(): void {\n this.loading.set(true);\n this.error.set(null);\n\n this.billingProfileService\n .getOrCreate()\n .pipe(finalize(() => this.loading.set(false)))\n .subscribe({\n next: (response) => {\n this.profile.set(response.data);\n },\n error: (error) => {\n this.error.set(error?.error?.message ?? 'Failed to load billing profile.');\n },\n });\n }\n\n save(body: BillingProfileUpsertParam, done?: (profile: BillingProfileResponse) => void): void {\n this.saving.set(true);\n this.error.set(null);\n this.saveMessage.set(null);\n\n this.billingProfileService\n .updateProfile(body)\n .pipe(finalize(() => this.saving.set(false)))\n .subscribe({\n next: (response) => {\n this.profile.set(response.data);\n this.saveMessage.set('Billing profile saved successfully.');\n done?.(response.data);\n },\n error: (error) => {\n this.error.set(error?.error?.message ?? 'Failed to save billing profile.');\n },\n });\n }\n\n setEnabled(enabled: boolean): void {\n this.saving.set(true);\n this.error.set(null);\n this.saveMessage.set(null);\n\n this.billingProfileService\n .patchProfile({ enabled })\n .pipe(finalize(() => this.saving.set(false)))\n .subscribe({\n next: (response) => {\n this.profile.set(response.data);\n this.saveMessage.set(enabled ? 'Billing profile enabled.' : 'Billing profile disabled.');\n },\n error: (error) => {\n this.error.set(error?.error?.message ?? 'Failed to update billing profile status.');\n },\n });\n }\n}\n","import { FormBuilder, Validators } from '@angular/forms';\nimport { BillingProfileResponse } from '@rolatech/angular-services';\n\nexport function createBillingProfileForm(formBuilder: FormBuilder) {\n return formBuilder.nonNullable.group({\n displayName: [''],\n\n companyName: [''],\n companyWebsite: [''],\n companyRegistrationNo: [''],\n companyVatNo: [''],\n companyAddressLine: [''],\n companyEmail: ['', [Validators.email]],\n companyPhone: [''],\n\n bankInstitution: [''],\n bankAccountName: [''],\n bankSortCode: [''],\n bankAccountNo: [''],\n bankSwift: [''],\n bankIban: [''],\n bankPaymentRef: [''],\n\n invoiceFooter: [''],\n paymentInstructions: [''],\n logoUrl: [''],\n\n enabled: [true],\n });\n}\n\nexport function patchBillingProfileForm(\n form: ReturnType<typeof createBillingProfileForm>,\n value: BillingProfileResponse | null | undefined,\n): void {\n if (!value) {\n return;\n }\n\n form.patchValue({\n displayName: value.displayName ?? '',\n companyName: value.companyName ?? '',\n companyWebsite: value.companyWebsite ?? '',\n companyRegistrationNo: value.companyRegistrationNo ?? '',\n companyVatNo: value.companyVatNo ?? '',\n companyAddressLine: value.companyAddressLine ?? '',\n companyEmail: value.companyEmail ?? '',\n companyPhone: value.companyPhone ?? '',\n\n bankInstitution: value.bankInstitution ?? '',\n bankAccountName: value.bankAccountName ?? '',\n bankSortCode: value.bankSortCode ?? '',\n bankAccountNo: value.bankAccountNo ?? '',\n bankSwift: value.bankSwift ?? '',\n bankIban: value.bankIban ?? '',\n bankPaymentRef: value.bankPaymentRef ?? '',\n\n invoiceFooter: value.invoiceFooter ?? '',\n paymentInstructions: value.paymentInstructions ?? '',\n logoUrl: value.logoUrl ?? '',\n\n enabled: value.enabled ?? true,\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\nimport { BillingProfileFacade } from '../../../store/billing-profile.facade';\nimport { createBillingProfileForm, patchBillingProfileForm } from '../../../utils/billing-profile-form.util';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\n@Component({\n selector: 'rolatech-billing-profile-setting-page',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatSlideToggleModule,\n MatCardModule,\n ],\n templateUrl: './billing-profile-setting-page.html',\n styleUrl: './billing-profile-setting-page.scss',\n providers: [BillingProfileFacade],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BillingProfileSettingPage {\n private readonly formBuilder = inject(FormBuilder);\n readonly facade = inject(BillingProfileFacade);\n\n readonly form = createBillingProfileForm(this.formBuilder);\n\n readonly canSubmit = computed(() => !this.facade.loading() && !this.facade.saving());\n\n constructor() {\n effect(() => {\n const profile = this.facade.profile();\n patchBillingProfileForm(this.form, profile);\n });\n\n this.facade.load();\n }\n\n submit(): void {\n if (!this.canSubmit()) {\n return;\n }\n\n this.facade.save(this.form.getRawValue());\n }\n\n toggleEnabled(enabled: boolean): void {\n this.facade.setEnabled(enabled);\n }\n}\n","<section class=\"rt-platform-theme flex flex-col gap-6 bg-(--rt-base-background) p-6 text-(--rt-text-primary)\">\n <header class=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div class=\"min-w-0\">\n <div class=\"space-y-1\">\n <h1 class=\"text-2xl font-semibold tracking-tight\">Member Management</h1>\n <p class=\"text-sm text-muted-foreground\">\n Review organization members, invitation state, and current role assignments from one workspace.\n </p>\n </div>\n </div>\n </header>\n <section class=\"grid gap-4\">\n @if (facade.error()) {\n <div class=\"mb-4 rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\">{{ facade.error() }}</div>\n } @if (facade.saveMessage()) {\n <div class=\"mb-4 rounded-xl border border-green-200 bg-green-50 px-4 py-3 text-sm text-green-700\">\n {{ facade.saveMessage() }}\n </div>\n }\n\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\" class=\"space-y-6\">\n <mat-card class=\"rounded-2xl\">\n <div class=\"grid gap-4 p-4 md:grid-cols-2\">\n <div class=\"md:col-span-2 flex items-center justify-between\">\n <div>\n <div class=\"text-base font-medium\">Billing Profile Status</div>\n <div class=\"text-sm text-gray-500\">Enable this profile for invoice generation and payment instructions.</div>\n </div>\n\n <mat-slide-toggle formControlName=\"enabled\" (change)=\"toggleEnabled($event.checked)\"> Enabled </mat-slide-toggle>\n </div>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Display Name</mat-label>\n <input matInput formControlName=\"displayName\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Logo URL</mat-label>\n <input matInput formControlName=\"logoUrl\" />\n </mat-form-field>\n </div>\n </mat-card>\n\n <mat-card class=\"rounded-2xl\">\n <div class=\"p-4\">\n <h2 class=\"mb-4 text-lg font-medium\">Company Information</h2>\n\n <div class=\"grid gap-4 md:grid-cols-2\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Company Name</mat-label>\n <input matInput formControlName=\"companyName\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Website</mat-label>\n <input matInput formControlName=\"companyWebsite\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Registration No</mat-label>\n <input matInput formControlName=\"companyRegistrationNo\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>VAT No</mat-label>\n <input matInput formControlName=\"companyVatNo\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"md:col-span-2\">\n <mat-label>Address</mat-label>\n <textarea matInput rows=\"3\" formControlName=\"companyAddressLine\"></textarea>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Company Email</mat-label>\n <input matInput formControlName=\"companyEmail\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Company Phone</mat-label>\n <input matInput formControlName=\"companyPhone\" />\n </mat-form-field>\n </div>\n </div>\n </mat-card>\n\n <mat-card class=\"rounded-2xl\">\n <div class=\"p-4\">\n <h2 class=\"mb-4 text-lg font-medium\">Bank Information</h2>\n\n <div class=\"grid gap-4 md:grid-cols-2\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Bank Institution</mat-label>\n <input matInput formControlName=\"bankInstitution\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Account Name</mat-label>\n <input matInput formControlName=\"bankAccountName\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Sort Code</mat-label>\n <input matInput formControlName=\"bankSortCode\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Account No</mat-label>\n <input matInput formControlName=\"bankAccountNo\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>SWIFT</mat-label>\n <input matInput formControlName=\"bankSwift\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>IBAN</mat-label>\n <input matInput formControlName=\"bankIban\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"md:col-span-2\">\n <mat-label>Payment Reference</mat-label>\n <input matInput formControlName=\"bankPaymentRef\" />\n </mat-form-field>\n </div>\n </div>\n </mat-card>\n\n <mat-card class=\"rounded-2xl\">\n <div class=\"p-4\">\n <h2 class=\"mb-4 text-lg font-medium\">Invoice & Payment Content</h2>\n\n <div class=\"grid gap-4\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Invoice Footer</mat-label>\n <textarea matInput rows=\"4\" formControlName=\"invoiceFooter\"></textarea>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Payment Instructions</mat-label>\n <textarea matInput rows=\"5\" formControlName=\"paymentInstructions\"></textarea>\n </mat-form-field>\n </div>\n </div>\n </mat-card>\n\n <div class=\"flex justify-end\">\n <button mat-flat-button color=\"primary\" type=\"submit\" [disabled]=\"facade.saving() || facade.loading()\">\n {{ facade.saving() ? 'Saving...' : 'Save Billing Profile' }}\n </button>\n </div>\n </form>\n </section>\n</section>\n","import { Route } from '@angular/router';\nimport { BillingProfileSettingPage } from './billing-profile-setting-page/billing-profile-setting-page';\n\nexport const BILLING_PROFILE_ROUTES: Route[] = [\n {\n path: '',\n component: BillingProfileSettingPage,\n },\n];\n","import { KeyValuePipe } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { RouterModule } from '@angular/router';\nimport { BaseComponent } from '@rolatech/angular-components';\nimport { InvoiceService } from '@rolatech/angular-services';\nimport { InvoiceItem } from '../../../components';\nimport { InvoiceType, InvoiceStatus, Invoice } from '../../../interfaces';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { InvoiceItemSkeleton } from '../../../components/invoice-item-skeleton/invoice-item-skeleton';\n\n@Component({\n selector: 'rolatech-agent-invoice-index',\n imports: [\n RouterModule,\n InvoiceItem,\n MatButtonModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n KeyValuePipe,\n MatPaginatorModule,\n InvoiceItemSkeleton,\n ],\n templateUrl: './market-invoice-index.html',\n styleUrl: './market-invoice-index.scss',\n})\nexport class MarketInvoiceIndex extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n filterOptions: any = {\n type: '',\n status: '',\n };\n invoiceType = InvoiceType;\n invoiceStatus = InvoiceStatus;\n\n select = 0;\n loading = false;\n invoices = signal<Invoice[]>([]);\n meta: any;\n length = 100;\n pageSize = 15;\n pageIndex = signal(0);\n pageSizeOptions: number[] = [5, 10, 25, 100];\n links = [\n {\n name: 'All',\n status: '',\n },\n {\n name: 'Created',\n status: 'created',\n },\n {\n name: 'Issued',\n status: 'issued',\n },\n {\n name: 'Paid',\n status: 'paid',\n },\n ];\n\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Agent workspace'),\n title: this.readRouteData('invoiceCollectionTitle', 'Listing invoices'),\n description: this.readRouteData(\n 'invoiceCollectionDescription',\n 'Monitor invoices tied to your listings, with billing status and payment movement visible at a glance.',\n ),\n };\n\n readonly stats = computed(() => {\n const invoices = this.invoices();\n return [\n { label: 'Invoices', value: this.length || invoices.length, hint: 'Billing records in your agent workspace' },\n {\n label: 'Created',\n value: invoices.filter((item) => item.status === InvoiceStatus.CREATED).length,\n hint: 'Prepared but not yet settled',\n },\n {\n label: 'Issued',\n value: invoices.filter((item) => item.status === InvoiceStatus.ISSUED || item.status === InvoiceStatus.SENT).length,\n hint: 'Awaiting payment',\n },\n {\n label: 'Paid',\n value: invoices.filter((item) => item.status === InvoiceStatus.PAID).length,\n hint: 'Completed payments',\n },\n ];\n });\n\n find() {\n this.router.navigate([], {\n queryParams: {\n type: this.filterOptions.type || null,\n status: this.filterOptions.status || null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n const type = p.get('type') || undefined;\n this.filterOptions = {\n type: type || '',\n status: status || '',\n };\n\n const filters: string[] = [];\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filters.push(`status:${status.toUpperCase()}`);\n } else {\n this.select = 0;\n }\n if (type) {\n filters.push(`type:${type}`);\n }\n return {\n page,\n filter: filters.join(','),\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n return this.invoiceService.findByManager(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res) => {\n this.invoices.set(res.data ?? []);\n this.meta = res.meta;\n this.length = res.meta?.pagination?.count ?? res.data?.length ?? 0;\n },\n error: () => {\n this.invoices.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n resetFilter() {\n this.filterOptions = {\n type: '',\n status: '',\n };\n this.router.navigate([], {\n queryParams: {\n type: null,\n status: null,\n page: 1,\n },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n statusCompareFn(t1: any, t2: any) {\n return t1 === t2;\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<section class=\"invoice-index-page\">\n <section class=\"invoice-index-page__hero\">\n <div class=\"invoice-index-page__copy\">\n <span class=\"invoice-index-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-index-page__title\">{{ pageMeta.title }}</h1>\n <p class=\"invoice-index-page__description\">{{ pageMeta.description }}</p>\n </div>\n\n <div class=\"invoice-index-page__stats\">\n @for (stat of stats(); track stat.label) {\n <article class=\"invoice-index-page__stat\">\n <span class=\"invoice-index-page__stat-value\">{{ stat.value }}</span>\n <span class=\"invoice-index-page__stat-label\">{{ stat.label }}</span>\n <span class=\"invoice-index-page__stat-hint\">{{ stat.hint }}</span>\n </article>\n }\n </div>\n </section>\n\n <section class=\"invoice-index-page__filters\">\n <nav class=\"invoice-index-page__status-nav\" aria-label=\"Invoice status filters\">\n @for (item of links; track item.name; let index = $index) {\n <a\n class=\"invoice-index-page__status-link\"\n [class.invoice-index-page__status-link--active]=\"select === index\"\n routerLink=\"./\"\n [queryParams]=\"item.status ? { status: item.status } : {}\"\n >\n {{ item.name }}\n </a>\n }\n </nav>\n\n <div class=\"invoice-index-page__filter-grid\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Type</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"filterOptions.type\">\n @for (type of invoiceType | keyvalue; track type.key) {\n <mat-option [value]=\"type.key\">{{ type.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Status</mat-label>\n <mat-select [compareWith]=\"statusCompareFn\" [(ngModel)]=\"filterOptions.status\">\n @for (status of invoiceStatus | keyvalue; track status.key) {\n <mat-option [value]=\"status.key\">{{ status.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <div class=\"invoice-index-page__filter-actions\">\n <button mat-flat-button (click)=\"find()\">Apply filters</button>\n <button mat-stroked-button (click)=\"resetFilter()\">Reset</button>\n </div>\n </div>\n </section>\n\n <section class=\"invoice-index-page__list\">\n @if (loading) { @for (dummy of [0, 1, 2, 3]; track dummy) {\n <rolatech-invoice-item-skeleton></rolatech-invoice-item-skeleton>\n } } @else if (invoices().length > 0) { @for (item of invoices(); track item.id) {\n <rolatech-invoice-item class=\"cursor-pointer\" [routerLink]=\"['./', item.id]\" [invoice]=\"item\"></rolatech-invoice-item>\n } } @else {\n <div class=\"invoice-index-page__empty\">\n <h3>No invoices yet</h3>\n <p>The invoices for this workspace will appear here once billing is created.</p>\n </div>\n }\n\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </section>\n</section>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { BaseComponent, Breadcrumb, BreadcrumbItem } from '@rolatech/angular-components';\nimport { RouterModule } from '@angular/router';\nimport { InvoiceService, PaymentService } from '@rolatech/angular-services';\nimport { switchMap } from 'rxjs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Invoice, InvoiceStatus } from '../../../interfaces';\nimport { InvoiceUser } from '../../../components/invoice-user/invoice-user';\nimport { InvoiceLines } from '../../../components/invoice-lines/invoice-lines';\nimport { InvoiceSummary } from '../../../components/invoice-summary/invoice-summary';\nimport { InvoiceUserSkeleton } from '../../../components/invoice-user-skeleton/invoice-user-skeleton';\nimport { InvoiceSummarySkeleton } from '../../../components/invoice-summary-skeleton/invoice-summary-skeleton';\nimport { InvoiceLinesSkeleton } from '../../../components/invoice-lines-skeleton/invoice-lines-skeleton';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-market-invoice-detail',\n imports: [\n CommonModule,\n RouterModule,\n MatButtonModule,\n MatIconModule,\n InvoiceUser,\n InvoiceLines,\n InvoiceSummary,\n InvoiceUserSkeleton,\n InvoiceSummarySkeleton,\n InvoiceLinesSkeleton,\n PricePipe,\n Breadcrumb,\n ],\n templateUrl: './market-invoice-detail.html',\n styleUrl: './market-invoice-detail.scss',\n})\nexport class MarketInvoiceDetail extends BaseComponent implements OnInit {\n invoiceService = inject(InvoiceService);\n paymentService = inject(PaymentService);\n invoice = signal<Invoice | null>(null);\n status = InvoiceStatus;\n paying = false;\n loading = signal<boolean>(true);\n readonly pageMeta = {\n baseLink: this.readRouteData('invoiceBaseLink', '/invoices'),\n collectionTitle: this.readRouteData('invoiceCollectionTitle', 'Invoices'),\n eyebrow: this.readRouteData('invoiceEyebrow', 'Billing workspace'),\n };\n readonly breadcrumbs = computed<BreadcrumbItem[]>(() => [\n { label: 'Invoices', link: '/properties/invoices' },\n { label: 'Invoice detail' },\n ]);\n\n ngOnInit(): void {\n this.route.params.subscribe((params) => {\n const id = params['id'];\n this.get(id);\n });\n this.route.queryParams.subscribe(async (params) => {\n const sessionId = params['session_id'];\n if (sessionId) {\n // this.invoiceService.checkOfferPaymentStatus(this.id, sessionId).subscribe({\n // next: (res) => {\n // if (res.status === 'paid') {\n // this.invoice.update((state) => {\n // if (!state) return state;\n // state.status = InvoiceStatus.PAID;\n // return state;\n // });\n // }\n // },\n // });\n }\n });\n }\n get(id: string) {\n this.loading.set(true);\n this.invoiceService.getInvoice(id).subscribe({\n next: (res: any) => {\n this.invoice.set(res.data);\n this.loading.set(false);\n },\n error: () => {\n this.loading.set(false);\n },\n });\n }\n pay() {\n this.paying = true;\n const data = {\n businessType: 'INVOICE',\n businessId: this.id,\n provider: 'STRIPE',\n method: 'STRIPE_CHECKOUT',\n };\n this.paymentService\n .createPaymentIntent(data)\n .pipe(\n switchMap((res: any) => {\n const intent = {\n intentId: res.data.id,\n provider: 'STRIPE',\n method: 'STRIPE_CHECKOUT',\n successUrl: window.location.href + '?session_id={CHECKOUT_SESSION_ID}',\n cancelUrl: window.location.href,\n };\n return this.paymentService.createPayment(intent);\n }),\n )\n .subscribe({\n next: (res) => {\n this.paying = false;\n const { checkoutUrl } = res.data;\n window.open(checkoutUrl, '_blank');\n },\n error: (error) => {\n this.paying = false;\n this.snackBarService.open(error.message);\n },\n });\n }\n\n statusToneClass(status: InvoiceStatus) {\n switch (status) {\n case InvoiceStatus.PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--paid';\n case InvoiceStatus.ISSUED:\n case InvoiceStatus.SENT:\n case InvoiceStatus.PARTIALLY_PAID:\n return 'invoice-detail-page__status invoice-detail-page__status--issued';\n case InvoiceStatus.VOID:\n return 'invoice-detail-page__status invoice-detail-page__status--void';\n default:\n return 'invoice-detail-page__status invoice-detail-page__status--neutral';\n }\n }\n\n private readRouteData(key: string, fallback: string) {\n for (const snapshot of [...this.route.snapshot.pathFromRoot].reverse()) {\n const value = snapshot.data?.[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n return fallback;\n }\n}\n","<section class=\"invoice-detail-page\">\n <rolatech-breadcrumb [items]=\"breadcrumbs()\"></rolatech-breadcrumb>\n @if (loading()) {\n <section class=\"invoice-detail-page__hero invoice-detail-page__hero--loading\">\n <div class=\"invoice-detail-page__hero-copy\">\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">Loading invoice...</h1>\n </div>\n </section>\n\n <section class=\"invoice-detail-page__content\">\n <div class=\"invoice-detail-page__main\">\n <rolatech-invoice-user-skeleton></rolatech-invoice-user-skeleton>\n <rolatech-invoice-lines-skeleton></rolatech-invoice-lines-skeleton>\n </div>\n <div class=\"invoice-detail-page__side\">\n <rolatech-invoice-summary-skeleton></rolatech-invoice-summary-skeleton>\n </div>\n </section>\n } @else if (invoice(); as invoice) {\n <section class=\"invoice-detail-page__hero\">\n <div class=\"invoice-detail-page__hero-copy\">\n <span class=\"invoice-detail-page__eyebrow\">{{ pageMeta.eyebrow }}</span>\n <h1 class=\"invoice-detail-page__title\">Invoice detail</h1>\n <h1 class=\"invoice-detail-page__title\"></h1>\n <p class=\"invoice-detail-page__description\">#{{ invoice.invoiceNumber || invoice.id }}</p>\n <p class=\"invoice-detail-page__description\">\n Invoice for {{ invoice.fullName || invoice.firstName + ' ' + invoice.lastName }} created {{ invoice.createdAt | date:\n 'mediumDate' }}.\n </p>\n </div>\n\n <div class=\"invoice-detail-page__hero-side\">\n <span [class]=\"statusToneClass(invoice.status)\">{{ status[invoice.status] }}</span>\n <div class=\"invoice-detail-page__total\">{{ invoice.total | price }}</div>\n <div class=\"invoice-detail-page__note\">\n @if (invoice.dueAt) { Due {{ invoice.dueAt | date: 'mediumDate' }} } @else { Payable on receipt }\n </div>\n\n @if (invoice.status.toString() === 'ISSUED' || invoice.status.toString() === 'SENT') {\n <button mat-flat-button [disabled]=\"paying\" class=\"invoice-detail-page__cta\" (click)=\"pay()\">\n {{ paying ? 'Processing payment...' : 'Pay invoice' }}\n </button>\n }\n </div>\n </section>\n\n <section class=\"invoice-detail-page__content\">\n <div class=\"invoice-detail-page__main\">\n <rolatech-invoice-user\n [firstName]=\"invoice.firstName\"\n [lastName]=\"invoice.lastName\"\n [email]=\"invoice.email\"\n [phone]=\"invoice.phone\"\n ></rolatech-invoice-user>\n\n @if (invoice.lines; as lines) {\n <rolatech-invoice-lines [lines]=\"lines\"></rolatech-invoice-lines>\n }\n </div>\n\n <div class=\"invoice-detail-page__side\">\n <rolatech-invoice-summary\n [tax]=\"invoice.vatTotal\"\n [credit]=\"invoice.holdingDepositApplied\"\n [subtotal]=\"invoice.subtotal\"\n [total]=\"invoice.total\"\n ></rolatech-invoice-summary>\n\n <article class=\"invoice-detail-page__panel\">\n <h2 class=\"invoice-detail-page__panel-title\">Invoice note</h2>\n <p class=\"invoice-detail-page__panel-copy\">{{ invoice.note || 'No note added for this invoice.' }}</p>\n\n @if (invoice.status.toString() === 'CREATED' || invoice.status.toString() === 'PAID') {\n <div class=\"invoice-detail-page__panel-row\">\n <span>Payment method</span>\n <strong>Stripe</strong>\n </div>\n }\n </article>\n </div>\n </section>\n }\n</section>\n","import { Route } from '@angular/router';\nimport { MarketInvoiceIndex } from './market-invoice-index/market-invoice-index';\nimport { MarketInvoiceDetail } from './market-invoice-detail/market-invoice-detail';\n\nexport const marketInvoiceRoutes: Route[] = [\n {\n path: '',\n component: MarketInvoiceIndex,\n },\n {\n path: ':id',\n component: MarketInvoiceDetail,\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i1","i5","i6","i9","i2","finalize","i4"],"mappings":"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"}
|