// Generated by dts-bundle v0.7.3

/**
    * This method makes the EVA SDK ready for use and configures access to your back-end datastore
    * @param  {string}     authenticationToken   Your application authentication token
    * @param  {number}     applicationId         The application identifier for your store
    * @param  {string}     endPointURL           The URL for the EVA back-end store you want to use
    * @return {void}                             This method doesn't return anything
    */
export function init(authenticationToken: string, applicationId: number, endPointURL?: string): void;
/**
    * Expose the settings manager and the means to override the XMLHttpRequest provider
    */
/**
    * These are the data providers availabe in eva
    */

/**
    * This declares the known settings for the EVA SDK
    */
export interface IEvaSettings {
        userAuthenticationToken?: string;
        siteAuthenticationToken?: string;
        applicationId?: number;
        sessionId?: string;
        endPointURL: string;
        language: string;
        version: string;
        clientName: string;
        productProperties: string[];
        appName: string;
        appVersion: string;
        applicationToken: string;
}
/**
    * The settings manager provides methods to get and set EVA client options
    * @type {namespace}
    */
export namespace SettingsManager {
        /**
            * Generates a new session identifier for all future service calls
            * @return {string} The current session identifier
            */
        function generateSessionID(): string;
        /**
            * Changes the currently configured site authentication token.
            * @return {string} An authorisation token
            */
        function setSiteAuthenticationToken(token: string): string;
        /**
            * Changes the currently configured user authentication token. This token
            * will be used in favor of the site authentication token.
            * @return {string} An authorisation token
            */
        function setUserAuthenticationToken(token: string): string;
        /**
            * Return the currently configured authentication token
            * @return {string} An authorisation token
            */
        function getAuthenticationToken(): string;
        /**
            * Changes the currently configured session identifier
            * @return {string} A session identifier
            */
        function setSessionId(sessionId: string): string;
        /**
            * Return the currently configured session identifier
            * @return {string} A session identifier
            */
        function getSessionId(): string;
        /**
            * Return the currently configured end point URL
            * @return {string} An end point URL
            */
        function getEndPointURL(): string;
        /**
            * Changes the currently configured end point URL
            * @return {string} An end point URL
            */
        function setEndPointURL(URL: string): string;
        /**
            * Return the currently configured application identifier
            * @return {number} An application identifier
            */
        function getApplicationId(): number;
        /**
            * Changes the currently configured application identifier
            * @return {number} An application identifier
            */
        function setApplicationId(applicationId: number): number;
        /**
            * Returns the currently configured client language
            * @return {string} Language code (ex. nl-NL)
            */
        function getLanguage(): string;
        /**
            * Changes the currently configured client language
            * @return {string} Language code (ex. nl-NL)
            */
        function setLanguage(languageCode: string): string;
        /**
            * Returns the current client version number which is in semver format
            * @return {string} Version number (ex. 0.1.0)
            */
        function getVersion(): string;
        /**
            * Returns the current client name
            * @return {string} Client name
            */
        function getClientName(): string;
        /**
            * Changes the currently configured client language
            * @return {string} Language code (ex. nl-NL)
            */
        function setAppDetails(name: string, version: string): string;
        /**
            * Returns the current app version number which is in semver format
            * @return {string} Version number (ex. 0.1.0)
            */
        function getAppVersion(): string;
        /**
            * Returns the current app name
            * @return {string} App name
            */
        function getAppName(): string;
        /**
            * Returns the currently configured product properties
            *
            * @export
            * @returns {string[]}
            */
        function getProductProperties(): string[];
        /**
            * Set the currently configured product properties
            *
            * @export
            * @param {string[]} properties
            * @returns {string[]}
            */
        function setProductProperties(properties: string[]): string[];
        /**
            * Changes the currently configured application token. This token is sent
            * to the EVA backend using the EVA-App-Token header
            *
            * @return {string} An application token
            */
        function setApplicationToken(token: string): string;
        /**
            * Return the currently configured application token
            *
            * @return {string} An application token
            */
        function getApplicationToken(): string;
}

/**
    * For node.js or alternative platforms you can use setTransportProvider to point to an XHR alternative
    * @param  {any}    alternativeXMLHttpRequest   Platform specific or alternative XMLHttpRequest implementation
    * @return {void}                               This method does not return anything
    */
export function setTransportProvider(alternativeXMLHttpRequest: any): void;
/**
    * Create a new instance of an XMLHttpRequest object
    * @return {any} The XMLHttpRequest instance
    */
export function createTransport(): any;
/**
    * Possible XMLHttpRequest call methods
    * @type {enum}
    */
export enum EXMLHttpRequestMethod {
        GET = 0,
        POST = 1,
        PUT = 2,
        DELETE = 3,
        PATCH = 4
}
/**
    * These are all the parameters that can be provided for an XMLHttpRequest call
    * @type {interface}
    */
export interface IXMLHttpRequestParameters {
        method: EXMLHttpRequestMethod;
        url: string;
        contentType?: string;
        headers?: any;
        data?: any;
        username?: string;
        password?: string;
}
/**
    * Any response is returned along with its HTTP responseStatus code
    * @type {interface}
    */
export interface IXMLHttpRequestResponse {
        status: number;
        response: any;
        xhr: XMLHttpRequest;
}
/**
    * Provides a wrapper for an XMLHttpRequest call
    * @type {class}
    */
export class XHR {
        appendURL(url: string, parameters: any): string;
        /**
            * Sets the XMLHttpRequest timeout to another value then the default 30 seconds
            * @param  {number} timeout The new timeout value in milliseconds
            * @return {number}         A timeout in milliseconds
            */
        setTimeout(timeout: number): number;
        /**
            * Return the current XMLHttpRequest timeout value
            * @return {number} A timeout in milliseconds
            */
        getTimeout(): number;
        /**
            * Performs an XMLHttpRequest call
            * @param  {IXMLHttpRequestParameters}  params  The call parameters
            * @return {Promise<IXMLHttpRequestResponse>} A promise that will resolve or reject depending on the call response
            */
        call(params: IXMLHttpRequestParameters): Promise<IXMLHttpRequestResponse>;
}

/**
    * This module provides access to an EVA Service call and ensures all required
    * settings, headers and call conditions are met
    *
    * @preferred
    */
/**
    * Any response is returned along with its HTTP responseStatus code
    * @type {interface}
    */
export interface IEVAServiceResponse<REQ, RES> {
        request: REQ;
        response: RES;
        status: number;
        xhr: XMLHttpRequest;
}
/**
    * Wrapper class for a call to the EVA back-end
    * Ensure all proper settings are applied and handles all the type casting of
    * request and response for the XMLHttpRequest calls
    * @type {class}
    */
export class EVAService<REQ, RES> {
        /**
            * Constructor for the EVAService class
            * @param  {string} name    The name of the EVA service to call
            * @return {void}           This method returns nothing
            */
        constructor(name: string, path?: string, method?: EXMLHttpRequestMethod);
        /**
            * Convenience method to get the current session ID
            * @return {string} The current sessionID
            */
        getSessionID(): string;
        /**
            * Performs the actual call to the backend
            * @param  {REQ}        requestData The data to be sent as the body for this call
            * @return {Promise}                Return a promise that will resolve with the call response
            */
        call(requestData?: REQ, disableCache?: boolean, timeout?: number): Promise<IEVAServiceResponse<REQ, RES>>;
}

/**
    * The applications module provides access to the applications data from the EVA back-end
    * @preferred
    */
/**
    * Provides access to an order available in EVA
    */
export class Application extends FetchableItem<EVA.Core.Services.ApplicationDto, EVA.Core.Services.GetCurrentApplication, EVA.Core.Services.GetCurrentApplicationResponse> {
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.GetCurrentApplication, EVA.Core.Services.GetCurrentApplicationResponse>>;
        setData(response: EVA.Core.Services.GetCurrentApplicationResponse): EVA.Core.Services.ApplicationDto;
        configuration(): Promise<IEVAServiceResponse<EVA.Core.Services.GetApplicationConfiguration, EVA.Core.Services.GetApplicationConfigurationResponse>>;
}

/**
    * The applications module provides access to the applications data from the EVA back-end
    * @preferred
    */
/**
    * Provides access to a babylon Brands (fashion) in EVA
    */
export class Brand extends FetchableItem<EVA.PIM.Core.BrandDto, EVA.PIM.Core.GetBrand, EVA.PIM.Core.GetBrandResponse> {
        fetch(): Promise<IEVAServiceResponse<EVA.PIM.Core.GetBrand, EVA.PIM.Core.GetBrandResponse>>;
}
export class Brands extends FetchablePagedList<EVA.Core.Services.ListBrandsResponseBrandDto, EVA.Core.Services.ListBrands, EVA.Core.Services.ListBrandsResponse> {
        /**
            * Sets the current item details using the fetched service response.
            * Extending classes should override this method to pull the details from response
            * @param  {RES}        response    The response from the service call
            * @return {Array<T>}               The item details
            */
        setData(response: any): EVA.Core.Services.ListBrandsResponseBrandDto[];
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.ListBrandsPaged, EVA.Core.Services.ListBrandsResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.ListBrands, EVA.Core.Services.ListBrandsResponse>>;
}
export function searchBrands(query: string, pageSize?: number): Promise<IEVAServiceResponse<EVA.Core.Services.SearchBrands, EVA.Core.Services.SearchBrandsResponse>>;

export namespace Discounts {
    function searchByQuery(requestBody: EVA.Core.Services.Management.SearchDiscountsByQuery): Promise<EVA.Core.Services.Management.SearchDiscountsByQueryResponse>;
    function listManualDiscounts(requestBody: EVA.Core.Services.ListManualDiscounts): Promise<EVA.Core.Services.ListManualDiscountsResponse>;
    function getDiscountCoupons(requestBody: EVA.Core.Services.Management.GetDiscountCoupons): Promise<EVA.Core.Services.Management.GetDiscountCouponsResponse>;
}

export namespace DocumentSigning {
    function getSigningCodeForOrder(orderId: number): Promise<IEVAServiceResponse<EVA.DocumentSigning.GetSigningCodeForOrder, EVA.DocumentSigning.GetSigningCodeForOrderResponse>>;
    function getSigningDataForOrder(hashId: string): Promise<IEVAServiceResponse<EVA.DocumentSigning.GetSigningDataForOrder, EVA.DocumentSigning.GetSigningDataForOrderResponse>>;
    function signOrder(signature: string, mimeType: string, hashId: string): Promise<IEVAServiceResponse<EVA.DocumentSigning.SignOrder, EVA.API.RequestMessageWithEmptyResponse>>;
}

export interface IEVALoginOptions {
        organizationUnitId?: number;
        confirmationToken?: string;
        identificationCode?: string;
        selectOrganizationByApplicationID?: boolean;
        publicLogin?: boolean;
        registerApiKey?: boolean;
        context?: string;
}
export interface IEVACreateCustomer {
        noAccount?: boolean;
        autoLogin?: boolean;
}
/**
    * General namespace for Users function
    */
export namespace Users {
        /**
            * Request a token (via e-mail) for a user
            *
            * @param  {string}  emailAddress the e-mail adres of the user to request the token for
            * @return {Promise}              A promise that is fulfilled when the EVA Core service responds
            */
        function requestResetPassword(emailAddress: string): Promise<IEVAServiceResponse<EVA.Core.Services.RequestPasswordResetToken, EVA.API.EmptyResponseMessage>>;
        /**
            * Reset a user password using a token that was received in an e-mail
            *
            * @param  {string}  newPassword the new password
            * @param  {string}  token       the token to be used for this reset
            * @return {Promise}             A promise that is fulfilled when the EVA Core service responds
            */
        function resetPassword(newPassword: string, token: string): Promise<IEVAServiceResponse<EVA.Core.Services.ResetUserPassword, EVA.Core.Services.ResetUserPasswordResponse>>;
}
/**
    * Provides authentication to EVA
    *
    * id is authentication
    */
