import { SalesContractStatus, SalesLineType, SalesOrderStatus } from '@prisma/client';
import type { CurrentUserPayload } from "../../../common/decorators/current-user.decorator";
import { SalesOrderService } from './sales-order.service';
declare class CreateSalesOrderLineDto {
    lineNo: number;
    lineType: SalesLineType;
    unitPrice: number;
    discount?: number;
    currencyCode: string;
    robotUnitId?: string;
    expectedDeliveryDate?: string;
}
declare class CreateSalesOrderDto {
    soNo: string;
    customerId: string;
    salesPersonId?: string;
    mentorId?: string;
    menteeId?: string;
    currencyCode: string;
    contractStatus?: SalesContractStatus;
    notes?: string;
    lines: CreateSalesOrderLineDto[];
}
declare class UpdateSalesOrderDto {
    status?: SalesOrderStatus;
    contractStatus?: SalesContractStatus;
    signedAt?: string;
    closedAt?: string;
    notes?: string;
    d365SoId?: string;
}
declare class QuerySalesOrderDto {
    search?: string;
    status?: SalesOrderStatus;
    customerId?: string;
    includeDeleted?: boolean;
    page?: number;
    limit?: number;
}
export declare class SalesOrderController {
    private readonly service;
    constructor(service: SalesOrderService);
    list(q: QuerySalesOrderDto): Promise<{
        items: ({
            _count: {
                deliveryRequests: number;
            };
            lines: {
                id: string;
                createdAt: Date;
                updatedAt: Date;
                expectedDeliveryDate: Date | null;
                currencyCode: string;
                lineNo: number;
                unitPrice: import("@prisma/client/runtime/library").Decimal;
                robotUnitId: string | null;
                salesOrderId: string;
                lineType: import("@prisma/client").$Enums.SalesLineType;
                discount: import("@prisma/client/runtime/library").Decimal | null;
                netAmount: import("@prisma/client/runtime/library").Decimal;
            }[];
        } & {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.SalesOrderStatus;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            version: number;
            totalAmount: import("@prisma/client/runtime/library").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: import("@prisma/client/runtime/library").Decimal;
            robotUnitId: string | null;
            salesOrderId: string;
            lineType: import("@prisma/client").$Enums.SalesLineType;
            discount: import("@prisma/client/runtime/library").Decimal | null;
            netAmount: import("@prisma/client/runtime/library").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: import("@prisma/client/runtime/library").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;
    }>;
    create(dto: CreateSalesOrderDto, user: CurrentUserPayload): Promise<{
        lines: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            expectedDeliveryDate: Date | null;
            currencyCode: string;
            lineNo: number;
            unitPrice: import("@prisma/client/runtime/library").Decimal;
            robotUnitId: string | null;
            salesOrderId: string;
            lineType: import("@prisma/client").$Enums.SalesLineType;
            discount: import("@prisma/client/runtime/library").Decimal | null;
            netAmount: import("@prisma/client/runtime/library").Decimal;
        }[];
    } & {
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.SalesOrderStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        totalAmount: import("@prisma/client/runtime/library").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, dto: UpdateSalesOrderDto, user: CurrentUserPayload): Promise<{
        lines: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            expectedDeliveryDate: Date | null;
            currencyCode: string;
            lineNo: number;
            unitPrice: import("@prisma/client/runtime/library").Decimal;
            robotUnitId: string | null;
            salesOrderId: string;
            lineType: import("@prisma/client").$Enums.SalesLineType;
            discount: import("@prisma/client/runtime/library").Decimal | null;
            netAmount: import("@prisma/client/runtime/library").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: import("@prisma/client/runtime/library").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;
    }>;
    remove(id: string, user: CurrentUserPayload): Promise<{
        message: string;
        id: string;
    }>;
}
export {};
