/* Options:
Date: 2025-05-19 01:23:32
Version: 8.40
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://active-ewebservice.biz/aeservices30/api

//Package: 
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: InventoryDetailRequest.*
//ExcludeTypes: 
//InitializeCollections: True
//TreatTypesAsStrings: 
//DefaultImports: java.math.*,java.util.*,net.servicestack.client.*
*/

import java.math.*
import java.util.*
import net.servicestack.client.*


/**
* InventoryDetailRequires active-e Inventory Service
*/
@Route(Path="/InventoryDetail", Verbs="POST, GET")
@DataContract
open class InventoryDetailRequest : BaseSecureRequest(), IReturn<InventoryDetailResponse>
{
    @DataMember
    var Pk:Long? = null

    @DataMember
    var PkType:String? = null

    @DataMember
    var Model:String? = null

    @DataMember
    var SkipImages:Boolean? = null

    @DataMember
    var IncludeSerialInfo:Boolean? = null

    @DataMember
    var CustomerAcct:Int? = null
    companion object { private val responseType = InventoryDetailResponse::class.java }
    override fun getResponseType(): Any? = InventoryDetailRequest.responseType
}

@DataContract
open class InventoryDetailResponse : BaseResponse()
{
    @DataMember
    var SadPk:Long? = null

    @DataMember
    var InvType:String? = null

    @DataMember
    var Model:String? = null

    @DataMember
    var Description:String? = null

    @DataMember
    var Mfg:String? = null

    @DataMember
    var Category:Int? = null

    @DataMember
    var CategoryDescription:String? = null

    @DataMember
    var SubCategory:Int? = null

    @DataMember
    var SubCategoryDescription:String? = null

    @DataMember
    var SelectionCode:String? = null

    @DataMember
    var SelectionCodeDescription:String? = null

    @DataMember
    var SellSerialsOnline:Boolean? = null

    @DataMember
    var Notes:String? = null

    @DataMember
    var Images:ArrayList<ImageInfo> = ArrayList<ImageInfo>()

    @DataMember
    var HasImages:Boolean? = null

    @DataMember
    var VariantDetails:ArrayList<InventoryDetailByVariant> = ArrayList<InventoryDetailByVariant>()

    @DataMember
    var AddOns:ArrayList<AddOnDetail> = ArrayList<AddOnDetail>()

    @DataMember
    var ActiveEInfo:ActiveEInfo? = null

    @DataMember
    var Weight:BigDecimal? = null

    @DataMember
    var Unit:String? = null

    @DataMember
    var ShipCharge:BigDecimal? = null
}

@DataContract
open class BaseRequest
{
    /**
    * This is your AIM API Key provided by Tri-Tech
    */
    @DataMember
    @ApiMember(DataType="string", Description="This is your AIM API Key provided by Tri-Tech", IsRequired=true, Name="ApiKey", ParameterType="header")
    var ApiKey:String? = null

    @DataMember
    @ApiMember(DataType="string", Name="OAuthToken", ParameterType="header")
    var OAuthToken:String? = null
}

@DataContract
open class BaseSecureRequest : BaseRequest()
{
    /**
    * 
    */
    @DataMember
    @ApiMember(DataType="string", Description="", Name="Token", ParameterType="Header")
    var Token:String? = null

    /**
    * 
    */
    @DataMember
    @ApiMember(DataType="string", Description="", Name="DeviceId", ParameterType="Header")
    var DeviceId:String? = null

    /**
    * 
    */
    @DataMember
    @ApiMember(DataType="string", Description="", IsRequired=true, Name="AppId", ParameterType="Header")
    var AppId:String? = null
}

@DataContract
open class LocationInfo
{
    @DataMember
    var Id:Long? = null

    @DataMember
    var Desc:String? = null

    @DataMember
    var ShortDesc:String? = null

    @DataMember
    var Region:String? = null

    @DataMember
    var Latitude:BigDecimal? = null

    @DataMember
    var Longitude:BigDecimal? = null

    @DataMember
    var InStorePickup:String? = null

    @DataMember
    var Active:Boolean? = null

    @DataMember
    var CashSaleAcct:Int? = null
}

@DataContract
open class ImageInfo
{
    @DataMember
    var Url:String? = null

    @DataMember
    var ImageStream:String? = null

    @DataMember
    var ImageSize:String? = null

    @DataMember
    var ErrorMessage:String? = null

    @DataMember
    var UriPk:Long? = null
}

@DataContract
open class InventoryDetailByVariant
{
    @DataMember
    var SkuPk:Long? = null

    @DataMember
    var Sku:String? = null

    @DataMember
    var VendorCost:BigDecimal? = null

    @DataMember
    var VendorName:String? = null

    @DataMember
    var Attributes:ArrayList<InventoryDetailAttribute> = ArrayList<InventoryDetailAttribute>()

    @DataMember
    var LocationDetails:ArrayList<InventoryDetailByLocation> = ArrayList<InventoryDetailByLocation>()

    @DataMember
    var Images:ArrayList<ImageInfo> = ArrayList<ImageInfo>()

    @DataMember
    var HasImages:Boolean? = null

    @DataMember
    var Barcodes:ArrayList<String> = ArrayList<String>()
}

@DataContract
open class AddOnDetail
{
    @DataMember
    var SadPk:Long? = null

    @DataMember
    var SkuPk:Long? = null

    @DataMember
    var CatPk:Long? = null

    @DataMember
    var SubPk:Long? = null

    @DataMember
    var Item:String? = null

