/* 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.CRM.Core {
  
  export class CompleteCustomerInteractionTask extends EVA.API.RequestMessageWithEmptyResponse {
    WorkSet : EVA.CRM.Core.CustomerInteractionWorkSet; 
  }
  
  export class CompleteOrderInterventionTask extends EVA.API.RequestMessageWithEmptyResponse {
    WorkSet : EVA.CRM.Core.OrderInterventionWorkSet; 
  }
  
  export class CreateCustomerInteractionTask extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.CreateCustomerInteractionTaskResponse> {
    Priority : EVA.CRM.Core.CustomerInteractionTaskPriorities; 
    TypeID : number; // Int32
    CustomerID : number; // Int32
    UserTask : EVA.CRM.Core.CustomerInteractionUserTaskDto; 
  }
  
  export class CreateCustomerInteractionTaskResponse extends EVA.API.ResponseMessage {
    ID : number; // Int32
  }
  
  export class CreateCustomerInteractionTaskType extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.CreateCustomerInteractionTaskTypeResponse> {
    Name : string; 
    Description : string; 
    FollowUpTypeID? : number; // Int32, nullable
  }
  
  export class CreateCustomerInteractionTaskTypeResponse extends EVA.API.ResponseMessage {
    ID : number; // Int32
  }
  
  export class CreateCustomerReturn extends EVA.API.RequestMessageGeneric<EVA.Core.SimpleShoppingCartResponse> {
    OrderID : number; // Int32
    TargetOrderID? : number; // Int32, nullable
    SessionID : string; 
    Lines : EVA.CRM.Core.CustomerReturnLine[]; 
    ReturnWithoutProducts : boolean; 
    ReturnToSameStockOrganizationUnit : boolean; 
  }
  
  export class CreateCustomerReturnWithoutOrder extends EVA.API.RequestMessageGeneric<EVA.Core.SimpleShoppingCartResponse> {
    TargetOrderID? : number; // Int32, nullable
    SessionID : string; 
    Lines : EVA.CRM.Core.ProductReturnLine[]; 
    CustomerID : number; // Int32
    SoldFromOrganizationUnitID : number; // Int32
    ShipToOrganizationUnitID : number; // Int32
  }
  
  export class CreateUserField extends EVA.API.RequestMessageGeneric<EVA.API.CreateResponse> {
    Name : string; 
    BackendID : string; 
    DefaultValue : string; 
    Requirements : EVA.CRM.Core.UserFieldRequirements; 
  }
  
  export class CreateUserFieldOption extends EVA.API.RequestMessageGeneric<EVA.API.CreateResponse> {
    UserFieldID : number; // Int32
    Name : string; 
    BackendID : string; 
    Value : string; 
  }
  
  export class CreateUserInteraction extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.CreateUserInteractionResponse> {
    UserID : number; // Int32
    Text : string; 
    OrderID? : number; // Int32, nullable
    UserTaskID? : number; // Int32, nullable
  }
  
  export class CreateUserInteractionResponse extends EVA.API.ResponseMessage {
    ID : number; // Int32
  }
  
  export class CustomerInteractionWorkSetCustomerDto {
    FirstName : string; 
    LastName : string; 
    EmailAddress : string; 
    PhoneNumber : string; 
  }
  
  export class ListCustomerInteractionTasksResponseCustomerInteractionTaskDto {
    ID : number; // Int32
    Priority : EVA.CRM.Core.CustomerInteractionTaskPriorities; 
    Type : EVA.CRM.Core.CustomerInteractionTaskTypeDto; 
    Customer : EVA.CRM.Core.CustomerInteractionUserDto; 
    CustomerID : number; // Int32
    UserTask : EVA.CRM.Core.CustomerInteractionUserTaskDto; 
    UserTaskID : number; // Int32
  }
  
  export enum CustomerInteractionTaskPriorities {
    None = 0,
    Low = 1,
    Normal = 2,
    High = 3,
    Immediate = 4,
  }
  
  export class CustomerInteractionTaskTypeDto {
    ID : number; // Int32
    Name : string; 
    Description : string; 
    FollowUpTypeID? : number; // Int32, nullable
    FollowUpTypeName : string; 
  }
  
  export class CustomerInteractionUserDto {
    FullName : string; 
    PhoneNumber : string; 
    EmailAddress : string; 
  }
  
  export class CustomerInteractionUserTaskDto {
    StartTime? : string; // DateTime, nullable
    DeadLine? : string; // DateTime, nullable
    Description : string; 
    UserID? : number; // Int32, nullable
    User : EVA.CRM.Core.CustomerInteractionUserDto; 
    OrganizationUnitID : number; // Int32
    OrganizationUnitName : string; 
    IsActive : boolean; 
    IsCompleted : boolean; 
  }
  
  export class CustomerInteractionWorkSet {
    UserTaskID : number; // Int32
    UserTask : EVA.Core.UserTaskDto; 
    TypeID : number; // Int32
    TypeName : string; 
    CustomerID : number; // Int32
    Customer : EVA.CRM.Core.CustomerInteractionWorkSetCustomerDto; 
    Priority : EVA.CRM.Core.CustomerInteractionTaskPriorities; 
  }
  
  export class CustomerReturnLine {
    OrderLineID : number; // Int32
    Quantity : number; // Int32
    Remark : string; 
    ReturnReasonID? : number; // Int32, nullable
  }
  
  export class DeleteCustomerInteractionTask extends EVA.API.RequestMessageWithEmptyResponse {
    ID : number; // Int32
  }
  
  export class DeleteCustomerInteractionTaskType extends EVA.API.RequestMessageWithEmptyResponse {
    ID : number; // Int32
  }
  
  export class DeleteUserField extends EVA.API.DeleteRequest implements EVA.API.IRequestRespondsAs<EVA.API.EmptyResponseMessage> {
  }
  
  export class DeleteUserFieldOption extends EVA.API.DeleteRequest implements EVA.API.IRequestRespondsAs<EVA.API.EmptyResponseMessage> {
  }
  
  export class DeleteUserInteraction extends EVA.API.RequestMessageWithEmptyResponse {
    ID : number; // Int32
  }
  
  export class DetachFromCustomerInteractionTask extends EVA.API.RequestMessageWithEmptyResponse {
    UserTaskID : number; // Int32
  }
  
  export class GetCustomerInteractionTaskByID extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.GetCustomerInteractionTaskByIDResponse> {
    ID : number; // Int32
  }
  
  export class GetCustomerInteractionTaskByIDResponse extends EVA.API.ResponseMessage {
    ID : number; // Int32
    Priority : EVA.CRM.Core.CustomerInteractionTaskPriorities; 
    Type : EVA.CRM.Core.CustomerInteractionTaskTypeDto; 
    Customer : EVA.CRM.Core.CustomerInteractionUserDto; 
    CustomerID : number; // Int32
    UserTask : EVA.CRM.Core.CustomerInteractionUserTaskDto; 
    UserTaskID : number; // Int32
  }
  
  export class GetCustomerInteractionTaskTypeByID extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.GetCustomerInteractionTaskTypeByIDResponse> {
    ID : number; // Int32
  }
  
  export class GetCustomerInteractionTaskTypeByIDResponse extends EVA.API.ResponseMessage {
    ID : number; // Int32
    Name : string; 
    Description : string; 
    FollowUpTypeID? : number; // Int32, nullable
    FollowUpTypeName : string; 
  }
  
  export class GetCustomerInteractionTaskTypes extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.GetCustomerInteractionTaskTypesResponse> {
  }
  
  export class GetCustomerInteractionTaskTypesResponse extends EVA.API.ResponseMessage {
    CustomerInteractionTaskTypes : EVA.CRM.Core.CustomerInteractionTaskTypeDto[]; 
  }
  
  export class GetReturnOrdersForOrder extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.GetReturnOrdersForOrderResponse> {
    OrderID : number; // Int32
  }
  
  export class GetReturnOrdersForOrderResponse extends EVA.API.ResponseMessage {
    Orders : EVA.CRM.Core.ReturnOrder[]; 
  }
  
  export class GetUserFields extends EVA.API.RequestMessage implements EVA.API.IRequestRespondsAs<EVA.CRM.Core.GetUserFieldsResponse> {
  }
  
  export class GetUserFieldsForUser extends EVA.API.RequestMessage implements EVA.API.IRequestRespondsAs<EVA.CRM.Core.GetUserFieldsForUserResponse> {
    UserID : number; // Int32
  }
  
  export class GetUserFieldsForUserResponse extends EVA.API.GetResponse<EVA.CRM.Core.UserFieldDto[]> {
  }
  
  export class GetUserFieldsResponse extends EVA.API.GetResponse<EVA.CRM.Core.UserFieldDto[]> {
  }
  
  export class GetUserInteractionByID extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.GetUserInteractionByIDResponse> {
    ID : number; // Int32
  }
  
  export class GetUserInteractionByIDResponse extends EVA.API.ResponseMessage {
    ID : number; // Int32
    UserID : number; // Int32
    User : EVA.CRM.Core.GetUserInteractionByIDResponseUserDto; 
    Text : string; 
    OrderID? : number; // Int32, nullable
    UserTaskID? : number; // Int32, nullable
    CreationTime : string; // DateTime
  }
  
  export class ListCustomerInteractionTasks extends EVA.API.PagedResultRequest<EVA.CRM.Core.ListCustomerInteractionTasksResponse> {
  }
  
  export class ListCustomerInteractionTasksResponse extends EVA.API.PagedResultResponse<EVA.CRM.Core.ListCustomerInteractionTasksResponseCustomerInteractionTaskDto> {
  }
  
  export class ListOrderInterventionTasks extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.ListOrderInterventionTasksResponse> {
    PageConfig : EVA.Framework.PageConfig; 
  }
  
  export class ListOrderInterventionTasksResponse extends EVA.API.ResponseMessage {
    Result : EVA.Framework.PagedResultGeneric<EVA.CRM.Core.OrderInterventionTaskDto>; 
  }
  
  export class ListUserInteractions extends EVA.API.PagedResultRequest<EVA.CRM.Core.ListUserInteractionsResponse> {
  }
  
  export class ListUserInteractionsResponse extends EVA.API.PagedResultResponse<EVA.CRM.Core.ListUserInteractionsResponseUserInteractionDto> {
  }
  
  export class OrderInterventionTaskDto {
    ID : number; // Int32
    UserTaskID : number; // Int32
    Reason : string; 
    Comment : string; 
    OrderID : number; // Int32
    CreationTime : string; // DateTime
    AssignedToUser : string; 
  }
  
  export class OrderInterventionWorkSet {
    UserTaskID : number; // Int32
    OrderInterventionTaskID : number; // Int32
    OrderID : number; // Int32
    Reason : string; 
    Comment : string; 
  }
  
  export class ProductReturnLine {
    ProductID : number; // Int32
    // A positive number that indicates the quantity of products returned.
    Quantity : number; // Int32
    Remark : string; 
    ReturnReasonID? : number; // Int32, nullable
  }
  
  export class ReceiveReturnOrder extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.ReceiveReturnOrderResponse> {
    OrderID : number; // Int32
    Lines : EVA.CRM.Core.ReceiveReturnOrderReturnedLine[]; 
  }
  
  export class ReceiveReturnOrderResponse extends EVA.API.ResponseMessage {
    Messages : EVA.Core.ShipmentResultMessage[]; 
  }
  
  export enum RefundMethod {
    UserCard = 1,
    Automatic = 2,
  }
  
  export class RefundOrder extends EVA.API.RequestMessageWithEmptyResponse {
    OrderID : number; // Int32
    Reason : string; 
    AmountToRefund? : number; // Decimal, nullable
  }
  
  export class ReceiveReturnOrderReturnedLine {
    OrderLineID : number; // Int32
    Remark : string; 
    Quantity : number; // Int32
  }
  
  export class ReturnLineDto {
    OrderLineID? : number; // Int32, nullable
    ProductID? : number; // Int32, nullable
    Quantity : number; // Int32
    ResourceID? : number; // Int32, nullable
    Remark : string; 
    ReturnReasonID? : number; // Int32, nullable
    ReturnStockLabel? : number; // Int32, nullable
  }
  
  export class ReturnOrder {
    ID : number; // Int32
    IsReturnWithoutProducts : boolean; 
    CreationTime : string; // DateTime
    TotalAmountInTax : number; // Decimal
    // Obsolete
    ForeignTotalAmountInTax : number; // Decimal
    CurrencyID : string; 
    IsPaid : boolean; 
    IsCompleted : boolean; 
    IsShipped : boolean; 
    PaidAmount : number; // Decimal
    ForeignPaidAmount : number; // Decimal
  }
  
  export class ReturnOrderLines extends EVA.API.RequestMessageGeneric<EVA.Core.SimpleShoppingCartResponse> {
    OrderID? : number; // Int32, nullable
    Lines : EVA.CRM.Core.ReturnLineDto[]; 
    TargetOrderID? : number; // Int32, nullable
    SessionID : string; 
    ForceCreate : boolean; 
    ReturnToSameStockOrganizationUnit : boolean; 
    LineActionType? : EVA.Core.LineActionTypes; 
  }
  
  export class SetReturnOrderRefundCorrection extends EVA.API.RequestMessageWithEmptyResponse {
    OrderID : number; // Int32
    NewOpenAmount : number; // Decimal
    Reason : string; 
  }
  
  export class SetUserField extends EVA.API.RequestMessageGeneric<EVA.API.EmptyResponseMessage> {
    UserFieldID : number; // Int32
    UserID : number; // Int32
    Value : any; 
  }
  
  export class StartCustomerInteractionTask extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.StartCustomerInteractionTaskResponse> {
    UserTaskID : number; // Int32
  }
  
  export class StartCustomerInteractionTaskResponse extends EVA.API.ResponseMessage {
    WorkSet : EVA.CRM.Core.CustomerInteractionWorkSet; 
  }
  
  export class StartOrderInterventionTask extends EVA.API.RequestMessageGeneric<EVA.CRM.Core.StartOrderInterventionTaskResponse> {
    UserTaskID : number; // Int32
  }
  
  export class StartOrderInterventionTaskResponse extends EVA.API.ResponseMessage {
    WorkSet : EVA.CRM.Core.OrderInterventionWorkSet; 
  }
  
  export class UpdateCustomerInteractionTaskType extends EVA.API.RequestMessageWithEmptyResponse {
    ID : number; // Int32
    Description : string; 
    FollowUpTypeID? : number; // Int32, nullable
  }
  
  export class UpdateUserField extends EVA.API.RequestMessageGeneric<EVA.API.EmptyResponseMessage> {
    ID : number; // Int32
    Name : string; 
    BackendID : string; 
    DefaultValue : string; 
    Requirements : EVA.CRM.Core.UserFieldRequirements; 
  }
  
  export class UpdateUserFieldOption extends EVA.API.RequestMessageGeneric<EVA.API.EmptyResponseMessage> {
    ID : number; // Int32
    UserFieldID : number; // Int32
    Name : string; 
    BackendID : string; 
    Value : string; 
  }
  
  export class UpdateUserInteraction extends EVA.API.RequestMessageWithEmptyResponse {
    ID : number; // Int32
    UserID : number; // Int32
    Text : string; 
    OrderID? : number; // Int32, nullable
    UserTaskID? : number; // Int32, nullable
  }
  
  export class GetUserInteractionByIDResponseUserDto {
    FirstName : string; 
    LastName : string; 
    EmailAddress : string; 
  }
  
  export class ListUserInteractionsResponseUserInteractionDtoUserDto {
    FirstName : string; 
    LastName : string; 
    EmailAddress : string; 
  }
  
  export class UserFieldDto {
    ID : number; // Int32
    Name : string; 
    Value : any; 
    Options : EVA.CRM.Core.UserFieldOptionDto[]; 
    Requirements : EVA.CRM.Core.UserFieldRequirements; 
  }
  
  export class UserFieldOptionDto {
    ID : number; // Int32
    Name : string; 
  }
  
  export class UserFieldRequirements {
    AllowBlank : boolean; 
    IsNumeric : boolean; 
    Minimum? : number; // Int32, nullable
    Maximum? : number; // Int32, nullable
  }
  
  export class ListUserInteractionsResponseUserInteractionDto {
    ID : number; // Int32
    UserID : number; // Int32
    User : EVA.CRM.Core.ListUserInteractionsResponseUserInteractionDtoUserDto; 
    CreatedByID : number; // Int32
    CreatedBy : EVA.CRM.Core.ListUserInteractionsResponseUserInteractionDtoUserDto; 
    Text : string; 
    OrderID? : number; // Int32, nullable
    UserTaskID? : number; // Int32, nullable
    CreationTime : string; // DateTime
  }
  
}