{"version":3,"file":"xxmachina-components-services-invoice.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/invoice/invoice.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/invoice/xxmachina-components-services-invoice.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { GraphqlService } from '@xxmachina/components/services/graphql';\nimport { Observable, lastValueFrom, map } from 'rxjs';\nimport { Invoice, Order } from '@xxmachina/common/invoice/domain/models';\nimport dayjs from 'dayjs';\nimport { plainToInstance } from 'class-transformer';\nimport { HttpClient } from '@angular/common/http';\n\nconst query = `\nquery {\n  invoices{\n    id\n    no\n    title\n    subject\n    customerId\n    vendorId\n    amount\n    dueDate\n    orderIds\n    customer {\n      id\n      name\n      type\n      address\n      postalCode\n      email\n      billingEmail\n      billingContact\n      phoneNumber\n      contact\n      suffix\n      bankAccount\n    }\n    vendor {\n      id\n      name\n      type\n      address\n      postalCode\n      email\n      billingEmail\n      billingContact\n      phoneNumber\n      contact\n      suffix\n      bankAccount\n    }\n    orders {\n      id\n      title\n      eclId\n      customerId\n      vendorId\n      contractId\n      invoiceId\n      startDate\n      endDate\n      unitPrice\n      unit\n      quantity\n      amountInput\n      amount\n      statusIn\n      statusOut\n    }\n  }\n}\n`;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class InvoiceService {\n  readonly graphql = inject(GraphqlService);\n  readonly http = inject(HttpClient);\n\n  list(): Observable<Invoice[]> {\n    return this.graphql.graphql({\n      query: `query { invoices{ id no title subject customerId vendorId amount dueDate orderIds } }`,\n    }).pipe(\n      map((data => data?.data?.invoices ?? [])),\n      map((invoices) => invoices.map((invoice: any) => plainToInstance(Invoice, {\n        ...invoice,\n        no: parseInt(invoice.no, 10),\n      }))),\n    );\n  }\n\n  getInvoices(): Observable<Invoice[]> {\n    return this.graphql.graphql({query}).pipe(\n      map((data => data?.data?.invoices ?? [])),\n      map((invoices) => invoices.map((invoice: any) => Invoice.from({\n        ...invoice,\n        no: parseInt(invoice.no, 10),\n        dueDate: dayjs(invoice.dueDate),\n        orders: invoice.orders.map((order: any) => Order.from({\n          ...order,\n          startDate: dayjs(order.startDate),\n          endDate: dayjs(order.endDate),\n        })),\n      }))),\n    )\n  }\n\n  async download(invoice: Invoice): Promise<void> {\n    return lastValueFrom(this.http.post('/api-next/invoices/pdf', invoice, {\n      responseType: 'blob',\n      observe: 'response',\n    })).then((res) => {\n      const url = URL.createObjectURL(res.body!);\n      const a = document.createElement('a');\n      a.href = url;\n      a.download = decodeURIComponent(res.headers.get('content-disposition')!.split('filename=')[1]);\n      a.click();\n      URL.revokeObjectURL(url);\n    });\n  }\n\n  async send(invoice: Invoice): Promise<void> {\n    return lastValueFrom(this.http.post<void>(`/api-next/invoices/send`, invoice));\n  }\n\n  async sync(): Promise<void> {\n    return lastValueFrom(this.http.post<void>(`/api-next/invoices/sync`, {}));\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}