export class LoggedInUser extends FetchableItem<EVA.Core.LoggedInUserDto, EVA.Core.Services.GetCurrentUser, EVA.Core.Services.GetCurrentUserResponse> {
        orders: CustomerOrderList;
        authentication: number;
        organisationUnits: Array<EVA.Core.OrganizationUnitDto>;
        isAnonymous: boolean;
        isEmployee: boolean;
        isCustomer: boolean;
        static checkEmailAddressAvailability(emailAddress: string): Promise<any>;
        static checkNicknameAvailability(nickname: string): Promise<any>;
        /**
            * Register a new customer and autologin
            *
            * @param  {any}            customer EVA.Core.Services.CustomerDto but only EmailAddress
            * @return {Promise<any>}   A promise that is fulfilled when the EVA Core service responds
            */
        static register(customer: any, autoLogin?: boolean, noAccount?: boolean): Promise<any>;
        /**
            * Register a new customer with company
            *
            * @param  {EVA.Core.Services.CreateCustomerWithCompany} request    Create a customer with company request
            * @return {Promise<any>}                                           A promise that is fulfilled when the EVA Core service responds
            */
        static registerWithCompany(request: EVA.Core.Services.CreateCustomerWithCompany): Promise<EVA.Core.Services.CreateCustomerWithCompanyResponse>;
        /**
            * Retrieve the company details for a user
            * @return {Promise<EVA.Core.CompanyDto>}
            */
        static getCompanyForUser(userId: number): Promise<EVA.Core.CompanyDto>;
        /**
            * Method to update a company that belongs to the logged-in user
            *
            * @param {EVA.Core.CompanyDto} company The company to update
            * @returns {Promise<boolean>} Promise that returns true if update was successful
            */
        static updateCompanyForUser(userId: number, company: EVA.Core.CompanyDto): Promise<boolean>;
        /**
            * Search for customers
            *
            * @param  {string}           query           The query to search on
            * @param  {number}           limit           The page size limit. Defaults to 15
            * @param  {number}           start           The item to start the list at. Defaults to 0 and is a 0-based index.
            * @return {Promise<any>}                     A promise that is fulfilled when the EVA Core service responds
            */
        static searchUsers(options: {
                query?: string;
                employeeId?: number;
                limit: number;
                skip: number;
        }): Promise<any>;
        /**
            * Retrieves and updates current user data
            * @return {Promise} A promise that is fulfilled when the EVA Core service responds
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.GetCurrentUser, EVA.Core.Services.GetCurrentUserResponse>>;
        /**
            * @param  {any}                                  response Provide with body of the response to populate and set properly the data on CurrentUser
            * @return {EVA.Core.LoggedInUserDto}          The current LoggedInUserDto state
            */
        setData(response?: any): EVA.Core.LoggedInUserDto;
        /**
            * Return the current authentication token
            * @return {string} The current authentication token
            */
        getAuthenticationToken(): string;
        /**
            * Perform a login using email adress and password, and optional additional
            * data
            *
            * @param  {string}  login        The email address or username (nickname) to login with
            * @param  {string}  password     The password over the login
            * @param  {IEVALoginOptions?} options An optional structure with additional data for the login
            * @return {Promise}              Will resolve when succesfully logged in or rejected with the authentication result (EVA.Core.AuthenticationResults) or a general error
            */
        login(login: string, password: string, options?: IEVALoginOptions): Promise<IEVAServiceResponse<EVA.Core.Services.Login, EVA.Core.Services.LoginResponse>>;
        /**
            * Switches the organization of the logged in user
            *
            * @param {number} organizationUnitId The new organization id
            * @returns
            * @memberof LoggedInUser
            */
        switchOrganization(organizationUnitId: number): Promise<IEVAServiceResponse<EVA.Core.Services.Login, EVA.Core.Services.LoginResponse>>;
        /**
            * Execute an explicit logout
            *
            * @return {Promise} A promise resolving when the call to the back-end has completed
            */
        logout(): Promise<IEVAServiceResponse<EVA.Core.Services.Logout, EVA.Core.Services.LogoutResponse>>;
        /**
            * Retrieves third party login options
            *
            * @return {Promise} A promise resolving when the call to the back-end has completed
            */
        getThirdPartyLoginOptions(): Promise<IEVAServiceResponse<EVA.Core.Services.GetAvailableThirdPartiesForLogin, EVA.Core.Services.GetAvailableThirdPartiesForLoginResponse>>;
        /**
            * Requests third party login.
            * Response will contain a redirect url that can be used to perform the login
            *
            * @return {Promise} A promise resolving when the call to the back-end has completed
            */
        requestThirdPartyLogin(loginRequest: EVA.Core.Services.RequestThirdPartyLogin): Promise<IEVAServiceResponse<EVA.Core.Services.RequestThirdPartyLogin, EVA.Core.Services.RequestThirdPartyLoginResponse>>;
        /**
            * Perform third party login with a token
            *
            * @return {Promise} A promise resolving when the call to the back-end has completed
            */
        authenticateWithThirdPartyLogin(loginRequest: EVA.Core.Services.AuthenticateWithThirdPartyLogin): Promise<IEVAServiceResponse<EVA.Core.Services.AuthenticateWithThirdPartyLogin, EVA.Core.Services.AuthenticateWithThirdPartyLoginResponse>>;
        /**
            * This call retrieves a paged list of orders belonging to the current user
            *
            * @param  {number}                         start           The item to start the list at. Defaults to 0 and is a 0-based index.
            * @param  {number}                         limit           The page size limit. Defaults to 15
            * @param  {EVA.Framework.SortDirection}  sortDirection          The sorting direction for the list. Defaults to ascending
            * @return {Promise<customerOrderList>}                     A promise resolving when the call to the back-end has completed
            */
        getOrders(id: number, limit?: number, start?: number, sortDirection?: EVA.Framework.SortDirection): Promise<CustomerOrderList>;
        /**
            * This call retrieves a single order
            * @param {number}              order_id                    The ID of the order
            * @param {boolean}             include_failed_payements    If set to true, return order even if the payment has not been completed
            * @return {Promies<Order>}                                 A promise resolving when the call to the back-end has completed
            */
        getOrder(order_id: number, include_failed_payements: boolean): Promise<Order>;
        /**
            * Update the user
            *
            * @return {Promise} A promise resolving when the call to the back-end has completed
            */
        update(): Promise<IEVAServiceResponse<EVA.Core.Services.UpdateUser, EVA.Core.Services.UpdateUserResponse>>;
        /**
            * Update the user's email address
            *
            * @return {Promise} A promise resolving when the call to the back-end has completed
            */
        updateUserEmailAddress(newEmailAddress: string): Promise<IEVAServiceResponse<EVA.Core.Services.UpdateUserEmailAddress, EVA.API.RequestMessageWithEmptyResponse>>;
        /**
            * Change the passowrd of this user
            *
            * @param  {string}  newPassword The new password
            * @param  {string}  oldPassword The current / old password
            * @return {Promise}             A promise resolving when the call to the back-end has completed
            */
        changePassword(newPassword: string, oldPassword: string): Promise<IEVAServiceResponse<EVA.Core.Services.ChangeUserPassword, EVA.Core.Services.ChangeUserPasswordResponse>>;
}
export class User extends FetchableItem<EVA.Core.UserDto, EVA.Core.Services.GetUser, EVA.Core.Services.GetUserResponse> {
        isAnonymous: boolean;
        isEmployee: boolean;
        isCustomer: boolean;
        /**
            * Update the user
            *
            * @return {Promise} A promise resolving when the call to the back-end has completed
            */
        update(userDto: EVA.Core.UserDto): Promise<IEVAServiceResponse<EVA.Core.Services.UpdateUser, EVA.Core.Services.UpdateUserResponse>>;
        /**
            * Retrieves specific user data
            * @return {Promise} A promise that is fulfilled when the EVA Core service responds
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.GetUser, EVA.Core.Services.GetUserResponse>>;
        /**
            * @param  {any}                                  response  Service response containing the user data
            * @return {EVA.Core.UserDto}                   The user data
            */
        setData(response?: any): EVA.Core.UserDto;
}

/**
    * The orders module provides access to the order data from the EVA back-end
    * @preferred
    */
export interface IEVAProduceInvoiceOptions {
        downloadInvoice?: boolean;
        emailAddress?: string;
        invoiceId?: number;
        printInvoice?: boolean;
        remark?: string;
        stationId?: string;
}
export interface IEVAProduceDocumentsOptions {
        printInvoice?: boolean;
        emailInvoice?: boolean;
        printReceipt?: boolean;
        stationId?: number;
        orderID?: number;
        emailAddress?: string;
        remark?: string;
}
/**
    * Provides access to an order available in EVA
    */
