179 lines
3.8 KiB
TypeScript
179 lines
3.8 KiB
TypeScript
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)
|
|
}
|
|
}
|