import { Injectable } from '@nestjs/common' import { ResponseMapper } from '../../../common/response/response-mapper' import { PrismaService } from '../../../prisma/prisma.service' import { CreateReceiptPaymentDto } from './dto/create-receipt-payment.dto' @Injectable() export class SupplierInvoicesService { constructor(private prisma: PrismaService) {} async findAll(supplierId: number) { const items = await this.prisma.purchaseReceipt.findMany({ where: { supplierId, }, include: { inventory: { select: { id: true, name: true, }, }, items: { select: { id: true, count: true, unitPrice: true, totalAmount: true, product: { select: { id: true, name: true, sku: true, }, }, }, }, payments: { select: { id: true, amount: true, }, }, }, omit: { inventoryId: true, supplierId: true, }, }) return ResponseMapper.list(items) } async findOne(supplierId: number, invoiceId: number) { const invoice = await this.prisma.purchaseReceipt.findUnique({ where: { id: invoiceId, supplierId, }, include: { inventory: { select: { id: true, name: true, }, }, items: true, }, omit: { inventoryId: true, supplierId: true, }, }) return ResponseMapper.single(invoice) } async findPayments(invoiceId: number) { const items = await this.prisma.purchaseReceiptPayments.findMany({ where: { receipt: { id: invoiceId, }, }, include: { receipt: { include: { inventory: { select: { id: true, name: true, }, }, }, }, bankAccount: { select: { branch: { select: { id: true, name: true, bank: { select: { id: true, name: true, shortName: true, }, }, }, }, accountNumber: true, cardNumber: true, name: true, id: true, iban: true, }, }, }, omit: { receiptId: true, }, orderBy: { payedAt: 'desc', }, }) return ResponseMapper.list(items) } async findAllPayments(supplierId: number) { const items = await this.prisma.purchaseReceiptPayments.findMany({ where: { receipt: { supplierId, }, }, include: { receipt: { select: { id: true, totalAmount: true, status: true, paidAmount: true, }, }, }, omit: { receiptId: true, }, }) return ResponseMapper.list(items) } async createPayment(invoiceId: number, data: CreateReceiptPaymentDto) { const { bankAccountId, ...rest } = data console.log(data) const payment = await this.prisma.purchaseReceiptPayments.create({ data: { ...rest, payedAt: new Date(data.payedAt), receipt: { connect: { id: invoiceId, }, }, bankAccount: { connect: { id: bankAccountId, }, }, }, include: { receipt: true, }, omit: { receiptId: true, }, }) return ResponseMapper.create(payment) } }