import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { Prisma, DeliveryRequestStatus, DeliveryRequestType, DeliveryFormStatus, RevenueRecognitionStatus, InvoiceStatus } from '@prisma/client';
import { SnapshotProjectorService } from '../services/snapshot-projector.service';
export interface CreateDeliveryRequestInput {
    deliveryNo: string;
    salesOrderId: string;
    customerId: string;
    requestType: DeliveryRequestType;
    expectedDate: Date | string;
    notes?: string;
}
export interface CreateDeliveryFulfillmentInput {
    deliveryRequestId: string;
    robotUnitId: string;
    deliveredAt: Date | string;
    signedAt?: Date | string;
    signedFormStatus?: DeliveryFormStatus;
    acceptanceFormStatus?: DeliveryFormStatus;
    acceptanceFormPreDel?: DeliveryFormStatus;
    acceptanceFormAttachmentId?: string;
    sapPgiDocNo?: string;
    cost?: number;
    notePreDel?: string;
    additionalShippingNotes?: string;
}
export declare class DeliveryService {
    private readonly prisma;
    private readonly projector;
    private readonly logger;
    constructor(prisma: PrismaService, projector: SnapshotProjectorService);
    createRequest(input: CreateDeliveryRequestInput, userId: string, organizationId: string): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.DeliveryRequestStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        notes: string | null;
        deliveryNo: string;
        salesOrderId: string;
        customerId: string;
        requestType: import("@prisma/client").$Enums.DeliveryRequestType;
        expectedDate: Date;
    }>;
    listRequests(q: {
        salesOrderId?: string;
        customerId?: string;
        status?: DeliveryRequestStatus;
        page?: number;
        limit?: number;
    }): Promise<{
        items: ({
            _count: {
                fulfillments: number;
            };
        } & {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.DeliveryRequestStatus;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            notes: string | null;
            deliveryNo: string;
            salesOrderId: string;
            customerId: string;
            requestType: import("@prisma/client").$Enums.DeliveryRequestType;
            expectedDate: Date;
        })[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    findRequest(id: string): Promise<{
        salesOrder: {
            id: string;
            soNo: string;
        };
        fulfillments: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            version: number;
            cost: Prisma.Decimal | null;
            robotUnitId: string;
            deliveryRequestId: string;
            sapPgiDocNo: string | null;
            deliveredAt: Date;
            signedAt: Date | null;
            signedFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
            acceptanceFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
            acceptanceFormPreDel: import("@prisma/client").$Enums.DeliveryFormStatus | null;
            acceptanceFormAttachmentId: string | null;
            notePreDel: string | null;
            additionalShippingNotes: string | null;
            grossMargin: Prisma.Decimal | null;
            revenueRecognition: import("@prisma/client").$Enums.RevenueRecognitionStatus | null;
            invoiceStatus: import("@prisma/client").$Enums.InvoiceStatus | null;
        }[];
    } & {
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.DeliveryRequestStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        notes: string | null;
        deliveryNo: string;
        salesOrderId: string;
        customerId: string;
        requestType: import("@prisma/client").$Enums.DeliveryRequestType;
        expectedDate: Date;
    }>;
    updateRequest(id: string, input: {
        status?: DeliveryRequestStatus;
        expectedDate?: Date | string;
        notes?: string;
    }, _userId: string): Promise<{
        salesOrder: {
            id: string;
            soNo: string;
        };
        fulfillments: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            version: number;
            cost: Prisma.Decimal | null;
            robotUnitId: string;
            deliveryRequestId: string;
            sapPgiDocNo: string | null;
            deliveredAt: Date;
            signedAt: Date | null;
            signedFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
            acceptanceFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
            acceptanceFormPreDel: import("@prisma/client").$Enums.DeliveryFormStatus | null;
            acceptanceFormAttachmentId: string | null;
            notePreDel: string | null;
            additionalShippingNotes: string | null;
            grossMargin: Prisma.Decimal | null;
            revenueRecognition: import("@prisma/client").$Enums.RevenueRecognitionStatus | null;
            invoiceStatus: import("@prisma/client").$Enums.InvoiceStatus | null;
        }[];
    } & {
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.DeliveryRequestStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        notes: string | null;
        deliveryNo: string;
        salesOrderId: string;
        customerId: string;
        requestType: import("@prisma/client").$Enums.DeliveryRequestType;
        expectedDate: Date;
    }>;
    createFulfillment(input: CreateDeliveryFulfillmentInput, userId: string, organizationId: string): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        cost: Prisma.Decimal | null;
        robotUnitId: string;
        deliveryRequestId: string;
        sapPgiDocNo: string | null;
        deliveredAt: Date;
        signedAt: Date | null;
        signedFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
        acceptanceFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
        acceptanceFormPreDel: import("@prisma/client").$Enums.DeliveryFormStatus | null;
        acceptanceFormAttachmentId: string | null;
        notePreDel: string | null;
        additionalShippingNotes: string | null;
        grossMargin: Prisma.Decimal | null;
        revenueRecognition: import("@prisma/client").$Enums.RevenueRecognitionStatus | null;
        invoiceStatus: import("@prisma/client").$Enums.InvoiceStatus | null;
    }>;
    findFulfillment(id: string): Promise<{
        robotUnit: {
            id: string;
            ffsn: string;
        };
        deliveryRequest: {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.DeliveryRequestStatus;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            notes: string | null;
            deliveryNo: string;
            salesOrderId: string;
            customerId: string;
            requestType: import("@prisma/client").$Enums.DeliveryRequestType;
            expectedDate: Date;
        };
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        cost: Prisma.Decimal | null;
        robotUnitId: string;
        deliveryRequestId: string;
        sapPgiDocNo: string | null;
        deliveredAt: Date;
        signedAt: Date | null;
        signedFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
        acceptanceFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
        acceptanceFormPreDel: import("@prisma/client").$Enums.DeliveryFormStatus | null;
        acceptanceFormAttachmentId: string | null;
        notePreDel: string | null;
        additionalShippingNotes: string | null;
        grossMargin: Prisma.Decimal | null;
        revenueRecognition: import("@prisma/client").$Enums.RevenueRecognitionStatus | null;
        invoiceStatus: import("@prisma/client").$Enums.InvoiceStatus | null;
    }>;
    updateFulfillment(id: string, input: {
        signedFormStatus?: DeliveryFormStatus;
        acceptanceFormStatus?: DeliveryFormStatus;
        acceptanceFormPreDel?: DeliveryFormStatus;
        revenueRecognition?: RevenueRecognitionStatus;
        invoiceStatus?: InvoiceStatus;
        cost?: number;
        grossMargin?: number;
        notePreDel?: string;
        additionalShippingNotes?: string;
    }): Promise<{
        robotUnit: {
            id: string;
            ffsn: string;
        };
        deliveryRequest: {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.DeliveryRequestStatus;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            notes: string | null;
            deliveryNo: string;
            salesOrderId: string;
            customerId: string;
            requestType: import("@prisma/client").$Enums.DeliveryRequestType;
            expectedDate: Date;
        };
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        cost: Prisma.Decimal | null;
        robotUnitId: string;
        deliveryRequestId: string;
        sapPgiDocNo: string | null;
        deliveredAt: Date;
        signedAt: Date | null;
        signedFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
        acceptanceFormStatus: import("@prisma/client").$Enums.DeliveryFormStatus | null;
        acceptanceFormPreDel: import("@prisma/client").$Enums.DeliveryFormStatus | null;
        acceptanceFormAttachmentId: string | null;
        notePreDel: string | null;
        additionalShippingNotes: string | null;
        grossMargin: Prisma.Decimal | null;
        revenueRecognition: import("@prisma/client").$Enums.RevenueRecognitionStatus | null;
        invoiceStatus: import("@prisma/client").$Enums.InvoiceStatus | null;
    }>;
}