export class Order extends FetchableItem<EVA.Core.OrderDto, EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse> {
        /**
            * The payment options for the order
            * @type {Payment}
            */
        payment: Payments;
        /**
            * Flag to include pending payments in fetch
            *
            * @type {boolean}
            * @memberof Order
            */
        includePendingPayments: boolean;
        /**
            * Flag to include failed payments in fetch
            *
            * @type {boolean}
            * @memberof Order
            */
        includeFailedPayments: boolean;
        /**
            * This class wraps an order from EVA and the operations you can perform on it.
            * You should supply the order identifier when creating an instance of this class
            *
            * @param  {number | string}    id      The identifier of the order to retrieve
            * @return {void}                       This method doesn't return anything
            */
        constructor(id?: number | string);
        /**
            * Returns if the order state 'completed' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isCompleted(): boolean;
        /**
            * Returns if the order state 'shipped' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isShipped(): boolean;
        /**
            * Returns if the order state 'paid' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isPaid(): boolean;
        /**
            * Returns if the order state 'invoiced' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isInvoiced(): boolean;
        /**
            * Returns if the order state 'cancelled' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isCancelled(): boolean;
        /**
            * Returns the current open amount still to be paid for the order
            * @return {number}
            */
        getOpenAmount(): number;
        /**
            * Returns the total value of all the items in the order with VAT
            * @return {number} The value of the items in the order with VAT
            */
        getTotalAmountInTax(): number;
        /**
            * Return the current order amounts
            *
            * @returns {EVA.Core.OrderAmounts}
            * @memberof Order
            */
        getOrderAmounts(): EVA.Core.OrderAmounts;
        /**
            * Return order lines by type
            * @return {Array<EVA.Core.OrderLineDto>} Array of order lines
            */
        getOrderLinesByType(orderLineType: number | EVA.Core.OrderLineTypes): Array<EVA.Core.OrderLineDto>;
        /**
            * Return the total amount of shipping costs
            * @return {number} The total value of the shipping costs
            */
        getTotalShippingAmount(inTax?: boolean): number;
        /**
            * Return the total amount of ShippingCosts
            * @return {number} The total value of the shipping costs
            */
        getTotalDiscountAmount(inTax?: boolean): number;
        /**
            * Returns the current order requirement validation data
            * @return {EVA.Core.Validation.RequiredData} The order requirement validation data
            */
        getRequirements(): EVA.Core.RequiredData;
        /**
            * Checks if there are any invalid requirements in the current order requirement validation data
            * @return {boolean} Indicates if the order requirements are all met or not
            */
        isValid(): boolean;
        /**
            * Fetches and updates the order requirement validation data
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetRequiredDataForOrder, EVA.Core.Services.GetRequiredDataForOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        validate(requiredFor?: number, storeRequirements?: boolean): Promise<IEVAServiceResponse<EVA.Core.Services.GetRequiredDataForOrder, EVA.Core.Services.GetRequiredDataForOrderResponse>>;
        /**
            * Returns the list of different organizations where orderline items are te be picked up
            * @return {number} The list of organizations
            */
        readonly stockOrganizationUnits: Array<any>;
        /**
            * Returns the list of different organizations where orderline items are te be picked up
            * @return {number} The list of organizations
            */
        readonly requestedDates: Array<any>;
        /**
            * Fetches the order details
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Sets the current item details using the fetched service response.
            * Extending classes should override this method to pull the details from response
            * @param  {EVA.Core.Services.GetOrderResponse}  response    The response from the service call
            * @return {EVA.Core.OrderDto}              The order details
            */
        setData(response: EVA.Core.Services.GetOrderResponse | EVA.Core.ShoppingCartResponse | any): EVA.Core.OrderDto;
        /**
            * Attaches a customer to the order
            * @param  {LoggedInUser}       customer       The current user class that is to be set as the customer for the order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        setCustomer(customer: LoggedInUser | User): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Sets the currency for the order
            * @param  {string}       currencyID       The identifier of the currency
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        setCurrency(currencyID: string): Promise<{}>;
        /**
            * Retrieve the current warehouse data for this order
            *
            * @see https://newblack1.aha.io/features/EVA-17
            */
        getWarehouseData(): Promise<IEVAServiceResponse<EVA.Core.Services.GetWarehouseOrderData, EVA.API.EmptyResponseMessage>>;
        /**
            * Dictates whether this order will be partially delivered or not
            * @param allowPartialPick whether to allow partial pick up or not
            * @see https://newblack1.aha.io/features/EVA-17
            */
        setWarehouseData(allowPartialPick: boolean): Promise<{}>;
        /**
            * Sets a requested date on an order line
            * @param orderLineID the orderLine we want to modify the requst date of
            * @param requestedDate the request date in question
            */
        setRequestedDate(orderLines: EVA.Core.Services.SetRequestedDateOrderLineDto[], requestedDate: string): Promise<{}>;
        /**
            * Attaches a customer to the order
            * @param  {LoggedInUser}       customer       The current user class that is to be set as the customer for the order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        setPickupOrganizationUnit(organizationUnitID: number): Promise<IEVAServiceResponse<EVA.Core.Services.SetPickupOrganizationUnit, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Places the order. It's usually wise to call validate(...) before trying to place an order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.PlaceOrder, EVA.Core.Services.PlaceOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        placeOrder(): Promise<IEVAServiceResponse<EVA.Core.Services.PlaceOrder, EVA.Core.Services.PlaceOrderResponse>>;
        /**
            * Ships the order. It's usually wise to call validate(...) before trying to ship an order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.ShipOrder, EVA.Core.Services.ShipOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        shipOrder(lines?: number[], force?: boolean): Promise<IEVAServiceResponse<EVA.Core.Services.ShipOrder, EVA.Core.Services.ShipOrderResponse>>;
        produceInvoice(options: IEVAProduceInvoiceOptions): Promise<IEVAServiceResponse<EVA.Core.Services.ProduceInvoice, EVA.API.ResourceResponseMessage>>;
        produceDocuments(options: IEVAProduceDocumentsOptions): Promise<IEVAServiceResponse<EVA.Core.Services.ProduceDocuments, EVA.Core.Services.ProduceDocumentsResponse>>;
        /**
            * Get the download url for this order
            *
            * @return {Promise<string>} The URL to the download of this order
            */
        getDownloadUrl(): Promise<string>;
        getReturnableStatusForOrder(): Promise<IEVAServiceResponse<EVA.Core.Services.GetReturnableStatusForOrder, EVA.Core.Services.GetReturnableStatusForOrderResponse>>;
        getReturnOrdersForOrder(): Promise<IEVAServiceResponse<EVA.CRM.Core.GetReturnOrdersForOrder, EVA.CRM.Core.GetReturnOrdersForOrderResponse>>;
        createCustomerReturn(lines: Array<EVA.CRM.Core.CustomerReturnLine>): Promise<IEVAServiceResponse<EVA.CRM.Core.CreateCustomerReturn, EVA.API.EmptyResponseMessage>>;
        createEmployeeReturn(lines: Array<EVA.CRM.Core.ReturnLineDto>): Promise<IEVAServiceResponse<EVA.CRM.Core.ReturnOrderLines, EVA.API.EmptyResponseMessage>>;
        /**
            * For B2B orders
            *
            * Fetches the order view details
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetConfigurableOrderView, EVA.Core.Services.GetConfigurableOrderViewResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetchOrderView(logicalLevel?: string, groupByProperty?: string): Promise<IEVAServiceResponse<EVA.Core.Services.GetConfigurableOrderView, EVA.Core.Services.GetConfigurableOrderViewResponse>>;
        /**
            * Set an order reference for a customer
            *
            * @param customerReference The reference value to set
            * @param customerOrderId The customer order id
            * @see https://newblack1.aha.io/features/EVA-15
            */
        setCustomerOrderReference(customerReference: string, customerOrderId: string): Promise<IEVAServiceResponse<EVA.Core.Services.SetCustomerReferencesOnOrder, EVA.API.EmptyResponseMessage>>;
        /**
            * Set the shopping basket to an existing order. Removes any existing items in the shopping cart
            * @param  {number|Order}       order       Either an order id or an order class to set as the shopping cart
            * @return {Promise}                        A promise resolving when the call to the back-end has completed
            */
        attach(order: number | Order): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Clears the entire shopping basket
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the call to the back-end has completed
            */
        detach(): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Suspends the current order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.SuspendOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the call to the back-end has completed
            */
        suspend(description: string, printReceipt: boolean, stationId?: number): Promise<IEVAServiceResponse<EVA.Core.Services.SuspendOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Set the order reference
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.ListOrderLines, EVA.Core.Services.ListOrderLinesResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        listOrderLines(orderLineIds?: number[], start?: number, limit?: number, shippable?: boolean, invoiceable?: boolean, onlyShippable?: boolean, productTypes?: EVA.Core.ProductTypes): Promise<IEVAServiceResponse<EVA.Core.Services.ListOrderLines, EVA.Core.Services.ListOrderLinesResponse>>;
        /**
            * Update customer address data for this order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.ListOrderLines, EVA.Core.Services.ListOrderLinesResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        copyAddressesFromCustomer(): Promise<IEVAServiceResponse<EVA.Core.Services.UpdateOrderAddresses, EVA.Core.Services.UpdateOrderAddressesResponse>>;
        /**
            * Provides access to a list of shipments for this order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.ListOrderShipments, EVA.Core.Services.ListOrderShipmentsResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        listShipments(): Promise<IEVAServiceResponse<EVA.Core.Services.ListOrderShipments, EVA.Core.Services.ListOrderShipmentsResponse>>;
        /**
            * Provides access to a list of blobs for this order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.ListBlobsForOrder, EVA.Core.Services.ListBlobsForOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        listBlobs(): Promise<IEVAServiceResponse<EVA.Core.Services.ListBlobsForOrder, EVA.Core.Services.ListBlobsForOrderResponse>>;
        /**
            * Set the billing address of the order using an AddressBook item
            *
            * @param {number} addressBookId The ID of the AddressBook item
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        setBillingAddressFromAddressBook(addressBookId: number): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Set the billing address of the order using an raw address
            *
            * @param {number} address The address to set as billing address on the order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        setBillingAddress(address: EVA.Core.AddressDto): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Set the shipping address of the order using an AddressBook item
            *
            * @param {number} addressBookId The ID of the AddressBook item
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the call to the back-end has completed
            */
        setShippingAddressFromAddressBook(addressBookId: number): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Set the shipping address of the order using an raw address
            *
            * @param {number} address The address to set as shipping address on the order
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        setShippingAddress(address: EVA.Core.AddressDto): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Sets the remarks for an order
            *
            * @param {string} remarks The remarks content
            * @returns {Promise<IEVAServiceResponse<EVA.Core.Services.SetCustomOrderData, EVA.API.EmptyResponseMessage>>}
            * @memberof Order
            */
        setRemark(remarks: string): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Retrieves available discount product options for an order line
            *
            * @param {number} orderLineId
            * @returns {Promise<IEVAServiceResponse<EVA.Core.Services.GetPickProductDiscountOptionsForOrderLine, EVA.Core.Services.GetPickProductDiscountOptionsForOrderLineResponse>>}
            * @memberof Order
            */
        getDiscountProductOptionsForOrderline(orderLineId: number): Promise<IEVAServiceResponse<EVA.Core.Services.GetPickProductDiscountOptionsForOrderLine, EVA.Core.Services.GetPickProductDiscountOptionsForOrderLineResponse>>;
        /**
            * Retrieves available discount product options for an order
            *
            * @param {number} orderId
            * @returns {Promise<IEVAServiceResponse<EVA.Core.Services.GetPickProductDiscountOptionsForOrder, EVA.Core.Services.GetPickProductDiscountOptionsForOrderResponse>>}
            * @memberof Order
            */
        getDiscountProductOptionsForOrder(orderId: number): Promise<IEVAServiceResponse<EVA.Core.Services.GetPickProductDiscountOptionsForOrder, EVA.Core.Services.GetPickProductDiscountOptionsForOrderResponse>>;
        /**
            * Sets the chosen discount product for an order line
            *
            * @param {number} orderLineId
            * @param {(number | null)} selectionId
            * @returns {Promise<IEVAServiceResponse<EVA.Core.Services.SetPickProductDiscountOptionsForOrderLine, EVA.API.EmptyResponseMessage>>}
            * @memberof Order
            */
        setDiscountProductForOrderline(orderLineId: number, selectionId: number | null): Promise<IEVAServiceResponse<EVA.Core.Services.SetPickProductDiscountOptionsForOrderLine, EVA.API.EmptyResponseMessage>>;
}
/**
    * Provides access to a list of customer orders available in EVA
    */
export class CustomerOrderList extends FetchablePagedList<Order, EVA.Core.Services.ListOrdersForCustomer, EVA.Core.Services.ListOrdersForCustomerResponse> {
        constructor(id: number, limit?: number, start?: number, sortDirection?: EVA.Framework.SortDirection, sortProperty?: string);
        /**
            * Sets the current item details using the fetched service response.
            * Extending classes should override this method to pull the details from response
            * @param  {RES} response The response from the service call
            * @return {T}            The item details
            */
        setData(response: any): Order[];
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Core.OrderDto, EVA.Core.Services.ListOrdersForCustomer, EVA.Core.Services.ListOrdersForCustomerResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.ListOrdersForCustomer, EVA.Core.Services.ListOrdersForCustomerResponse>>;
}
/**
    * Provides access to a list of customer orders available in EVA
    */
export class SearchOrderList extends FetchablePagedList<EVA.Core.OrderSearchResultItem, EVA.Core.Services.SearchOrders, EVA.Core.Services.SearchOrdersResponse> {
        /**
            * Returns the current query string
            * @return {string}       The configured query string
            */
        getQuery(): string;
        /**
            * Set the organization id to search for
            * @param  {number} query The organization id
            * @return {number}       The configured organization id
            */
        setOrganizationID(id: number): number;
        /**
            * Returns the current organization id
            * @return {number}       The configured organization id
            */
        getOrganizationID(): number;
        /**
            * Set the query to search for
            * @param  {string} query The new query string
            * @return {string}       The configured query string
            */
        setQuery(query: string): string;
        /**
            * Returns the current list of order ids
            * @return {Array<number>} The configured list of order ids
            */
        getOrderIDs(): Array<number>;
        /**
            * Adds an order ID to the list of orders to retrieve
            * @return {Array<number>} The configured list of order ids
            */
        addOrderID(id: number): Array<number>;
        /**
            * Adds an order ID to the list of orders to retrieve
            * @return {Array<number>} The configured list of order ids
            */
        setOrderIDs(ids: number[]): Array<number>;
        /**
            * Clears the configured list of order ids
            * @return {Array<number>} The configured list of order ids
            */
        clearOrderIDs(): Array<number>;
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.SearchOrders, EVA.Core.Services.SearchOrdersResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.SearchOrders, EVA.Core.Services.SearchOrdersResponse>>;
}
/**
    * Provides access to a list of customer orders available in EVA
    */
export class OrdersWithReferenceList extends FetchablePagedList<EVA.Core.OrderWithCustomerReferences, EVA.Core.Services.ListOrdersWithCustomerReferences, EVA.Core.Services.ListOrdersWithCustomerReferences> {
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Core.OrderDto, EVA.Core.Services.ListOrdersWithReference, EVA.Core.Services.ListOrdersWithReferenceResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.ListOrdersWithCustomerReferences, EVA.Core.Services.ListOrdersWithCustomerReferences>>;
}
/**
    * Provides access to a list of suspended orders available in EVA
    *
    * @export
    * @class SuspendedOrderList
    * @extends {FetchablePagedList<EVA.Core.Services.ListSuspendedOrdersResponseSuspendedOrderDto, EVA.Core.Services.ListSuspendedOrders, EVA.Core.Services.ListSuspendedOrdersResponse>}
    */
