/* 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.Cookbook {
  
  export class AccountBookingDetails {
    Amount : number; // Decimal
    BookedOnOrganizationUnitID : number; // Int32
    BookedOnOrganizationUnitName : string; 
    BookedOnAccountID : number; // Int32
    BookedOnAccountNumber : string; 
    BookedOnAccountName : string; 
    AccountingRecipeID : number; // Int32
    Date : string; // DateTime
    Description : string; 
    CurrencyID : string; 
    Offsets : string[]; 
  }
  
  export class AccountBookingPreview {
    Date : string; // DateTime
    BookedOnOrganizationUnitID : number; // Int32
    BookedOnOrganizationUnitName : string; 
    BookedOnAccountID : number; // Int32
    BookedOnAccountNumber : string; 
    BookedOnAccountName : string; 
    Amount : number; // Decimal
    CurrencyID : string; 
  }
  
  export class AccountingRecipeDto {
    ID : number; // Int32
    Recipe : string; 
    Name : string; 
    EventType : EVA.Core.FinancialEventTypes; 
    IsActive : boolean; 
  }
  
  export class AccountingRecipeToPreview {
    ID? : number; // Int32, nullable
    Recipe : string; 
  }
  
  export enum ActionBlockModifier {
    None = 0,
    Else = 1,
    Also = 2,
  }
  
  export class CompletionSuggestion {
    Label : string; 
    Code : string; 
    Type : EVA.Cookbook.CompletionSuggestionType; 
    Documentation : string; 
  }
  
  export enum CompletionSuggestionType {
    Variable = 0,
    Keyword = 1,
    Enum = 2,
    Account = 3,
  }
  
  export class CreateAccountingRecipe extends EVA.API.RequestMessageGeneric<EVA.Cookbook.CreateAccountingRecipeResponse> {
    Recipe : string; 
    IsActive : boolean; 
    Name : string; 
  }
  
  export class ParseRecipeResponse extends EVA.API.ResponseMessage {
    HasErrors : boolean; 
    Errors : EVA.Cookbook.ParseRecipeError[]; 
    CompletionSuggestions : EVA.Cookbook.CompletionSuggestion[]; 
  }
  
  export class CreateAccountingRecipeResponse extends EVA.Cookbook.ParseRecipeResponse {
    ID : number; // Int32
  }
  
  export class DeleteAccountingRecipe extends EVA.API.RequestMessageWithEmptyResponse {
    ID : number; // Int32
  }
  
  export class GetAccountingRecipe extends EVA.API.RequestMessageGeneric<EVA.Cookbook.GetAccountingRecipeResponse> {
    ID : number; // Int32
  }
  
  export class GetAccountingRecipeResponse extends EVA.API.ResponseMessage {
    Recipe : EVA.Cookbook.AccountingRecipeDto; 
  }
  
  export class ListAccountingRecipes extends EVA.API.PagedResultRequest<EVA.Cookbook.ListAccountingRecipesResponse> {
    IsActive? : boolean; 
    Type : EVA.Core.FinancialEventTypes; 
  }
  
  export class ListAccountingRecipesResponse extends EVA.API.PagedResultResponse<EVA.Cookbook.AccountingRecipeDto> {
  }
  
  export enum MultiValueOperatorTypes {
    Or = 0,
    And = 1,
  }
  
  export enum OperatorTypes {
    Equals = 0,
    NotEquals = 1,
    GreaterThan = 2,
    LessThan = 3,
    GreaterThanOrEquals = 4,
    LessThanOrEquals = 5,
    HasValue = 6,
    HasNoValue = 7,
  }
  
  export class ParseAccountingRecipe extends EVA.API.RequestMessageGeneric<EVA.Cookbook.ParseRecipeResponse> {
    Recipe : string; 
    CursorPosition? : number; // Int32, nullable
  }
  
  export class ParseRecipeError {
    Type : EVA.Cookbook.ParsingErrorType; 
    Message : string; 
    SourceLine : string; 
    SourceLineNumber : number; // Int32
    SourceColumn : number; // Int32
  }
  
  export enum ParsingErrorType {
    InvalidSyntax = 0,
    UnknownVariable = 1,
    InvalidComparison = 2,
    InvalidOperator = 3,
    MissingCredit = 4,
    MissingDebit = 5,
    AmountMustBeNumerical = 6,
    InvalidBookOnOrganizationUnit = 7,
    InvalidEventType = 8,
    DuplicateVariable = 9,
    InvalidVariable = 10,
  }
  
  export class PreviewAccountingRecipe extends EVA.API.RequestMessageGeneric<EVA.Cookbook.PreviewAccountingRecipeResponse> {
    Recipes : EVA.Cookbook.AccountingRecipeToPreview[]; 
    FinancialEventIDs : number[]; 
    OrderID? : number; // Int32, nullable
    Type : EVA.Core.FinancialEventTypes; 
  }
  
  export class PreviewAccountingRecipeResponse extends EVA.Cookbook.ParseRecipeResponse {
    BookingPreviewSummaries : EVA.Cookbook.AccountBookingPreview[]; 
    Warnings : string[]; 
    BookingPreviewDetails : EVA.Cookbook.AccountBookingDetails[]; 
  }
  
  export class UpdateAccountingRecipe extends EVA.API.RequestMessageGeneric<EVA.Cookbook.UpdateAccountingRecipeResponse> {
    ID : number; // Int32
    Recipe : string; 
    IsActive : boolean; 
    Name : string; 
  }
  
  export class UpdateAccountingRecipeResponse extends EVA.Cookbook.ParseRecipeResponse {
  }
  
}