import { Maybe } from '@/core'; import { CatalogInvoiceTypeTagComponent, CatalogTaxProviderStatusTagComponent, } from '@/shared/catalog'; import { CatalogInvoiceSettlementTypeTagComponent } from '@/shared/catalog/invoiceSettlementType'; import { PriceMaskDirective } from '@/shared/directives'; import { Component, computed, inject, Input } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { Card } from 'primeng/card'; import { Divider } from 'primeng/divider'; import { Message } from 'primeng/message'; import { KeyValueComponent } from '../key-value.component/key-value.component'; import { IColumn, PageDataListComponent } from '../pageDataList/page-data-list.component'; import { ISaleInvoiceFullResponse } from './sale-invoice-full-response.model'; export type TSaleInvoiceSingleViewVariant = 'full' | 'customer' | 'pos'; @Component({ selector: 'shared-sale-invoice-single-info-card', templateUrl: './sale-invoice-single-info-card.component.html', imports: [ Card, KeyValueComponent, CatalogInvoiceTypeTagComponent, CatalogTaxProviderStatusTagComponent, Divider, CatalogInvoiceSettlementTypeTagComponent, PageDataListComponent, PriceMaskDirective, Message, ], }) export class SaleInvoiceSingleInfoCardComponent { @Input({ required: true }) loading!: boolean; @Input() invoice!: Maybe; @Input() variant: TSaleInvoiceSingleViewVariant = 'full'; private readonly route = inject(ActivatedRoute); columns: IColumn[] = [ { field: 'name', header: 'عنوان', type: 'nested', nestedOption: { path: 'good_snapshot.name', }, }, { field: 'sku_code', header: 'شناسه کالا', }, { field: 'unit_price', header: 'قیمت واحد', type: 'price', }, { field: 'quantity', header: 'مقدار', customDataModel(item) { return `${item.quantity} ${item.measure_unit_text}`; }, }, { field: 'commission', header: 'کارمزد', type: 'nested', nestedOption: { path: 'payload.commission', type: 'price', }, }, { field: 'wages', header: 'اجرت', type: 'nested', nestedOption: { path: 'payload.wages', type: 'price', }, }, { field: 'profit', header: 'سود', type: 'nested', nestedOption: { path: 'payload.profit', type: 'price', }, }, { field: 'discount_amount', header: 'تخفیف', type: 'price', }, { field: 'tax_amount', header: 'مالیات', type: 'price', }, { field: 'total_amount', header: 'قابل پرداخت', type: 'price', }, ]; referenceInvoiceRoute = computed(() => { const referenceInvoiceId = this.invoice?.reference_invoice?.id; const pagePath = this.route.pathFromRoot .flatMap((route) => route.snapshot.url.map((segment) => segment.path)) .join('/'); if (!pagePath || !referenceInvoiceId) { return pagePath; } const pathParts = pagePath.split('/').filter(Boolean); pathParts[pathParts.length - 1] = referenceInvoiceId; return `/${pathParts.join('/')}`; }); referenceByInvoiceRoute = computed(() => { const referenceInvoiceId = this.invoice?.referenced_by?.id; const pagePath = this.route.pathFromRoot .flatMap((route) => route.snapshot.url.map((segment) => segment.path)) .join('/'); if (!pagePath || !referenceInvoiceId) { return pagePath; } const pathParts = pagePath.split('/').filter(Boolean); pathParts[pathParts.length - 1] = referenceInvoiceId; return `/${pathParts.join('/')}`; }); }