/* tslint:disable:max-classes-per-file */
/* tslint:disable:variable-name */
/* tslint:disable:no-trailing-whitespace */
/* tslint:disable:no-consecutive-blank-lines */
/* tslint:disable:no-namespace */
/* tslint:disable:member-access */
/* tslint:disable:typedef-whitespace */
/* tslint:disable:no-internal-module */

declare module EVA.Carrier.PostNL {
  
  export class AvailableTimeframe {
    Option : EVA.Carrier.PostNL.TimeframeOptions; 
    StartDateTime : string; // DateTime
    EndDateTime : string; // DateTime
    Costs : number; // Decimal
  }
  
  export class AvailableTimeframeDate {
    Date : string; // DateTime
    Timeframes : EVA.Carrier.PostNL.AvailableTimeframe[]; 
  }
  
  export class PostNLGetAvailablePickUpLocationsForAreaCoordinate {
    Latitude : number; // Decimal
    Longitude : number; // Decimal
  }
  
  export class Location {
    LocationCode : string; 
    Name : string; 
    Distance? : number; // Int32, nullable
    Latitude? : number; // Decimal, nullable
    Longitude? : number; // Decimal, nullable
    Address : EVA.Carrier.PostNL.LocationAddress; 
    DeliveryOptions : string[]; 
    OpeningHours : EVA.Carrier.PostNL.LocationOpeningHours; 
    PartnerName : string; 
    PhoneNumber : string; 
    RetailNetworkID : string; 
    Saleschannel : string; 
    TerminalType : string; 
  }
  
  export class LocationAddress {
    Countrycode : string; 
    Zipcode : string; 
    HouseNr : string; 
    Street : string; 
    City : string; 
    Remark : string; 
  }
  
  export class LocationOpeningHours {
    Monday : string[]; 
    Tuesday : string[]; 
    Wednesday : string[]; 
    Thursday : string[]; 
    Friday : string[]; 
    Saturday : string[]; 
    Sunday : string[]; 
  }
  
  export class PostNLCreateShippingLabelForShipment extends EVA.API.RequestMessageWithEmptyResponse {
    ShipmentID : number; // Int32
    StationID? : number; // Int32, nullable
  }
  
  export class PostNLGetAvailablePickUpLocationsForArea extends EVA.API.RequestMessageGeneric<EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForAreaResponse> {
    OrderID : number; // Int32
    NorthWest : EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForAreaCoordinate; 
    SouthEast : EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForAreaCoordinate; 
  }
  
  export class PostNLGetAvailablePickUpLocationsForAreaResponse extends EVA.API.ResponseMessage {
    Locations : EVA.Carrier.PostNL.Location[]; 
  }
  
  export class PostNLGetAvailablePickUpLocationsForOrder extends EVA.API.RequestMessageGeneric<EVA.Carrier.PostNL.PostNLGetAvailablePickUpLocationsForOrderResponse> {
    OrderID : number; // Int32
  }
  
  export class PostNLGetAvailablePickUpLocationsForOrderResponse extends EVA.API.ResponseMessage {
    Locations : EVA.Carrier.PostNL.Location[]; 
  }
  
  export class PostNLGetAvailableTimeframesForOrder extends EVA.API.RequestMessageGeneric<EVA.Carrier.PostNL.PostNLGetAvailableTimeframesForOrderResponse> {
    OrderID : number; // Int32
    StartDate : string; // DateTime
    EndDate : string; // DateTime
    SkipAvailabilityChecks : boolean; 
  }
  
  export class PostNLGetAvailableTimeframesForOrderResponse extends EVA.API.ResponseMessage {
    Frames : EVA.Carrier.PostNL.AvailableTimeframeDate[]; 
  }
  
  export class PostNLGetShippingOptionsForOrder extends EVA.API.RequestMessageGeneric<EVA.Carrier.PostNL.PostNLGetShippingOptionsForOrderResponse> {
    OrderID : number; // Int32
  }
  
  export class PostNLGetShippingOptionsForOrderResponse extends EVA.API.ResponseMessage {
    Date? : string; // DateTime, nullable
    TimeframeOptions : EVA.Carrier.PostNL.TimeframeOptions; 
    PickUpLocationID : string; 
  }
  
  export class PostNLUpdateShippingOptionsForOrder extends EVA.API.RequestMessageWithEmptyResponse {
    OrderID : number; // Int32
    Date? : string; // DateTime, nullable
    TimeframeOptions : EVA.Carrier.PostNL.TimeframeOptions; 
    PickUpLocationID : string; 
  }
  
  export enum TimeframeOptions {
    Daytime = 1,
    Evening = 2,
    Morning = 4,
    Noon = 8,
    Sunday = 16,
    Sameday = 32,
    Afternoon = 64,
    All = 127,
  }
  
}