    @DataMember
    var Description:String? = null

    @DataMember
    var Price:BigDecimal? = null
}

@DataContract
open class ActiveEInfo
{
    @DataMember
    var Dimension:String? = null

    @DataMember
    var WebDescription:String? = null

    @DataMember
    var Summary:String? = null

    @DataMember
    var SETitle:String? = null

    @DataMember
    var SEDescription:String? = null

    @DataMember
    var SEKeywords:String? = null

    @DataMember
    var SEAltText:String? = null

    @DataMember
    var SEHtmlFreeText:String? = null

    @DataMember
    var Unpublished:Boolean? = null

    @DataMember
    var FreeShipping:Boolean? = null

    @DataMember
    var IsFeatured:Boolean? = null

    @DataMember
    var WebCategoryIds:ArrayList<Long> = ArrayList<Long>()
}

@DataContract
open class InventoryDetailAttribute
{
    @DataMember
    var Name:String? = null

    @DataMember
    var Value:String? = null

    @DataMember
    var Priority:Int? = null

    /**
    * 1 is 'Don't Send to Web', 2 is 'Guided Navigation'
    */
    @DataMember
    @ApiMember(DataType="int", Description="1 is 'Don't Send to Web', 2 is 'Guided Navigation'", Name="WebType", ParameterType="query")
    var WebType:Int? = null
}

@DataContract
open class InventoryDetailByLocation
{
    @DataMember
    var SaqPk:Long? = null

    @DataMember
    var LocationInfo:LocationInfo? = null

    @DataMember
    var Serials:ArrayList<InventoryDetailBySerial> = ArrayList<InventoryDetailBySerial>()

    @DataMember
    var Substitutes:ArrayList<InventoryDetailSubstitute> = ArrayList<InventoryDetailSubstitute>()

    @DataMember
    var Retail:BigDecimal? = null

    @DataMember
    var OurPrice:BigDecimal? = null

    @DataMember
    var SalePrice:BigDecimal? = null

    @DataMember
    var SaleInfo:String? = null

    @DataMember
    var PriceA:BigDecimal? = null

    @DataMember
    var PriceB:BigDecimal? = null

    @DataMember
    var PriceC:BigDecimal? = null

    @DataMember
    var MinPrice:BigDecimal? = null

    @DataMember
    var ActiveEPrice:BigDecimal? = null

    @DataMember
    var CustomerPrice:BigDecimal? = null

    @DataMember
    var AllowPriceChange:Boolean? = null

    @DataMember
    var Qty:BigDecimal? = null

    @DataMember
    var QtyAvail:BigDecimal? = null

    @DataMember
    var ActiveeHoldbackQty:BigDecimal? = null

    @DataMember
    var ReorderMin:Int? = null

    @DataMember
    var ReorderMax:Int? = null

    @DataMember
    var AverageCost:BigDecimal? = null

    @DataMember
    var WeightedCost:BigDecimal? = null

    @DataMember
    var Locator:String? = null

    @DataMember
    var SelectionCode:String? = null

    @DataMember
    var SelectionCodeDescription:String? = null

    @DataMember
    var Spiff:BigDecimal? = null

    @DataMember
    var CurrentSpotCheckQty:BigDecimal? = null

    @DataMember
    var QtyOut:BigDecimal? = null

    @DataMember
    var QtyOnOrder:BigDecimal? = null

    @DataMember
    var AvailableForSTR:BigDecimal? = null
}

@DataContract
open class InventoryDetailBySerial
{
    @DataMember
    var SasPk:Long? = null

    @DataMember
    var Serial:String? = null

    @DataMember
    var Retail:BigDecimal? = null

    @DataMember
    var OurPrice:BigDecimal? = null

    @DataMember
    var SalePrice:BigDecimal? = null

    @DataMember
    var Status:String? = null

    @DataMember
    var SaleInfo:String? = null

    @DataMember
    var PriceA:BigDecimal? = null

    @DataMember
    var PriceB:BigDecimal? = null

    @DataMember
    var PriceC:BigDecimal? = null

    @DataMember
    var MinPrice:BigDecimal? = null

    @DataMember
    var ActiveEPrice:BigDecimal? = null

    @DataMember
    var AllowPriceChange:Boolean? = null

    @DataMember
    var Cost:BigDecimal? = null

    @DataMember
    var WeightedCost:BigDecimal? = null

    @DataMember
    var Notes:String? = null

    @DataMember
    var Attributes:ArrayList<InventoryDetailAttribute> = ArrayList<InventoryDetailAttribute>()

    @DataMember
    var Images:ArrayList<ImageInfo> = ArrayList<ImageInfo>()

    @DataMember
    var HasImages:Boolean? = null

    @DataMember
    var IsActiveeHoldback:Boolean? = null

    @DataMember
    var CustomerAcct:Int? = null

    @DataMember
    var AvailableForSTR:Boolean? = null
}

@DataContract
open class InventoryDetailSubstitute
{
    @DataMember
    var Model:String? = null

    @DataMember
    var Sku:String? = null

    @DataMember
    var Mfg:String? = null

    @DataMember
    var Description:String? = null

    @DataMember
    var Price:BigDecimal? = null

    @DataMember
    var AvailableQty:BigDecimal? = null
}

@DataContract
open class BaseResponse
{
    /**
    * 
    */
    @DataMember
    @ApiMember(DataType="BaseResponseResult", Description="", Name="Status", ParameterType="body")
    var Status:BaseResponseResult? = null
}