import { Response } from 'express';
import { InvoiceService } from './invoice.service';
import { InvoiceSelectionDto, CreateInvoiceDto } from './dto/invoice-selection.dto';
import { OpeningBalanceSelectionDto, CreateOpeningBalanceInvoiceDto } from './dto/opening-balance-invoice.dto';
import { UpdateInvoiceDto } from './dto/update-invoice.dto';
import { CancelInvoiceDto } from './dto/cancel-invoice.dto';
import { ListInvoiceDto } from './dto/list-invoice.dto';
export declare class InvoiceController {
    private readonly invoiceService;
    constructor(invoiceService: InvoiceService);
    preview(dto: InvoiceSelectionDto, req: any): Promise<{
        draft_invoice_number: string;
        is_reserved: boolean;
        invoice_type: import("./schema/invoice.schema").InvoiceType;
        customer: {
            _id: import("mongoose").Types.ObjectId;
            name: string;
            gst_number: string;
        };
        trips: {
            _id: any;
            trip_id: any;
            date: any;
            route: string;
            vehicle: any;
            freight_amount: any;
            gst_amount: any;
            outstanding_balance: any;
        }[];
        subtotal_freight: any;
        gst_amount: any;
        grand_total: any;
        advance_received: number;
        previous_outstanding: number;
        amount_due: number;
        billing_period_start: number | null;
        billing_period_end: number | null;
        duplicate_warnings: import("./invoice.service").TripConflict[];
        payment_terms: string;
        due_date: number;
    }>;
    create(dto: CreateInvoiceDto, req: any): Promise<import("mongoose").Document<unknown, {}, import("mongoose").Document<unknown, {}, import("./schema/invoice.schema").Invoice, {}> & import("./schema/invoice.schema").Invoice & {
        _id: import("mongoose").Types.ObjectId;
    } & {
        __v: number;
    }, {}> & import("mongoose").Document<unknown, {}, import("./schema/invoice.schema").Invoice, {}> & import("./schema/invoice.schema").Invoice & {
        _id: import("mongoose").Types.ObjectId;
    } & {
        __v: number;
    } & Required<{
        _id: import("mongoose").Types.ObjectId;
    }>>;
    previewOpeningBalance(dto: OpeningBalanceSelectionDto, req: any): Promise<{
        draft_invoice_number: string;
        is_reserved: boolean;
        invoice_type: import("./schema/invoice.schema").InvoiceType;
        customer: {
            _id: any;
            name: any;
            gst_number: any;
        };
        trips: never[];
        subtotal_freight: number;
        gst_amount: number;
        grand_total: number;
        advance_received: number;
        previous_outstanding: number;
        amount_due: number;
        opening_balance_date: any;
        opening_balance_description: any;
        duplicate_warnings: never[];
        payment_terms: string;
        due_date: number;
    }>;
    createOpeningBalance(dto: CreateOpeningBalanceInvoiceDto, req: any): Promise<import("mongoose").Document<unknown, {}, import("mongoose").Document<unknown, {}, import("./schema/invoice.schema").Invoice, {}> & import("./schema/invoice.schema").Invoice & {
        _id: import("mongoose").Types.ObjectId;
    } & {
        __v: number;
    }, {}> & import("mongoose").Document<unknown, {}, import("./schema/invoice.schema").Invoice, {}> & import("./schema/invoice.schema").Invoice & {
        _id: import("mongoose").Types.ObjectId;
    } & {
        __v: number;
    } & Required<{
        _id: import("mongoose").Types.ObjectId;
    }>>;
    list(query: ListInvoiceDto, req: any): Promise<{
        status: string;
        message: string;
        data: any[];
        pagination: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
            hasNextPage: boolean;
            hasPrevPage: boolean;
        };
    }>;
    getById(id: string, req: any): Promise<any>;
    downloadPdf(id: string, req: any, res: Response): Promise<void>;
    update(id: string, dto: UpdateInvoiceDto, req: any): Promise<any>;
    cancel(id: string, dto: CancelInvoiceDto, req: any): Promise<any>;
}
