import { CustomerType, LocationType, PartnerRole, SupplierType } from '@prisma/client';
import type { CurrentUserPayload } from "../../common/decorators/current-user.decorator";
import { CustomerService } from './services/customer.service';
import { SupplierService } from './services/supplier.service';
import { PartnerService } from './services/partner.service';
import { LocationService } from './services/location.service';
import { CurrencyService } from './services/currency.service';
declare class CurrencyDto {
    code: string;
    name: string;
    symbol?: string;
    decimals?: number;
    enabled?: boolean;
}
declare class UpdateCurrencyDto {
    name?: string;
    symbol?: string;
    decimals?: number;
    enabled?: boolean;
}
declare class CustomerDto {
    code?: string;
    name: string;
    type?: CustomerType;
    industry?: string;
    countryCode?: string;
    taxId?: string;
    creditLimit?: number;
    currencyCode?: string;
    enabled?: boolean;
}
declare class UpdateCustomerDto {
    name?: string;
    type?: CustomerType;
    industry?: string;
    countryCode?: string;
    taxId?: string;
    creditLimit?: number;
    currencyCode?: string;
    enabled?: boolean;
}
declare class SupplierDto {
    code?: string;
    name: string;
    type?: SupplierType;
    countryCode?: string;
    currencyCode?: string;
    paymentTerms?: string;
    leadTimeDays?: number;
    enabled?: boolean;
}
declare class UpdateSupplierDto {
    name?: string;
    type?: SupplierType;
    countryCode?: string;
    currencyCode?: string;
    paymentTerms?: string;
    leadTimeDays?: number;
    enabled?: boolean;
}
declare class PartnerDto {
    code?: string;
    name: string;
    role: PartnerRole;
    countryCode?: string;
    currencyCode?: string;
    enabled?: boolean;
}
declare class UpdatePartnerDto {
    name?: string;
    role?: PartnerRole;
    countryCode?: string;
    currencyCode?: string;
    enabled?: boolean;
}
declare class LocationDto {
    code?: string;
    name: string;
    type: LocationType;
    countryCode?: string;
    address?: string;
    parentLocationId?: string;
    customerId?: string;
    enabled?: boolean;
}
declare class UpdateLocationDto {
    name?: string;
    type?: LocationType;
    countryCode?: string;
    address?: string;
    parentLocationId?: string;
    customerId?: string;
    enabled?: boolean;
}
export declare class MasterDataController {
    private readonly customer;
    private readonly supplier;
    private readonly partner;
    private readonly location;
    private readonly currency;
    constructor(customer: CustomerService, supplier: SupplierService, partner: PartnerService, location: LocationService, currency: CurrencyService);
    createCurrency(dto: CurrencyDto, user: CurrentUserPayload): Promise<{
        symbol: string | null;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        updatedAt: Date;
        organizationId: string | null;
        createdById: string | null;
        enabled: boolean;
        decimals: number;
    }>;
    updateCurrency(code: string, dto: UpdateCurrencyDto): Promise<{
        symbol: string | null;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        updatedAt: Date;
        organizationId: string | null;
        createdById: string | null;
        enabled: boolean;
        decimals: number;
    }>;
    disableCurrency(code: string): Promise<{
        symbol: string | null;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        updatedAt: Date;
        organizationId: string | null;
        createdById: string | null;
        enabled: boolean;
        decimals: number;
    }>;
    enableCurrency(code: string): Promise<{
        symbol: string | null;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        updatedAt: Date;
        organizationId: string | null;
        createdById: string | null;
        enabled: boolean;
        decimals: number;
    }>;
    listCustomers(search?: string, type?: CustomerType, enabledOnly?: string): Promise<({
        _count: {
            contacts: number;
            addresses: number;
        };
    } & {
        type: import("@prisma/client").$Enums.CustomerType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        taxId: string | null;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        industry: string | null;
        creditLimit: import("@prisma/client/runtime/library").Decimal | null;
    })[]>;
    getCustomer(id: string): Promise<{
        contacts: {
            role: string | null;
            id: string;
            createdAt: Date;
            name: string;
            email: string | null;
            phone: string | null;
            updatedAt: Date;
            isPrimary: boolean;
            customerId: string;
        }[];
        addresses: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            state: string | null;
            isDefault: boolean;
            city: string | null;
            countryCode: string | null;
            customerId: string;
            addressType: string;
            line1: string;
            line2: string | null;
            postalCode: string | null;
        }[];
    } & {
        type: import("@prisma/client").$Enums.CustomerType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        taxId: string | null;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        industry: string | null;
        creditLimit: import("@prisma/client/runtime/library").Decimal | null;
    }>;
    createCustomer(dto: CustomerDto, user: CurrentUserPayload): Promise<{
        type: import("@prisma/client").$Enums.CustomerType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        taxId: string | null;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        industry: string | null;
        creditLimit: import("@prisma/client/runtime/library").Decimal | null;
    }>;
    updateCustomer(id: string, dto: UpdateCustomerDto): Promise<{
        type: import("@prisma/client").$Enums.CustomerType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        taxId: string | null;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        industry: string | null;
        creditLimit: import("@prisma/client/runtime/library").Decimal | null;
    }>;
    deleteCustomer(id: string): Promise<{
        id: string;
        deleted: boolean;
    }>;
    restoreCustomer(id: string): Promise<{
        contacts: {
            role: string | null;
            id: string;
            createdAt: Date;
            name: string;
            email: string | null;
            phone: string | null;
            updatedAt: Date;
            isPrimary: boolean;
            customerId: string;
        }[];
        addresses: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            state: string | null;
            isDefault: boolean;
            city: string | null;
            countryCode: string | null;
            customerId: string;
            addressType: string;
            line1: string;
            line2: string | null;
            postalCode: string | null;
        }[];
    } & {
        type: import("@prisma/client").$Enums.CustomerType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        taxId: string | null;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        industry: string | null;
        creditLimit: import("@prisma/client/runtime/library").Decimal | null;
    }>;
    listSuppliers(search?: string, type?: SupplierType, enabledOnly?: string): Promise<({
        _count: {
            contacts: number;
        };
    } & {
        type: import("@prisma/client").$Enums.SupplierType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        paymentTerms: string | null;
        leadTimeDays: number | null;
    })[]>;
    getSupplier(id: string): Promise<{
        contacts: {
            role: string | null;
            id: string;
            createdAt: Date;
            name: string;
            email: string | null;
            phone: string | null;
            updatedAt: Date;
            isPrimary: boolean;
            supplierId: string;
        }[];
    } & {
        type: import("@prisma/client").$Enums.SupplierType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        paymentTerms: string | null;
        leadTimeDays: number | null;
    }>;
    createSupplier(dto: SupplierDto, user: CurrentUserPayload): Promise<{
        type: import("@prisma/client").$Enums.SupplierType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        paymentTerms: string | null;
        leadTimeDays: number | null;
    }>;
    updateSupplier(id: string, dto: UpdateSupplierDto): Promise<{
        type: import("@prisma/client").$Enums.SupplierType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        paymentTerms: string | null;
        leadTimeDays: number | null;
    }>;
    deleteSupplier(id: string): Promise<{
        id: string;
        deleted: boolean;
    }>;
    restoreSupplier(id: string): Promise<{
        contacts: {
            role: string | null;
            id: string;
            createdAt: Date;
            name: string;
            email: string | null;
            phone: string | null;
            updatedAt: Date;
            isPrimary: boolean;
            supplierId: string;
        }[];
    } & {
        type: import("@prisma/client").$Enums.SupplierType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
        paymentTerms: string | null;
        leadTimeDays: number | null;
    }>;
    listPartners(search?: string, role?: PartnerRole, enabledOnly?: string): Promise<{
        role: import("@prisma/client").$Enums.PartnerRole;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
    }[]>;
    getPartner(id: string): Promise<{
        contacts: {
            role: string | null;
            id: string;
            createdAt: Date;
            name: string;
            email: string | null;
            phone: string | null;
            updatedAt: Date;
            isPrimary: boolean;
            partnerId: string;
        }[];
    } & {
        role: import("@prisma/client").$Enums.PartnerRole;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
    }>;
    createPartner(dto: PartnerDto, user: CurrentUserPayload): Promise<{
        role: import("@prisma/client").$Enums.PartnerRole;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
    }>;
    updatePartner(id: string, dto: UpdatePartnerDto): Promise<{
        role: import("@prisma/client").$Enums.PartnerRole;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
    }>;
    deletePartner(id: string): Promise<{
        id: string;
        deleted: boolean;
    }>;
    restorePartner(id: string): Promise<{
        contacts: {
            role: string | null;
            id: string;
            createdAt: Date;
            name: string;
            email: string | null;
            phone: string | null;
            updatedAt: Date;
            isPrimary: boolean;
            partnerId: string;
        }[];
    } & {
        role: import("@prisma/client").$Enums.PartnerRole;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        enabled: boolean;
        countryCode: string | null;
        currencyCode: string | null;
    }>;
    listLocations(search?: string, type?: LocationType, customerId?: string, enabledOnly?: string): Promise<{
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: import("@prisma/client/runtime/library").Decimal | null;
        longitude: import("@prisma/client/runtime/library").Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }[]>;
    getLocation(id: string): Promise<{
        children: {
            type: import("@prisma/client").$Enums.LocationType;
            code: string;
            id: string;
            createdAt: Date;
            name: string;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            address: string | null;
            enabled: boolean;
            latitude: import("@prisma/client/runtime/library").Decimal | null;
            longitude: import("@prisma/client/runtime/library").Decimal | null;
            countryCode: string | null;
            customerId: string | null;
            parentLocationId: string | null;
        }[];
        parent: {
            type: import("@prisma/client").$Enums.LocationType;
            code: string;
            id: string;
            createdAt: Date;
            name: string;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            address: string | null;
            enabled: boolean;
            latitude: import("@prisma/client/runtime/library").Decimal | null;
            longitude: import("@prisma/client/runtime/library").Decimal | null;
            countryCode: string | null;
            customerId: string | null;
            parentLocationId: string | null;
        } | null;
    } & {
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: import("@prisma/client/runtime/library").Decimal | null;
        longitude: import("@prisma/client/runtime/library").Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }>;
    createLocation(dto: LocationDto, user: CurrentUserPayload): Promise<{
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: import("@prisma/client/runtime/library").Decimal | null;
        longitude: import("@prisma/client/runtime/library").Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }>;
    updateLocation(id: string, dto: UpdateLocationDto): Promise<{
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: import("@prisma/client/runtime/library").Decimal | null;
        longitude: import("@prisma/client/runtime/library").Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }>;
    deleteLocation(id: string): Promise<{
        id: string;
        deleted: boolean;
    }>;
    restoreLocation(id: string): Promise<{
        children: {
            type: import("@prisma/client").$Enums.LocationType;
            code: string;
            id: string;
            createdAt: Date;
            name: string;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            address: string | null;
            enabled: boolean;
            latitude: import("@prisma/client/runtime/library").Decimal | null;
            longitude: import("@prisma/client/runtime/library").Decimal | null;
            countryCode: string | null;
            customerId: string | null;
            parentLocationId: string | null;
        }[];
        parent: {
            type: import("@prisma/client").$Enums.LocationType;
            code: string;
            id: string;
            createdAt: Date;
            name: string;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            address: string | null;
            enabled: boolean;
            latitude: import("@prisma/client/runtime/library").Decimal | null;
            longitude: import("@prisma/client/runtime/library").Decimal | null;
            countryCode: string | null;
            customerId: string | null;
            parentLocationId: string | null;
        } | null;
    } & {
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: import("@prisma/client/runtime/library").JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: import("@prisma/client/runtime/library").Decimal | null;
        longitude: import("@prisma/client/runtime/library").Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }>;
}
export {};