export class SuspendedOrderList extends FetchablePagedList<EVA.Core.Services.ListSuspendedOrdersResponseSuspendedOrderDto, EVA.Core.Services.ListSuspendedOrders, EVA.Core.Services.ListSuspendedOrdersResponse> {
        /**
            * Fetches the list of items
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.ListSuspendedOrders, EVA.Core.Services.ListSuspendedOrdersResponse>>;
}

/**
    * The shopping cart module provides access to shopping cart data from the EVA back-end
    * Note that the shopping cart is bound to the current session so there is only 1 of them
    * You can regard it as the active order
    * @preferred
    */
/**
    * Provides access to the shopping cart available in EVA
    */
export class ShoppingCart extends FetchableItem<EVA.Core.OrderDto, EVA.Core.Services.GetShoppingCart, EVA.Core.ShoppingCartResponse> {
        /**
            * The payment options for the order
            * @type {Payment}
            */
        payment: Payments;
        /**
            * Indicates the order/cart is a pickup order (for a single shop)
            * @type {boolean}
            */
        isPickupOrder: boolean;
        /**
            * This class wraps the current shopping cart from EVA and the operations you can perform on it.
            *
            * @return {void} This method doesn't return anything
            */
        constructor();
        /**
            * Returns if the order state 'completed' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isCompleted(): boolean;
        /**
            * Returns if the order state 'shipped' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isShipped(): boolean;
        /**
            * Returns if the order state 'paid' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isPaid(): boolean;
        /**
            * Returns if the order state 'invoiced' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isInvoiced(): boolean;
        /**
            * Returns if the order state 'cancelled' applies to the order
            * @return {boolean} Indicates the state is active
            */
        isCancelled(): boolean;
        /**
            * Returns the current open amount still to be paid for the shopping cart
            * @return {number}
            */
        getOpenAmount(): number;
        /**
            * Returns the total value of all the items in the shopping cart with VAT
            * @return {number} The value of the items in the shopping cart with VAT
            */
        getTotalAmountInTax(): number;
        /**
            * Returns the total value of all the items in the shopping cart without VAT
            * @return {number} The value of the items in the shopping cart without VAT
            */
        getTotalAmount(): number;
        /**
            * Return order lines by type
            * @return {Array<EVA.Core.OrderLineDto>} Array of order lines
            */
        getOrderLinesByType(orderLineType: number | EVA.Core.OrderLineTypes): Array<EVA.Core.OrderLineDto>;
        /**
            * Return the total amount of shipping costs
            * @return {number} The total value of the shipping costs
            */
        getTotalShippingAmount(inTax?: boolean): number;
        /**
            * Return the total amount of ShippingCosts
            * @return {number} The total value of the shipping costs
            */
        getTotalDiscountAmount(inTax?: boolean): number;
        /**
            * Return the current order amounts
            *
            * @returns {EVA.Core.OrderAmounts}
            * @memberof ShoppingCart
            */
        getOrderAmounts(): EVA.Core.OrderAmounts;
        /**
            * Returns the list of different organizations where orderline items are te be picked up
            * @return {number} The list of organizations
            */
        readonly stockOrganizationUnits: Array<any>;
        /**
            * Returns the list of different organizations where orderline items are te be picked up
            * @return {number} The list of organizations
            */
        readonly requestedDates: Array<any>;
        /**
            * Returns the discount invalid reasons
            * @return {number}
            */
        getMessages(): EVA.Core.DiscountInvalidReasons[];
        /**
            * Set the product properties to use
            * @return {void}
            */
        setProductProperties(properties?: string[]): void;
        /**
            * Returns the product properties that are active
            * @return {string[]}
            */
        getProductProperties(): string[];
        /**
            * Fetches the shopping cart details
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetShoppingCart, EVA.Core.ShoppingCartResponse>>} A promise resolving when the call to the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.GetShoppingCart, EVA.Core.ShoppingCartResponse>>;
        /**
            * Sets the current item details using the fetched service response.
            * Extending classes should override this method to pull the details from response
            * @param  {EVA.Core.ShoppingCartResponse}  response    The response from the service call
            * @return {EVA.Core.OrderDto}              The order details
            */
        setData(response: any): EVA.Core.OrderDto;
        /**
            * Adds a product to the shopping cart
            * @param  {number|Product}                 product         Either a product id or a product class to add to the shopping cart
            * @param  {number}                         quantity        Quantity to add
            * @param  {EVA.Core.LineActionTypes}       lineActionType  Line action type. Default is 4 (delivery), 1 is for reservation
            * @return {Promise}                                        A promise resolving when the call to the back-end has completed
            */
        addProduct(product: number | Product, quantity?: number, lineActionType?: EVA.Core.LineActionTypes): Promise<IEVAServiceResponse<EVA.Core.Services.AddProductToOrder, EVA.Core.ShoppingCartResponse>>;
        /**
            * Changes an order line to a stock reservation
            * @param  {number}     orderLineId     The order line id that contains the product(s) that is/are to be reserverd
            * @param  {number}     organizationID  The shop to reserve the product at
            * @return {Promise}                    A promise resolving when the call to the back-end has completed
            */
        reserveOrderLine(orderLineId: number): Promise<{}>;
        /**
            * Changes an order line to be shipped
            * @param  {number}     orderLineId     The order line id that contains the product(s) that is/are to be reserverd
            * @return {Promise}                    A promise resolving when the call to the back-end has completed
            */
        shipOrderLine(orderLineId: number): Promise<{}>;
        /**
            * Changes an order line to be delivered
            * @param  {number}     orderLineId     The order line id that contains the product(s) that is/are to be reserverd
            * @return {Promise}                    A promise resolving when the call to the back-end has completed
            */
        deliverOrderLine(orderLineId: number): Promise<{}>;
        /**
            * Removes order lines from the shopping cart
            * @param  {number|Array<number>}       orderLineId     The identifier or array of identifiers of the order line(s) to remove from the shopping cart
            * @return {Promise}                                    A promise resolving when the call to the back-end has completed
            */
        cancelOrderLine(orderLineId: number | Array<number>): Promise<IEVAServiceResponse<EVA.Core.Services.CancelOrderLine, EVA.Core.ShoppingCartResponse>>;
        /**
            * Convenience methods to remove all instances of a product from the shopping  This is the more direct mirror call of addProduct
            * @param  {number|Product}     product     Either a product id or a product class to remove from the shopping cart
            * @return {Promise}                        A promise resolving when the call to the back-end has completed
            */
        removeProduct(product: number | Product): Promise<IEVAServiceResponse<EVA.Core.Services.GetShoppingCart, EVA.Core.ShoppingCartResponse>>;
        /**
            * Modify the number of items for an order line
            * @param  {number}         orderLineId     The identifier of the order line to modify from the shopping cart
            * @param  {number}         quantity        The new quantity
            * @return {Promise}                        A promise resolving when the call to the back-end has completed
            */
        modifyQuantity(orderLineId: number, quantity: number): Promise<IEVAServiceResponse<EVA.Core.Services.ModifyQuantityOrdered, EVA.Core.ShoppingCartResponse>>;
        /**
            * Clears the entire shopping basket
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetShoppingCart, EVA.Core.ShoppingCartResponse>>} A promise resolving when the call to the back-end has completed
            */
        empty(): Promise<IEVAServiceResponse<EVA.Core.Services.GetShoppingCart, EVA.Core.ShoppingCartResponse>>;
        /**
            * List the available shipping methods for the current cart
            * @return {Promise}                        A promise resolving when the call to the back-end has completed
            */
        listShippingMethods(orderId: number, orderlineIds: Array<number>): Promise<IEVAServiceResponse<EVA.Core.Services.ListAvailableShippingMethods, EVA.Core.Services.ListAvailableShippingMethodsResponse>>;
        /**
            * Gets the shipping methods currently set to the cart
            * @return {Promise}                        A promise resolving when the call to the back-end has completed
            */
        getShippingMethods(orderId: number): Promise<IEVAServiceResponse<EVA.Core.Services.GetShippingMethodsForOrder, EVA.Core.Services.GetShippingMethodsForOrderResponse>>;
        /**
            * Sets the pickup organiszation unit to the cart.
            * We don't know the orderId, but the session Id will do the trick
            * @return {Promise} A promise resolving when the call to the back-end has completed
            */
        setPickupOrganizationUnit(organizationUnitID: number): Promise<IEVAServiceResponse<EVA.Core.Services.SetPickupOrganizationUnit, EVA.Core.ShoppingCartResponse>>;
        /**
            * Gets the shipping methods currently set to the cart
            * @return {Promise}                        A promise resolving when the call to the back-end has completed
            */
        setShippingMethod(orderId: number, orderLineId: number, shippingMethodId: number, requestDeliveryDate: Date): Promise<IEVAServiceResponse<EVA.Core.Services.SetShippingMethod, EVA.Core.ShoppingCartResponse>>;
        /**
            * Modify the number of items for an order line
            * @param  {string}         couponCode      The coupon code that needs to be added to the cart
            * @return {Promise}                        A promise resolving when the call to the back-end has completed
            */
        addCouponCode(couponCode: string): Promise<IEVAServiceResponse<EVA.Core.Services.AddDiscountToOrder, EVA.Core.ShoppingCartResponse>>;
        /**
            * Add discount to an order
            * @param  {number}    discountId   The discount Id to use
            * @param  {number}    amount       The amount of discount that is required
            * @param  {string}    currencyId   The currency Id to use
            * @param  {string}    reason       (Optional) reason for giving discount
            * @return {Promise}                A promise resolving when the call to the back-end has completed
            */
        addDiscount(discountParams: {
                DiscountID?: number;
                DiscountAmount?: number;
                CurrencyID?: string;
                Reason?: string;
                OrderLines?: EVA.Core.OrderLineWithQuantity[];
                Password?: string;
                ForceCreate?: boolean;
                CouponCode?: string;
        }): Promise<IEVAServiceResponse<EVA.Core.Services.AddDiscountToOrder, EVA.Core.ShoppingCartResponse>>;
        /**
            * Retrieves the shopping cart summary information
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetShoppingCartInfo, EVA.Core.Services.ShoppingCartInfoResponse>>} A promise resolving when the call to the back-end has completed
            */
        getInfo(): Promise<IEVAServiceResponse<EVA.Core.Services.GetShoppingCartInfo, EVA.Core.Services.GetShoppingCartInfoResponse>>;
        /**
            * Attaches a customer to the shopping cart
            * @param  {LoggedInUser}       customer       The current user class that is to be set as the customer for the shopping cart
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        setCustomer(customer: LoggedInUser | User): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
        /**
            * Places an order for the current shopping cart contents
            * @return {Promise<Order>} A promise resolving when the call to the back-end has completed
            */
        createOrder(includePendingPayments?: boolean, includeFailedPayments?: boolean): Promise<Order>;
        /**
            * Set the shopping basket to an existing order. Removes any existing items in the shopping cart
            * @param  {number|Order}       order       Either an order id or an order class to set as the shopping cart
            * @return {Promise}                        A promise resolving when the call to the back-end has completed
            */
        setFromOrder(order: number | Order): Promise<IEVAServiceResponse<EVA.Core.Services.GetShoppingCart, EVA.Core.ShoppingCartResponse>>;
        /**
            * Sets the remarks for an order
            *
            * @param {string} remarks The remarks content
            * @returns {Promise<IEVAServiceResponse<EVA.Core.Services.SetCustomOrderData, EVA.API.EmptyResponseMessage>>}
            * @memberof Order
            */
        setRemark(remarks: string): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrder, EVA.Core.Services.GetOrderResponse>>;
}

/**
    * The product module provides access to the product data from the EVA back-end
    * @preferred
    */
export namespace products {
        function getQuantityOnHandForProducts(productIds: number[], organisationId: number): Promise<IEVAServiceResponse<EVA.Core.Services.GetQuantityOnHandForProducts, EVA.Core.Services.GetQuantityOnHandForProductsResponse>>;
        function getProductPrices(productIds: number[]): Promise<IEVAServiceResponse<EVA.Core.Services.GetProductPrices, EVA.Core.Services.GetProductPricesResponse>>;
        function getConfigurableProductsDetails(productIds: number[], includes?: string[]): Promise<IEVAServiceResponse<EVA.Core.Services.GetConfigurableProductsDetail, EVA.Core.Services.GetConfigurableProductsDetailResponse>>;
        function getProductsDetails(productIds: number[], pageConfig?: EVA.Framework.PageConfig, additionalFilters?: any): Promise<IEVAServiceResponse<EVA.Core.Services.SearchProducts, EVA.Core.Services.SearchProductsResponse>>;
        function getBundleProductsForProduct(productId: number, includedFields: string[]): Promise<IEVAServiceResponse<EVA.Core.Services.GetBundleProductsForProduct, EVA.Core.Services.GetBundleProductsForProductResponse>>;
        function getBundleProductDetails(bundleProductId: number, includedFields: string[]): Promise<IEVAServiceResponse<EVA.Core.Services.GetBundleProductDetails, EVA.Core.Services.GetBundleProductDetailResponse>>;
}
/**
    * Provides access to a product available in EVA
    */
export class Product extends FetchableItem<EVA.Core.ProductDto, EVA.Core.Services.GetProductDetail, EVA.Core.Services.GetProductDetailResponse> {
        /**
            * Fetches the product details
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.Products.GetProductDetail, EVA.Core.Services.Products.GetProductDetailResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.GetProductDetail, EVA.Core.Services.GetProductDetailResponse>>;
        /**
            * Fetches the product configuration details
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetConfigurableProductDetail, EVA.Core.Services.GetConfigurableProductDetailResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        getConfigurationDetails(): Promise<IEVAServiceResponse<EVA.Core.Services.GetConfigurableProductDetail, EVA.Core.Services.GetConfigurableProductDetailResponse>>;
        /**
            * Retrieves the stock details for the product
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetStockDetailsForProduct, EVA.Core.Services.GetStockDetailsForProductResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        getStockDetails(): Promise<IEVAServiceResponse<EVA.Core.Services.GetStockDetailsForProduct, EVA.Core.Services.GetStockDetailsForProductResponse>>;
        /**
            * Retrieves the availability indication for the product
            * @param  {number}         quantityRequested           Quantity to check availability for. Defaults to 1
            * @param  {Array<number>}  organizationUnitIDs         An array of organisation id's to limit the availability check to
            * @param  {boolean}        fastestPickupShopOnly       Only return the fastest pickup option. Defaults to false
            * @param  {boolean}        includeAvailabilityTexts    Add availability text messages to the response. Defaults to false
            * @param  {boolean}        detailedShopInformation     Add detailed shop information to the response. Defaults to false
            * @return {Promise<Array<EVA.Core.ProductAvailabilityIndicationDto>>} A promise resolving when the fetch from the back-end has completed
            */
        getAvailability(quantityRequested?: number, organizationUnitIDs?: Array<number>, fastestPickupShopOnly?: boolean, includeAvailabilityTexts?: boolean, detailedShopInformation?: boolean): Promise<Array<EVA.Core.ProductAvailabilityIndication>>;
        getExtendedAvailability(quantityRequested: number, shippingMethodId: number, options: EVA.Core.Services.GetProductAvailabilityAvailabilityOptions, organizationUnitId?: number): Promise<{}>;
        /**
            * Retrieves the available variants (color, size, etc.) for a product
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.SearchProducts, EVA.Core.Services.SearchProductsResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        getVariants(limit?: number, start?: number, sortDirection?: EVA.Framework.SortDirection, sortProperty?: string, additionalFilters?: any): Promise<IEVAServiceResponse<EVA.Core.Services.SearchProducts, EVA.Core.Services.SearchProductsResponse>>;
}
/**
    * Provides access to a list of products available in EVA
    */
export class ProductList extends FetchablePagedList<EVA.Core.ProductDto, EVA.Core.Services.SearchProducts, EVA.Core.Services.SearchProductsResponse> {
        /**
            * The return aggregations flag
            * @type {any}
            */
        includeAggregations: boolean;
        /**
            * The return suggestions flag
            * @type {any}
            */
        includeSuggestions: boolean;
        /**
            * Returns the current list of included fields
            * @return {Array<string>} The configured list of included product fields
            */
        getIncludedFields(): Array<string>;
        /**
            * Returns the current list of included fields
            * @return {Array<string>} The configured list of included product fields
            */
        addIncludedField(fieldName: string): Array<string>;
        /**
            * Clears the configured list of included fields
            * @return {Array<string>} The configured list of included product fields
            */
        clearIncludedFields(): Array<string>;
        /**
            * Sets the aggregation state
            * @return {any} The aggregation state
            */
        setAggregationState(aggregationState: string): any;
        /**
            * Return the currently set aggregation state
            * @return {string} The aggregation state
            */
        getAggregationState(): string;
        /**
            * Sets the aggregation options
            * @return {any} The aggregation options
            */
        setAggregationOptions(aggregationOptions: any): any;
        /**
            * Return the currently set aggregation options
            * @return {any} The aggregation options
            */
        getAggregationOptions(): any;
        /**
            * Returns the current query string
            * @return {string}       The configured query string
            */
        getQuery(): string;
        /**
            * Set the query to search for
            * @param  {string} query The new query string
            * @return {string}       The configured query string
            */
        setQuery(query: string): string;
        /**
            * Return the aggregations that were returned with the product list
            * @return {any} The aggreations
            */
        getAggregations(): any;
        /**
            * Sets the current item details using the fetched service response.
            * Extending classes should override this method to pull the details from response
            * @param  {EVA.Core.Services.Products.SearchProductsResponse}  response    The response from the service call
            * @return {Array<EVA.Core.ProductDto>}                      The product items for the current page
            */
        setData(response: any): EVA.Core.ProductDto[];
        /**
            * Fetches the product list item details
            * @return {Promise<IEVAServiceResponse<EVA.Core.ProductDto, EVA.Core.Services.SearchProducts, EVA.Core.Services.SearchProductsResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.SearchProducts, EVA.Core.Services.SearchProductsResponse>>;
}

/**
    * The shops module provides access to the shops (organization unit type) data from the EVA back-end
    * @preferred
    */
/**
    * Provides access to a content page available in EVA
    */
export class Shop extends FetchableItem<EVA.Core.OrganizationUnitDto, EVA.Core.Services.GetOrganizationUnit, EVA.Core.Services.GetOrganizationUnitResponse> {
        /**
            * Fetches the page content
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetOrganizationUnit, EVA.Core.Services.GetOrganizationUnitResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.GetOrganizationUnit, EVA.Core.Services.GetOrganizationUnitResponse>>;
}
/**
    * Provides access to a list of shops available in EVA
    */
export class ShopList extends FetchablePagedList<EVA.Core.Services.ListOrganizationUnitsResponseOrganizationUnit, EVA.Core.Services.ListOrganizationUnits, EVA.Core.Services.ListOrganizationUnitsResponse> {
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.ListOrganizationUnitsResponseOrganizationUnit, EVA.Core.Services.ListOrganizationUnits, EVA.Core.Services.ListOrganizationUnitsResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.ListOrganizationUnits, EVA.Core.Services.ListOrganizationUnitsResponse>>;
}
/**
    * Provides access to a list of shops available in EVA
    */
export class ShopProximityList extends FetchablePagedList<EVA.Core.OrganizationUnitDto, EVA.Core.Services.ListOrganizationUnitByProximity, EVA.Core.Services.ListOrganizationUnitByProximityResponse> {
        /**
            * Changes to list of shops returned to those in the closest proximity of the given location
            * @param  {number} lat The locations latitude
            * @param  {number} lng The locations longitude
            * @return {object}     The chosen location
            */
        setLocation(lat: number, lng: number): any;
        /**
            * Returns the currently chosen location to use for a proximity based shop list
            * @return {object} The currently chosen location
            */
        getLocation(): any;
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Core.OrganizationUnitDto, EVA.Core.Services.ListOrganizationUnitByProximity, EVA.Core.Services.ListOrganizationUnitByProximityResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.ListOrganizationUnitByProximity, EVA.Core.Services.ListOrganizationUnitByProximityResponse>>;
}

export class SuggestionList extends FetchablePagedList<EVA.Core.SuggestionModel, EVA.Core.Services.GetProductSearchSuggestions, EVA.Core.Services.GetProductSearchSuggestionsResponse> {
    maxSuggestions: number;
    setQuery(query: string): string;
    setData(response: any): EVA.Core.SuggestionModel[];
    fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.GetProductSearchSuggestions, EVA.Core.Services.GetProductSearchSuggestionsResponse>>;
}

/**
    * The postnl module provides the means to retrieve and set a PostNL pickup location
    * @preferred
    */
export class PostNL {
        /**
            * [constructor description]
            * @param  {Order}  order The order to perform the payments for
            * @return {void}         This method doesn't return anything
            */
        constructor(order: Order | ShoppingCart);
        PostNLGetAvailablePickUpLocationsForArea(orderId: number, nw: EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForAreaCoordinate, se: EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForAreaCoordinate): Promise<IEVAServiceResponse<EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForArea, EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForAreaResponse>>;
        PostNLGetAvailablePickUpLocationsForOrder(orderId: number): Promise<IEVAServiceResponse<EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForOrder, EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForOrderResponse>>;
        PostNLGetAvailableTimeframesForOrder(orderId: number, startDate: any, endDate: any): Promise<IEVAServiceResponse<EVA.Carrier.PostNL.PostNLGetAvailableTimeframesForOrder, EVA.Carrier.PostNL.PostNLGetAvailableTimeframesForOrderResponse>>;
        PostNLGetShippingOptionsForOrder(orderId: number): Promise<IEVAServiceResponse<EVA.Carrier.PostNL.PostNLGetShippingOptionsForOrder, EVA.Carrier.PostNL.PostNLGetShippingOptionsForOrderResponse>>;
        PostNLUpdateShippingOptionsForOrder(orderId: number, pickupLocationId: number, date?: Date, option?: EVA.Carrier.PostNL.TimeframeOptions): Promise<IEVAServiceResponse<EVA.Carrier.PostNL.PostNLUpdateShippingOptionsForOrder, EVA.API.EmptyResponseMessage>>;
}

/**
    * The FTH module provides access to the FTH specific call on the EVA back-end
    * @preferred
    */
/**
    * Provides access to a FTH specific functions in EVA
    */
export namespace FTH {
        /**
            * Retrieves the due data for an FTH order
            *
            * @export
            * @param {number} orderID The order to fetch the due date for
            * @returns
            */
        function getOrderDueDate(orderID: number): Promise<IEVAServiceResponse<EVA.FTH.FTHGetDueDateForOrder, EVA.FTH.FTHGetDueDateResponse>>;
        /**
            * Set the due date for an FTH order
            *
            * @export
            * @param {number} orderID The order to set the due date for
            * @param {string} dueDate The due date as an ISO8601 RFC string
            * @returns
            */
        function setOrderDueDate(orderID: number, dueDate: string): Promise<IEVAServiceResponse<EVA.FTH.FTHSetDueDateOnOrder, EVA.API.EmptyResponseMessage>>;
        function getFthWishlistDiscount(orderId: number): Promise<IEVAServiceResponse<EVA.FTH.FTHGetWishListDiscount, EVA.FTH.FTHGetWishListDiscountResponse>>;
}

/**
    * The MakeUp module provides access to advanced content management features from the EVA back-end
    * @preferred
    */
export interface MakeupGetRenderedPageByPathResponseWithContext extends EVA.Makeup.MakeupGetRenderedPageByPathResponse {
        PathContext: EVA.Makeup.PathContext;
        QueryPath: string;
}
export namespace MakeUp {
        /**
            * Provides access to a make up content map
            */
        function getPageMap(languageID?: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetPageMap, EVA.Makeup.MakeupGetPageMapResponse>>;
        /**
            * Provides access to a make up content page by path
            */
        function getPageByRequestPath(path: string, languageID?: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetPageByPath, EVA.Makeup.MakeupGetPageByPathResponse>>;
        /**
            * Provides access to a make up content page by id
            */
        function getPageByID(ID: string, languageID?: string, version?: number): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetPageByID, EVA.Makeup.MakeupGetPageByIdResponse>>;
        /**
            * Provides access to a rendered make up content page by path
            */
        function getRenderedPageByRequestPath(path: string, languageID?: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetRenderedPageByPath, MakeupGetRenderedPageByPathResponseWithContext>>;
        function getRenderedPagesByPartialPath(path: string, languageID?: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetRenderedPagesByPartialPath, EVA.Makeup.MakeupGetRenderedPagesByPartialPathResponse>>;
        /**
            * Provides access to a make up content page by id
            */
        function getRenderedPageByID(ID: string, languageID?: string, version?: number): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetRenderedPageByID, EVA.Makeup.MakeupGetRenderedPageByIDResponse>>;
        /**
            * Provides access to create a new Makeup page
            * @param page The MakeupPageDto
            */
        function createPage(page: EVA.Makeup.PageDto): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetPageByID, EVA.Makeup.MakeupGetPageByIdResponse>>;
        /**
            * Provides access to replace a MakeUp page
            * @param id   The ID of the Makeup page
            * @param page The MakeUpPageDto
            */
        function replacePage(page: EVA.Makeup.PageDto): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetPageByID, EVA.Makeup.MakeupGetPageByIdResponse>>;
        /**
            * Convenience method to upsert a Makeup page
            * @param id   The ID of the Makeup page
            * @param page The MakeUpPageDto
            */
        function upsertPage(page: EVA.Makeup.PageDto): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetPageByID, EVA.Makeup.MakeupGetPageByIdResponse>>;
        /**
            * Convenience method to retrieve the latest version of a makeup page
            * @param id The ID of the Makeup page
            * @param languageID The language
            */
        function getCurrentPageVersion(id: string, languageID: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetCurrentPageVersion, EVA.Makeup.MakeupGetCurrentPageVersionResponse>>;
        /**
            * Convenience method to publish a version of a Makeup page
            * @param id The ID of the Makeup page
            * @param languageID The language
            */
        function publishPageVersion(id: string, languageID: string, version: number): Promise<IEVAServiceResponse<EVA.Makeup.MakeupPublishPageVersion, EVA.API.EmptyResponseMessage>>;
        /**
            * Provides access to delete a Makeup page
            * @param id The ID of the Makeup page
            */
        function deletePage(id: string, languageID?: string, version?: number): Promise<IEVAServiceResponse<EVA.Makeup.MakeupDeletePage, EVA.API.EmptyResponseMessage>>;
        /****************
            *    BLOCKS    *
            ****************/
        function getBlockByID(ID: string, version?: number): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetBlockByID, EVA.Makeup.MakeupGetBlockByIDResponse>>;
        function getRenderedBlockByID(ID: string, version?: number): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetRenderedBlockByID, EVA.Makeup.MakeupGetRenderedBlockByIDResponse>>;
        /**
            * Provides access to create a new Makeup block
            * @param block The BlockDto to create
            */
        function createBlock(block: EVA.Makeup.BlockDto): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetBlockByID, EVA.Makeup.MakeupGetBlockByIDResponse>>;
        /**
            * Convenience method to upsert a Makeup block
            * @param id    The ID of the Makeup block
            * @param block The MakeUpBlockDto
            */
        function upsertBlock(block: EVA.Makeup.BlockDto): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetBlockByID, EVA.Makeup.MakeupGetBlockByIDResponse>>;
        /**
            * Provides access to replace a MakeUp block
            * @param block The BlockDto
            */
        function replaceBlock(block: EVA.Makeup.BlockDto): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetBlockByID, EVA.Makeup.MakeupGetBlockByIDResponse>>;
        /**
            * Provides access to delete a Makeup block
            * @param id The ID of the Makeup block
            */
        function deleteBlock(id: string, version?: number): Promise<IEVAServiceResponse<EVA.Makeup.MakeupDeleteBlock, EVA.API.EmptyResponseMessage>>;
        /**
            * Convenience method to retrieve the latest version of a makeup block
            * @param id The ID of the Makeup block
            */
        function getCurrentBlockVersion(id: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetCurrentBlockVersion, EVA.Makeup.MakeupGetCurrentBlockVersionResponse>>;
        /**
            * Convenience method to publish a version of a Makeup block
            * @param id The ID of the Makeup block
            * @param version The version to set
            */
        function publishBlockVersion(id: string, version: number): Promise<IEVAServiceResponse<EVA.Makeup.MakeupPublishBlockVersion, EVA.API.EmptyResponseMessage>>;
        /****************
            *    MENU      *
            ****************/
        function getMenuByID(ID: string, languageID?: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetMenuByID, EVA.Makeup.MakeupGetMenuByIDResponse>>;
        /**
            * Provides access to create a new Makeup block
            * @param block The MenuDto to create
            */
        function createMenu(block: EVA.Makeup.MenuDto): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetMenuByID, EVA.Makeup.MakeupGetMenuByIDResponse>>;
        /**
            * Convenience method to upsert a Makeup block
            * @param id    The ID of the Makeup block
            * @param block The MakeUpMenuDto
            */
        function upsertMenu(block: EVA.Makeup.MenuDto): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetMenuByID, EVA.Makeup.MakeupGetMenuByIDResponse>>;
        /**
            * Provides access to replace a MakeUp block
            * @param menu The MenuDto
            */
        function replaceMenu(menu: EVA.Makeup.MenuDto): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetMenuByID, EVA.Makeup.MakeupGetMenuByIDResponse>>;
        /**
            * Provides access to delete a Makeup block
            * @param id The ID of the Makeup block
            */
        function deleteMenu(id: string, languageID?: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupDeleteMenu, EVA.API.EmptyResponseMessage>>;
        /****************************
            *    CONFIGURATION PROFILE *
            ****************************
            */
        function getConfigurationProfile(languageID?: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetConfigurationProfile, EVA.Makeup.MakeupGetConfigurationProfileResponse>>;
        /**
            * Provides access to replace a ConfigurationProfile
            * @param profile The ConfigurationProfile
            */
        function replaceConfigurationProfile(profile: EVA.Makeup.ConfigurationProfileDto, languageID?: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetConfigurationProfile, EVA.Makeup.MakeupGetConfigurationProfileResponse>>;
        /****************************
            * SITE CONFIGURATION       *
            ****************************
            */
        function replaceSiteConfigurationSchema(siteId: number, schema: any): Promise<IEVAServiceResponse<EVA.Makeup.MakeupReplaceSiteConfigurationSchema, EVA.API.RequestMessageWithEmptyResponse>>;
        function replaceSiteConfiguration(siteId: number, languageID: string, configuration: any): Promise<IEVAServiceResponse<EVA.Makeup.MakeupReplaceSiteConfiguration, EVA.API.RequestMessageWithEmptyResponse>>;
        function getSiteConfigurationSchema(siteId: number): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetSiteConfigurationSchema, EVA.Makeup.MakeupGetSiteConfigurationSchemaResponse>>;
        function getSiteConfiguration(siteId: number, languageId: string): Promise<IEVAServiceResponse<EVA.Makeup.MakeupGetSiteConfiguration, EVA.Makeup.MakeupGetSiteConfigurationResponse>>;
}
export class MakeupListPageVersions extends FetchablePagedList<EVA.Makeup.PageVersionDto, EVA.Makeup.MakeupListPageVersions, EVA.Makeup.MakeupListPageVersionsResponse> {
        /**
            * Returns the current page identifier
            * @return {string}       The page identifier
            */
        getPageID(): string;
        /**
            * Set the make up page identifier
            * @param  {string} page_id The page identifier
            * @return {string}         The currently page identifier
            */
        setPageID(page_id: string): string;
        /**
            * Set the make up page language
            * @param  {string} page_id The page language
            * @return {string}         The currently page language
            */
        setLanguageID(languageID: string): string;
        /**
            * Returns the current page language
            * @return {string}       The page language
            */
        getLanguageID(): string;
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Makeup.MakeupListPageVersions, EVA.Makeup.MakeupListPageVersionsResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Makeup.MakeupListPageVersions, EVA.Makeup.MakeupListPageVersionsResponse>>;
}
export class MakeupListBlocks extends FetchablePagedList<EVA.Makeup.BlockDto, EVA.Makeup.MakeupListBlocks, EVA.Makeup.MakeupListBlocksResponse> {
        /**
            * Returns the current requested block type
            * @return {string}       The block type
            */
        getType(): string;
        /**
            * Set the block type to retrieve
            * @param  {string} type The new block type
            * @return {string}       The currently set block type
            */
        setType(type: string): string;
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Makeup.MakeupListBlocks, EVA.Makeup.MakeupListBlocksResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Makeup.MakeupListBlocks, EVA.Makeup.MakeupListBlocksResponse>>;
}
export class MakeupListBlockVersions extends FetchablePagedList<EVA.Makeup.BlockDto, EVA.Makeup.MakeupListBlockVersions, EVA.Makeup.MakeupListBlockVersionsResponse> {
        /**
            * Returns the current block identifier
            * @return {string}       The block identifier
            */
        getBlockID(): string;
        /**
            * Set the make up block identifier
            * @param  {string} block_id The block identifier
            * @return {string}         The currently block identifier
            */
        setBlockID(block_id: string): string;
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Makeup.MakeupListBockVersions, EVA.Makeup.MakeupListBlockVersionsResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Makeup.MakeupListBlockVersions, EVA.Makeup.MakeupListBlockVersionsResponse>>;
}
export class MakeupListMenus extends FetchablePagedList<EVA.Makeup.MenuDto, EVA.Makeup.MakeupListMenus, EVA.Makeup.MakeupListMenusResponse> {
        /**
            * Returns the current language identifier
            * @return {string} The language identifier
            */
        getLanguageID(): string;
        /**
            * Set the language identifier
            * @param  {string} language The language identifier
            */
        setLanguageID(languageID: string): string;
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Makeup.MakeupListMenus, EVA.Makeup.MakeupListMenusResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Makeup.MakeupListMenus, EVA.Makeup.MakeupListMenusResponse>>;
}

/**
    * The applications module provides access to the applications data from the EVA back-end
    * @preferred
    */
/**
    * Provides access to a babylon binary blobs in EVA
    */
export class Blob extends FetchableItem<EVA.Blobs.BlobDto, EVA.Blobs.GetBlobInfo, EVA.Blobs.GetBlobInfoResponse> {
        /**
            * Convenience method to build a blob image URL
            * @param  {string} guid        The blob guid
            * @param  {number} width       The output image width
            * @param  {number} height      The output image height
            * @param  {string} type        The image type (ie. png, jpg, etc)
            *
            * @return {string}             An image URL
            */
        static getImageUrl(guid: string, width?: number, height?: number, format?: string): string;
        /**
            * Sets the category to retrieve the blob info for
            * @param  {string} category    The blob category
            * @return {void}               This method doesn't return anything
            */
        setCategory(category: string): void;
        /**
            * Sets the original name to retrieve the blob info for
            * @param  {string} original name    The blob original name
            * @return {void}               This method doesn't return anything
            */
        setOriginalName(originalName: string): void;
        fetch(): Promise<IEVAServiceResponse<EVA.Blobs.GetBlobInfo, EVA.Blobs.GetBlobInfoResponse>>;
        /**
            * Sets the current item details using the fetched service response.
            * Extending classes should override this method to pull the details from response
            * @param  {RES} response The response from the service call
            * @return {T}            The item details
            */
        setData(response: any): EVA.Blobs.BlobDto;
        create(newBlobInfo: EVA.Blobs.StoreBlob): Promise<IEVAServiceResponse<EVA.Blobs.GetBlobInfo, EVA.Blobs.GetBlobInfoResponse>>;
        createEmpty(newBlobInfo: EVA.Blobs.CreateBlob): Promise<IEVAServiceResponse<EVA.Blobs.CreateBlob, string>>;
        createEmptyBlob(newBlobInfo: EVA.Blobs.CreateBlob): Promise<IEVAServiceResponse<EVA.Blobs.CreateBlob, EVA.Blobs.CreateBlobResponse>>;
        getUploadUrl(guid: string): string;
        process(imageDataBase64: string, type?: string): Promise<IEVAServiceResponse<EVA.Blobs.ProcessDocument, EVA.Blobs.ProcessDocumentResponse>>;
        destroy(): Promise<IEVAServiceResponse<EVA.Blobs.DeleteBlob, EVA.API.EmptyResponseMessage>>;
}

export namespace Barcodes {
    function parseBarcode(barcode: string): Promise<EVA.Core.Services.ParseBarcodeResponse>;
}

/**
    * This module provides methods for Addresses, setting / updating addresses on specific
    * objects like customer  and order are done directly on those objects
    *
    * @preferred
    */
export class AddressBook extends FetchablePagedList<EVA.Core.Services.AddressBookDto, EVA.Core.Services.ListAddressBook, EVA.Core.Services.ListAddressBookResponse> {
        static setDefaultBillingAddress(id: number): Promise<IEVAServiceResponse<EVA.Core.Services.SetDefaultBillingAddress, EVA.API.RequestMessageWithEmptyResponse>>;
        static setDefaultShippingAddress(id: number): Promise<IEVAServiceResponse<EVA.Core.Services.SetDefaultShippingAddress, EVA.API.RequestMessageWithEmptyResponse>>;
        static createItem(address: EVA.Core.AddressDto, description?: string): Promise<IEVAServiceResponse<EVA.Core.Services.CreateAddressBookItem, EVA.API.CreateResponse>>;
        static updateItem(id: number, address: EVA.Core.AddressDto, description?: string): Promise<IEVAServiceResponse<EVA.Core.Services.UpdateAddressBookItem, EVA.API.EmptyResponseMessage>>;
        static deleteItem(id: number): Promise<IEVAServiceResponse<EVA.Core.Services.DeleteAddressBookItem, EVA.API.EmptyResponseMessage>>;
        /**
            * Creates an instance of AddressBook.
            *
            * @param {number} [limit=15] The number of address book items to return
            * @param {number} [start=0] The number of address book items to skip
            * @param {EVA.Framework.SortDirection} [sortDirection=0] The sort direction for the addresses
            * @param {string} [sortProperty=null] The property to sort on
            * @memberof AddressBook
            */
        constructor(limit?: number, start?: number, sortDirection?: EVA.Framework.SortDirection, sortProperty?: string);
        /**
            * Sets the user to retrieve the address list for.
            * Only employees may fetch and update for other users
            *
            * @param {number} userId The user identifier
            * @returns
            * @memberof AddressBook
            */
        setUserId(userId: number): number;
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.ListAddressBook, EVA.Core.Services.ListAddressBookResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.ListAddressBook, EVA.Core.Services.ListAddressBookResponse>>;
}
export namespace Addresses {
        /**
            * Wrapper class for Address responses, since this is not a fetchable item
            * it's just a plain object
            */
        class Address {
                data: EVA.Core.AddressDto;
                setData(response: any): EVA.Core.AddressDto;
        }
        /**
            * Perform a lookup using zipcode and housenumber, resolve with an Address object
            *
            * @param  {string}  zipCode     zipcode to lookup
            * @param  {string}  houseNumber housenumber to lookup
            * @return {Promise}             [description]
            */
        function lookup(zipCode: string, houseNumber: string): Promise<Address>;
        /**
            * Request a list of available countries for a user to create addresses with
            * @return {Promise}
            */
        function getAvailableCountries(): Promise<EVA.Core.Services.CountryDto[]>;
        /**
            * Perform an address search using a single text string, responds with textual suggestions.
            * To get the details of the suggestion (city/street etc) a additional call
            * needs to be made to getAddressSuggestionDetails()
            *
            * @param {string}      query       The search query
            * @return {Promise}    array of found suggestions
            */
        function getAddressSuggestions(query: string): Promise<EVA.Core.AddressSuggestion[]>;
        /**
            * Retrieve the details of a suggestion
            *
            * @param {EVA.Core.AddressSuggestion}      suggestion      the address suggestion, can be retrieved using the getAddressSuggestions() function
            * @return {Promise}    the details of the address suggestion
            */
        function getAddressSuggestionDetails(suggestion: EVA.Core.AddressSuggestion): Promise<EVA.Core.AddressSuggestionDetails>;
}

export namespace UserPhoneNumbers {
    function create(phoneNumber: string, type: EVA.Core.PhoneNumberTypes, description?: string, isPrimary?: boolean): Promise<EVA.API.CreateResponse>;
    function update(id: number, phoneNumber: string, type: EVA.Core.PhoneNumberTypes, description?: string): Promise<EVA.API.RequestMessageWithEmptyResponse>;
    function remove(id: number): Promise<EVA.API.RequestMessageWithEmptyResponse>;
    function makePrimary(id: number): Promise<EVA.API.RequestMessageWithEmptyResponse>;
    function list(userId: number): Promise<EVA.Core.Services.GetUserPhoneNumbersResponse>;
}

/**
    * The CMS Page module provides access to content management pages from the EVA back-end * @preferred
    */
/**
    * Provides access to a content menu available in EVA
    */
export class Station extends FetchableItem<EVA.Core.StationDto, EVA.Core.Services.GetStation, EVA.Core.Services.GetStationResponse> {
        /**
            * Fetches the page content
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.GetStation, EVA.Core.Services.GetStationResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.GetStation, EVA.Core.Services.GetStationResponse>>;
}
/**
    * Provides access to a list of stations for an organisation available in EVA
    */
export class StationList extends FetchablePagedList<EVA.Core.StationDto, EVA.Core.Services.ListStationsForOrganizationUnit, EVA.Core.Services.ListStationsForOrganizationUnitResponse> {
        /**
            * Sets the organization id to retrieve the station list for
            * @param  {number} organizationId      The organization identifier
            * @return {void}                       This method doesn't return anything
            */
        setOrganizationId(organizationId: number): void;
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Core.StationDto, EVA.Core.Services.ListStationsForOrganizationUnit, EVA.Core.Services.ListStationsForOrganizationUnitResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.ListStationsForOrganizationUnit, EVA.Core.Services.ListStationsForOrganizationUnitResponse>>;
}

export namespace Cultures {
    function getApplicationCultures(): Promise<Array<EVA.PIM.Core.ListApplicationContentCulture>>;
}

export namespace Currencies {
    function getAvailableCurrencies(): Promise<Array<EVA.Core.CurrencyDto>>;
    function setOrderCurrency(currencyID: string, orderID: number): Promise<{}>;
}

export namespace Availability {
    function getAvailabilityForProductSet(products: Array<EVA.Core.ProductQuantityDto>, organizationUnitIDs?: Array<number>, fastestPickupShopOnly?: boolean, includeAvailabilityTexts?: boolean, detailedShopInformation?: boolean): Promise<Array<EVA.Core.ProductAvailabilityIndication>>;
    function getStockAvailabilityEstimateForProducts(organizationUnitId: number, products: EVA.Core.Services.GetStockAvailabilityEstimateForProductsProduct[]): Promise<EVA.Core.Services.GetStockAvailabilityEstimateForProductsResponseProduct[]>;
    function getProductAvailabilty(products: EVA.Core.Services.GetProductAvailabilityProduct[], options: EVA.Core.Services.GetProductAvailabilityAvailabilityOptions, organizationUnitID?: number): Promise<{}>;
}

export namespace Functionalities {
    function getSupportedFunctionalities(): Promise<string[]>;
}

export function addPushNotificationDevice(deviceToken: string, deviceOS: string, mobileAppID: string, backendSystemID: string): Promise<IEVAServiceResponse<EVA.Core.Services.AddPushNotificationDevice, EVA.API.EmptyResponseMessage>>;
export function removePushNotificationDevice(deviceToken: string, backendSystemID?: string): Promise<IEVAServiceResponse<EVA.Core.Services.RemovePushNotificationDevice, EVA.API.EmptyResponseMessage>>;

export namespace Webshop {
        function sendContactFrom(type: string, properties: any): Promise<EVA.Core.Services.SendContactForm>;
}
export class WebShopList extends FetchablePagedList<EVA.Core.OrganizationUnitDto, EVA.Core.Services.ListOrganizationUnits, EVA.Core.Services.ListOrganizationUnitsResponse> {
        /**
            * Returns the current page identifier
            * @return {string}       The page identifier
            */
        getPageID(): string;
        /**
            * Set the make up page identifier
            * @param  {string} page_id The page identifier
            * @return {string}         The currently page identifier
            */
        setPageID(page_id: string): string;
        /**
            * Fetches the list of items
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.ListOrganizationUnits, EVA.Core.Services.ListOrganizationUnitsByTypeResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(): Promise<IEVAServiceResponse<EVA.Core.Services.ListOrganizationUnits, EVA.Core.Services.ListOrganizationUnitsResponse>>;
}

export namespace Wishlist {
    function create(name: string, data?: any): Promise<EVA.Core.Services.CreateWishListResponse>;
    function get(orderId: number, accessToken?: string, showUnconfirmedFundings?: boolean, productProperties?: string[]): Promise<EVA.Core.Services.GetWishListResponse>;
    function getForUser(userId: number, showUnconfirmedFundings?: boolean, productProperties?: string[], showClosedOrders?: boolean): Promise<EVA.Core.Services.GetWishListsForUserResponse>;
    function cancel(orderId: number): Promise<EVA.API.EmptyResponseMessage>;
    function update(orderId: number, sortedLineIds: number[], name?: string, data?: any): Promise<EVA.API.EmptyResponseMessage>;
    function addProduct(orderId: number, productId: number, quanity?: number, single?: boolean): Promise<EVA.Core.Services.AddProductToWishListResponse>;
    function removeProduct(orderId: number, lineId: number, quanity?: number): Promise<EVA.API.EmptyResponseMessage>;
    function addWishlistProductToOrder(orderId: number, accessToken: string, lines?: EVA.Core.Services.AddWishListProductToOrderLine[], lineActionType?: EVA.Core.LineActionTypes, name?: string, remark?: string): Promise<EVA.Core.SimpleShoppingCartResponse>;
    function createPayment(orderId: number, accessToken: string, paymentMethodCode: string, properties: any, amount?: number, name?: string, remark?: string, lines?: EVA.Core.Services.CreateWishListPaymentLine[]): Promise<EVA.Core.Services.CreateWishListPaymentResponse>;
    function setWishListOrderLineData(orderId: number, orderLineId: number, isHidden: boolean): Promise<{}>;
    function updateWishlistFunding(orderId: number, name: string, remark: string): Promise<{}>;
    function createWishListPaymentFromShoppingCart(wishlistId: number, cartId: number, code: string, name: string, remark: string, properties: any, token?: string): Promise<{}>;
}

/**
    * The giftwrap module provides access to the Giftwrap specific calls on the EVA back-end
    * @preferred
    */
/**
    * Provides access to a Rituals specific functions in EVA
    */
export namespace Giftwrap {
        function getGiftWrappingOptionsForOrder(requestData: EVA.Core.Services.GetGiftWrappingOptionsForOrder): Promise<IEVAServiceResponse<EVA.Core.Services.GetGiftWrappingOptionsForOrder, EVA.Core.Services.GetGiftWrappingOptionsForOrderResponse>>;
        function setGiftWrappingOptionsOnOrder(requestData: EVA.Core.Services.SetGiftWrappingOptionsOnOrder): Promise<IEVAServiceResponse<EVA.Core.Services.SetGiftWrappingOptionsOnOrder, EVA.API.RequestMessageWithEmptyResponse>>;
}

/**
    * The Url Rewrite module provides access to Url Rewrites from the EVA back-end
    *
    * @preferred
    */
export namespace UrlRewrite {
        /**
            * Check if a certain request path needs rewriting
            * @return {Promise}    A promise resolving when the call to the back-end has completed
            *
            */
        function rewrite(requestPath: string): Promise<IEVAServiceResponse<EVA.Core.Services.RewriteUrl, EVA.Core.Services.RewriteUrlResponse>>;
}

/**
    * The base module declares reusable base classes for items, lists, etc.
    * @preferred
    */
export interface IPageInfo {
        currentPageNumber: number;
        totalNumberOfPages: number;
        totalNumberOfItems: number;
}
/**
    * Provides access to an item available on the EVA back-end
    */
export class FetchableItem<T, REQ, RES> {
        /**
            * The item detail data. This is available after a fetch from the back-end.
            * It is exposed globally so clients can bind and watch it directly for updates
            * @type {T}
            */
        data: T;
        /**
            * The unique identifier of the item. Used when retrieving an exsting item from the back-end.
            * Defaults to a number but some items use string based identifiers
            * @type {number | string}
            */
        protected _id: number | string;
        /**
            * This class wraps an item from EVA and the operations you can perform on it.
            * You should supply the item identifier when creating an instance of this class
            *
            * @param  {number | string}    id      The identifier of the item to retrieve
            * @return {void}                       This method doesn't return anything
            */
        constructor(id?: number | string);
        /**
         * Set for the id of the fetchable item. This can be overriden in a subclass so
         * additional behaviour can be implemented when setting the id
         *
         * @param  {number | string}      id An item identifier
         * @return {void}                    This item doesn't return anything
         */
        id: number | string;
        /**
            * Returns the current item identifier
            * @return {number | string} An item identifier
            */
        getId(): number | string;
        /**
            * Returns the current item details. Only available after a successful fetch
            * The details are also exposed direct as the .data attribute for easy binding
            * @return {T} The item details
            */
        getData(): T;
        /**
            * Sets the current item details using the fetched service response.
            * Extending classes should override this method to pull the details from response
            * @param  {RES} response The response from the service call
            * @return {T}            The item details
            */
        setData(response: any): T;
        /**
            * Fetches the item details from the EVA back-end
            * @param  {string}  serviceName The name of the EVA Service to call
            * @param  {REQ}     requestData The request data for service call
            * @param  {string}  path        The request path (rest-like) if not using post message
            * @return {Promise<IEVAServiceResponse<REQ, RES>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(serviceName: string, requestData: REQ, path?: string, method?: EXMLHttpRequestMethod): Promise<IEVAServiceResponse<REQ, RES>>;
}
/**
    * Provides access to a pageable list available on the EVA back-end
    */
export class FetchablePagedList<T, REQ, RES> {
        /**
            * The page item data. This is available after a fetch from the back-end.
            * It is exposed globally so clients can bind and watch it directly for updates
            * @type {Arra<T>}
            */
        data: Array<T>;
        /**
            * The page configuration instance used to instruct the EVA back-end which
            * data to fetch
            * @type {EVA.Framework.PageConfig}
            */
        protected pageConfig: EVA.Framework.PageConfig;
        /**
            * The current page for which the data is available
            * Only available after fetch has been called
            * @type {number}
            */
        protected currentPageNumber: number;
        /**
            * The total number of pages in the list
            * Only available after fetch has been called
            * @type {number}
            */
        protected totalNumberOfPages: number;
        /**
            * The total number of items in the list
            * Only available after fetch has been called
            * @type {number}
            */
        protected totalNumberOfItems: number;
        /**
            * The list filter applied to the list
            * This may differ from the list of requested filter in the page configuration
            * Only available after fetch has been called
            * @type {any}
            */
        protected appliedFilter: any;
        /**
            * This class wraps a paged result list from EVA and the operations you can perform on it.
            * You can optionally supply page configuration values to start somewhere other then
            * the start of the list
            *
            * @param  {number}                         start           The item to start the list at. Defaults to 0 and is a 0-based index.
            * @param  {number}                         limit           The page size limit. Defaults to 15
            * @param  {EVA.Framework.SortDirection}  sortDirection   The sorting direction for the list. Defaults to ascending
            * @return {void}                                           This method doesn't return anything
            */
        constructor(limit?: number, start?: number, sortDirection?: EVA.Framework.SortDirection, sortProperty?: string);
        /**
            * Returns the current page size limit
            * @return {number}       The configured page size limit
            */
        getLimit(): number;
        /**
            * Set the page size limit
            * @param  {number} limit The new page size limit
            * @return {number}       The configured page size limit
            */
        setLimit(limit: number): number;
        /**
            * Return the current starting item for the list
            * @return {number}       The configured starting point for the list
            */
        getStart(): number;
        /**
            * Set the starting point for the list
            * @param  {number} start The new starting point for the list
            * @return {number}       The configured starting point for the list
            */
        setStart(start: number): number;
        /**
            * Return the current property being sorted on
            * Can be undefined which means the server decides
            * @return {string}      The configured sorting property
            */
        getSortProperty(): string;
        /**
            * Set the property to sort on
            * @param  {string} name The new sorting property
            * @return {string}      The configured sorting property
            */
        setSortProperty(name: string): string;
        /**
            * Returns the current sort direction
            * @return {string}      The configured sorting property
            */
        getSortDirection(): EVA.Framework.SortDirection;
        /**
            * Sets the direction to sort the list on
            * @param  {EVA.Framework.SortDirection} direction The new sort direction
            * @return {string}      The configured sorting property
            */
        setSortDirection(direction: EVA.Framework.SortDirection): EVA.Framework.SortDirection;
        /**
            * Set the filter that is to be applied to the list
            * @param  {any} filter The new filter structure
            * @return {any}        The configured filter
            */
        setFilter(filter: any): any;
        /**
            * Returns the current filter for the list
            * @return {any}        The configured filter
            */
        getFilter(): any;
        /**
            * Returns the current filter applied for the list
            * Only after available after fetch has been called
            * The applied filter can differ from the requested filter depending on how
            * the EVA back-end and its products are configured
            * @return {any}        The applied filter
            */
        getAppliedFilter(): any;
        /**
            * Returns all the current page configuration parameters
            * These determine which part of the list data is returned
            * @return {EVA.Framework.PageConfig} The current page configuration
            */
        getPageConfiguration(): EVA.Framework.PageConfig;
        /**
            * Sets all the current page configuration parameters at once
            * These determine which part of the list data is returned
            * @param  {EVA.Framework.PageConfig} pageConfig The page configuration details
            * @return {EVA.Framework.PageConfig}            The new page configuration details
            */
        setPageConfiguration(pageConfig: EVA.Framework.PageConfig): EVA.Framework.PageConfig;
        /**
            * Returns the current page information which entails the current page, total number of pages and total number of items
            * @return {IPageInfo}  The current page information
            */
        getPageInfo(): IPageInfo;
        /**
            * Returns the current page item details. Only available after a successful fetch
            * The details are also exposed direct as the .data attribute for easy binding
            * @return {Array<T>} An array of item details
            */
        getData(): T[];
        /**
            * Sets the current item details using the fetched service response.
            * Extending classes should override this method to pull the details from response
            * @param  {RES}        response    The response from the service call
            * @return {Array<T>}               The item details
            */
        setData(response: any): T[];
        /**
            * Fetches the list of items from the EVA back-end
            * @param  {string}  serviceName The name of the EVA Service to call
            * @param  {REQ}     requestData The request data for service call
            * @return {Promise<IEVAServiceResponse<REQ, RES>>} A promise resolving when the fetch from the back-end has completed
            */
        fetch(serviceName: string, requestData: REQ, path?: string, method?: EXMLHttpRequestMethod): Promise<IEVAServiceResponse<REQ, RES>>;
}

/**
    * The payments module provides the means to pay for an order using an online payment provider
    * @preferred
    */
/**
    * Provides access to order payment methods available in EVA
    */
export class Payments {
        /**
            * [constructor description]
            * @param  {Order}  order The order to perform the payments for
            * @return {void}         This method doesn't return anything
            */
        constructor(order: Order | ShoppingCart);
        /**
            * Returns the list of available payment methods
            * @return {Promise<IEVAServiceResponse<EVA.Core.GetAvailablePaymentMethods, EVA.Core.GetAvailablePaymentMethodsResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        getAvailableMethods(): Promise<IEVAServiceResponse<EVA.Core.Services.GetAvailablePaymentMethods, EVA.Core.Services.GetAvailablePaymentMethodsResponse>>;
        getMultiSafePaymentGateWays(orderId: string | number): Promise<IEVAServiceResponse<EVA.Payment.MultiSafepay.GetMultiSafepayGateways, EVA.Payment.MultiSafepay.GetMultiSafepayGatewaysResponse>>;
        getMollyPaymentGateWays(): Promise<IEVAServiceResponse<EVA.Payment.Mollie.ListMollieGateways, EVA.Payment.Mollie.ListMollieGatewaysResponse>>;
        getBuckarooPaymentGateWays(): Promise<IEVAServiceResponse<EVA.Payment.Buckaroo.ListBuckarooGateways, EVA.Payment.Buckaroo.ListBuckarooGatewaysResponse>>;
        /**
            * Retuns the list of user cards available
            * @return {Promise<IEVAServiceResponse<EVA.Payment.UserCard.GetUserCardsForUser, EVA.Payment.UserCard.GetUserCardsForUserResponse>>} A promise resolving when the fetch from the back-end has completed
            */
        listUserCards(userID: number): Promise<IEVAServiceResponse<EVA.Payment.UserCard.GetUserCardsForUser, EVA.Payment.UserCard.GetUserCardsForUserResponse>>;
        /**
            * Pay for the order using a PIN terminal from ADYEN (shop/employee only)
            * @param  {string}  merchantCode     The ADYEN merchant code to use
            * @param  {number}  amount           The amount to pay
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithAdyen(merchantCode: string, amount: number): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            *
            * @param {string} merchantAccount The Adyen merchant account to use.
            * @param {number} adyenChannel    The adyen channel to use. Possible values are: 1 = Web, 2 = iOS, 3 = Android.
            * @param {string} origin          The origin URL
            * @param {string} returnUrl       The return URL
            * @param {string} token           The token to use
            * @param {number} amount          The amount of money to pay
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithAdyenCheckout(merchantAccount: string, adyenChannel: 1 | 2 | 3, origin: string, returnUrl: string, token: string, amount: number): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        payWithAdyenCheckoutSession(merchantAccount: string, adyenChannel: 1 | 2 | 3, origin: string, returnUrl: string, token: string, amount: number, version?: string): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        payWithAdyenHostedPaymentPages(merchantAccount: string, amount: number): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        payWithMultiSafePay(method: string, returnUrl: string, amount?: number): any;
        payWithMollie(method: string, returnUrl: string, amount?: number, issuer?: string): any;
        payWithBuckaroo(paymentTypeId: number, method: string, returnUrl: string, amount?: number, issuer?: string): any;
        /**
            * Pay for the order using iDEAL
            * @param  {string}  returnUrl     The URL to return to when the payment has completed
            * @param  {string}  idealBankName The name of the bank for the ideal payment
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithIdeal(returnUrl: string, idealBankName: string): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for the order using PayPal
            * @param  {string}  returnUrl     The URL to return to when the payment has completed
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithPaypal(returnUrl: string): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for the order using a MasterCard/Eurocard credit card
            * @param  {string}  returnUrl     The URL to return to when the payment has completed
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithMasterCard(returnUrl: string): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for the order using an American Express credit card
            * @param  {string}  returnUrl     The URL to return to when the payment has completed
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithAmericanExpress(returnUrl: string): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for the order using a Visa credit card
            * @param  {string}  returnUrl     The URL to return to when the payment has completed
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithVisa(returnUrl: string): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for an order with an insurance card (HFS Waardebrief)
            * @param {string}  referenceNumber The reference number for the credit payment
            * @param {string}  policyNumber    The policy number for the credit payment
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithInsuranceCreditPayment(referenceNumber: string, policyNumber: string): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for an order with a user card
            * @param {number}  userId          The id of the user
            * @param {number}  userCardId      The id of the userCardId
            * @param {amount}  amount          The amount that will be charged from the usercard
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithUserCard(paymentMethodId: number, userId: number, userCardId: number, amount: number): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for an order with Freebees
            * @param {number}  userId          The id of the user
            * @param {number}  userCardId      The id of the userCardId
            * @param {amount}  amount          The amount that will be charged from the usercard
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithFreebees(cardNumber: string, pin?: string, amount?: number, pinType?: "pin" | "password"): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        payWithEvaPay(baseUrl: string, sendEmail: boolean, amount: number): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Get the balance of the usercard
            *
            * @param {number} cardId
            * @param {string} currencyId
            * @return {Promise<IEVAServiceResponse<EVA.Payment.UserCard.GetUserCardBalance, EVA.Payment.UserCard.GetUserCardBalanceResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        getUserCardBalance(cardId: number, currencyId?: string): Promise<IEVAServiceResponse<EVA.Payment.UserCard.GetUserCardBalance, EVA.Payment.UserCard.GetUserCardBalanceResponse>>;
        /**
            * Get the balance of a gifcard
            *
            * @param {string} cardId
            * @param {string} cardPin
            * @param {string} barcode
            * @param {string} cardType
            * @return {Promise<IEVAServiceResponse<EVA.Core.Services.CardBalanceCheck, EVA.EVA.Core.Services.CardBalanceCheckResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        cardBalanceCheck(cardId: string, cardPin?: string, barcode?: string, cardType?: string): Promise<IEVAServiceResponse<EVA.Core.Services.CardBalanceCheck, EVA.Core.Services.CardBalanceCheckResponse>>;
        cancelPendingUserCardPayment(paymentTransactionID: number): Promise<IEVAServiceResponse<EVA.Payment.UserCard.CancelPendingUserCardPayment, EVA.API.EmptyResponseMessage>>;
        /**
            * Pay for an order with AfterPay
            * @param  {any}  properties     Optional additional properties to send
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithAfterPay(properties?: any): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Finalize a payment (usercard needs this)
            * @param {string}  paymentTransactionID    The payment transaction that is to be finalized
            * @return {Promise<IEVAServiceResponse<EVA.Core.FinalizePayment, EVA.Core.FinalizePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        finalizePayment(paymentTransactionID: number, amount: number): Promise<IEVAServiceResponse<EVA.Core.Services.FinalizePayment, EVA.Core.Services.FinalizePaymentResponse>>;
        /**
            * Pay for an order with a manual payment
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithManualPayment(): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for the order using a PIN terminal (shop/employee only)
            * @param  {string}  stationId     The URL to return to when the payment has completed
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithPIN(stationId: string, amountGiven: number): Promise<IEVAServiceResponse<EVA.Pin.StartTransaction, EVA.Pin.StartTransactionResponse>>;
        /**
            * Abort a payment for the order using a PIN terminal (shop/employee only)
            * @param  {string}  stationId     The URL to return to when the payment has completed
            * @return {Promise<IEVAServiceResponse<EVA.Pin.CreatePinPayment, EVA.Pin.CreatePinPaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        abortPIN(stationId: string): Promise<IEVAServiceResponse<EVA.Pin.AbortTransaction, EVA.Pin.AbortTransactionResponse>>;
        /**
            * Pay for the order using a Cash drawer (shop/employee only)
            * @parm   {Order}   order         The order that is to be paid
            * @param  {string}  returnUrl     The URL to return to when the payment has completed
            * @return {Promise<IEVAServiceResponse<EVA.Payment.Cash.MakeCashPayment, EVA.Payment.Cash.MakeCashPaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithCash(stationId: string, amountGiven: number): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for an order with a Media Markt method
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithMediaMarktPayment(): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
        /**
            * Pay for the order using Intersolve giftcards
            * @param  {string}  cardNumber     The number on the Intersolve giftcard
            * @param  {string}  [pin]          A giftcard optionally has a PIN, provide when on the card to use the card
            * @return {Promise<IEVAServiceResponse<EVA.Core.CreatePayment, EVA.Core.CreatePaymentResponse>>}   A promise resolving when the fetch from the back-end has completed
            */
        payWithIntersolve(returnUrl: string, cardNumber: string, pin?: string, amountGiven?: number): Promise<IEVAServiceResponse<EVA.Core.Services.CreatePayment, EVA.Core.Services.CreatePaymentResponse>>;
}

/**
    * This method makes the EVA SDK ready for use and configures access to your back-end datastore
    * @param  {string}     authenticationToken   Your application authentication token
    * @param  {number}     applicationId         The application identifier for your store
    * @param  {string}     endPointURL           The URL for the EVA back-end store you want to use
    * @return {void}                             This method doesn't return anything
    */
export function init(authenticationToken: string, applicationId: number, endPointURL?: string): void;
/**
    * Expose the settings manager and the means to override the XMLHttpRequest provider
    */
/**
    * These are the data providers availabe in eva
    */

