import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { Prisma, SalesOrderStatus, SalesContractStatus, SalesLineType } from '@prisma/client';
export interface CreateSalesOrderInput {
    soNo: string;
    customerId: string;
    salesPersonId?: string;
    mentorId?: string;
    menteeId?: string;
    currencyCode: string;
    contractStatus?: SalesContractStatus;
    notes?: string;
    lines: Array<{
        lineNo: number;
        lineType: SalesLineType;
        unitPrice: number;
        discount?: number;
        currencyCode: string;
        robotUnitId?: string;
        expectedDeliveryDate?: Date | string;
    }>;
}
export interface UpdateSalesOrderInput {
    status?: SalesOrderStatus;
    contractStatus?: SalesContractStatus;
    signedAt?: Date | string;
    closedAt?: Date | string;
    notes?: string;
    d365SoId?: string;
}
export declare class SalesOrderService {
    private readonly prisma;
    private readonly logger;
    constructor(prisma: PrismaService);
    create(input: CreateSalesOrderInput, userId: string, organizationId: string): Promise<{
        lines: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            expectedDeliveryDate: Date | null;
            currencyCode: string;
            lineNo: number;
            unitPrice: Prisma.Decimal;
            robotUnitId: string | null;
            salesOrderId: string;
            lineType: import("@prisma/client").$Enums.SalesLineType;
            discount: Prisma.Decimal | null;
            netAmount: Prisma.Decimal;
        }[];
    } & {
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.SalesOrderStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        totalAmount: Prisma.Decimal;
        notes: string | null;
        closedAt: Date | null;
        currencyCode: string;
        signedAt: Date | null;
        customerId: string;
        soNo: string;
        d365SoId: string | null;
        salesPersonId: string | null;
        mentorId: string | null;
        menteeId: string | null;
        contractStatus: import("@prisma/client").$Enums.SalesContractStatus;
    }>;
    findAll(query: {
        status?: SalesOrderStatus | SalesOrderStatus[];
        customerId?: string;
        search?: string;
        includeDeleted?: boolean;
        page?: number;
        limit?: number;
    }): Promise<{
        items: ({
            _count: {
                deliveryRequests: number;
            };
            lines: {
                id: string;
                createdAt: Date;
                updatedAt: Date;
                expectedDeliveryDate: Date | null;
                currencyCode: string;
                lineNo: number;
                unitPrice: Prisma.Decimal;
                robotUnitId: string | null;
                salesOrderId: string;
                lineType: import("@prisma/client").$Enums.SalesLineType;
                discount: Prisma.Decimal | null;
                netAmount: Prisma.Decimal;
            }[];
        } & {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.SalesOrderStatus;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            version: number;
            totalAmount: Prisma.Decimal;
            notes: string | null;
            closedAt: Date | null;
            currencyCode: string;
            signedAt: Date | null;
            customerId: string;
            soNo: string;
            d365SoId: string | null;
            salesPersonId: string | null;
            mentorId: string | null;
            menteeId: string | null;
            contractStatus: import("@prisma/client").$Enums.SalesContractStatus;
        })[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    findOne(id: string): Promise<{
        lines: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            expectedDeliveryDate: Date | null;
            currencyCode: string;
            lineNo: number;
            unitPrice: Prisma.Decimal;
            robotUnitId: string | null;
            salesOrderId: string;
            lineType: import("@prisma/client").$Enums.SalesLineType;
            discount: Prisma.Decimal | null;
            netAmount: Prisma.Decimal;
        }[];
        deliveryRequests: {
            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;
        status: import("@prisma/client").$Enums.SalesOrderStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        totalAmount: Prisma.Decimal;
        notes: string | null;
        closedAt: Date | null;
        currencyCode: string;
        signedAt: Date | null;
        customerId: string;
        soNo: string;
        d365SoId: string | null;
        salesPersonId: string | null;
        mentorId: string | null;
        menteeId: string | null;
        contractStatus: import("@prisma/client").$Enums.SalesContractStatus;
    }>;
    update(id: string, input: UpdateSalesOrderInput, userId: string): Promise<{
        lines: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            expectedDeliveryDate: Date | null;
            currencyCode: string;
            lineNo: number;
            unitPrice: Prisma.Decimal;
            robotUnitId: string | null;
            salesOrderId: string;
            lineType: import("@prisma/client").$Enums.SalesLineType;
            discount: Prisma.Decimal | null;
            netAmount: Prisma.Decimal;
        }[];
        deliveryRequests: {
            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;
        status: import("@prisma/client").$Enums.SalesOrderStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        totalAmount: Prisma.Decimal;
        notes: string | null;
        closedAt: Date | null;
        currencyCode: string;
        signedAt: Date | null;
        customerId: string;
        soNo: string;
        d365SoId: string | null;
        salesPersonId: string | null;
        mentorId: string | null;
        menteeId: string | null;
        contractStatus: import("@prisma/client").$Enums.SalesContractStatus;
    }>;
    softDelete(id: string, _userId: string): Promise<{
        message: string;
        id: string;
    }>;
}
