AIM Web Services

<back to all web services

SearchInventoryRequest

SearchInventory
Requires active-e Inventory Service

The following routes are available for this service:
POST, GET/api/SearchInventory
<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


// @DataContract
class BaseRequest implements JsonSerializable
{
    public function __construct(
        /** @description 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 string */
        public string $ApiKey='',

        // @DataMember
        // @ApiMember(DataType="string", Name="OAuthToken", ParameterType="header")
        /** @var string|null */
        public ?string $OAuthToken=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['ApiKey'])) $this->ApiKey = $o['ApiKey'];
        if (isset($o['OAuthToken'])) $this->OAuthToken = $o['OAuthToken'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->ApiKey)) $o['ApiKey'] = $this->ApiKey;
        if (isset($this->OAuthToken)) $o['OAuthToken'] = $this->OAuthToken;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class BaseSecureRequest extends BaseRequest implements JsonSerializable
{
    /**
     * @param string $ApiKey
     * @param string|null $OAuthToken
     */
    public function __construct(
        string $ApiKey='',
        ?string $OAuthToken=null,
        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", Name="Token", ParameterType="Header")
        /** @var string|null */
        public ?string $Token=null,

        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", Name="DeviceId", ParameterType="Header")
        /** @var string|null */
        public ?string $DeviceId=null,

        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", IsRequired=true, Name="AppId", ParameterType="Header")
        /** @var string */
        public string $AppId=''
    ) {
        parent::__construct($ApiKey,$OAuthToken);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['Token'])) $this->Token = $o['Token'];
        if (isset($o['DeviceId'])) $this->DeviceId = $o['DeviceId'];
        if (isset($o['AppId'])) $this->AppId = $o['AppId'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->Token)) $o['Token'] = $this->Token;
        if (isset($this->DeviceId)) $o['DeviceId'] = $this->DeviceId;
        if (isset($this->AppId)) $o['AppId'] = $this->AppId;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class BaseResponseResult implements JsonSerializable
{
    public function __construct(
        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", Name="StatusCode", ParameterType="body")
        /** @var string|null */
        public ?string $StatusCode=null,

        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", Name="Login", ParameterType="body")
        /** @var string|null */
        public ?string $Login=null,

        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", Name="ErrorCode", ParameterType="body")
        /** @var string|null */
        public ?string $ErrorCode=null,

        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", Name="ErrorDisplayText", ParameterType="body")
        /** @var string|null */
        public ?string $ErrorDisplayText=null,

        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", Name="ErrorMessage", ParameterType="body")
        /** @var string|null */
        public ?string $ErrorMessage=null,

        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", ExcludeInSchema=true, Name="DomainName", ParameterType="body")
        /** @var string|null */
        public ?string $DomainName=null,

        /** @description  */
        // @DataMember
        // @ApiMember(DataType="string", Description="", ExcludeInSchema=true, Name="IPAddress", ParameterType="body")
        /** @var string|null */
        public ?string $IpAddress=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['StatusCode'])) $this->StatusCode = $o['StatusCode'];
        if (isset($o['Login'])) $this->Login = $o['Login'];
        if (isset($o['ErrorCode'])) $this->ErrorCode = $o['ErrorCode'];
        if (isset($o['ErrorDisplayText'])) $this->ErrorDisplayText = $o['ErrorDisplayText'];
        if (isset($o['ErrorMessage'])) $this->ErrorMessage = $o['ErrorMessage'];
        if (isset($o['DomainName'])) $this->DomainName = $o['DomainName'];
        if (isset($o['IpAddress'])) $this->IpAddress = $o['IpAddress'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->StatusCode)) $o['StatusCode'] = $this->StatusCode;
        if (isset($this->Login)) $o['Login'] = $this->Login;
        if (isset($this->ErrorCode)) $o['ErrorCode'] = $this->ErrorCode;
        if (isset($this->ErrorDisplayText)) $o['ErrorDisplayText'] = $this->ErrorDisplayText;
        if (isset($this->ErrorMessage)) $o['ErrorMessage'] = $this->ErrorMessage;
        if (isset($this->DomainName)) $o['DomainName'] = $this->DomainName;
        if (isset($this->IpAddress)) $o['IpAddress'] = $this->IpAddress;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class BaseResponse implements JsonSerializable
{
    public function __construct(
        /** @description  */
        // @DataMember
        // @ApiMember(DataType="BaseResponseResult", Description="", Name="Status", ParameterType="body")
        /** @var BaseResponseResult|null */
        public ?BaseResponseResult $Status=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Status'])) $this->Status = JsonConverters::from('BaseResponseResult', $o['Status']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Status)) $o['Status'] = JsonConverters::to('BaseResponseResult', $this->Status);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class BindableObject implements JsonSerializable
{
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class SearchInventoryResultSet extends BindableObject implements IAIMInventoryRecord, JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var int */
        public int $Pk=0,

        // @DataMember
        /** @var string|null */
        public ?string $Description=null,

        // @DataMember
        /** @var string|null */
        public ?string $InventoryType=null,

        // @DataMember
        /** @var string|null */
        public ?string $Manufacturer=null,

        // @DataMember
        /** @var string|null */
        public ?string $Model=null,

        // @DataMember
        /** @var float|null */
        public ?float $Category=null,

        // @DataMember
        /** @var string|null */
        public ?string $CategoryDescription=null,

        // @DataMember
        /** @var float|null */
        public ?float $SubCategory=null,

        // @DataMember
        /** @var string|null */
        public ?string $SubCategoryDescription=null,

        // @DataMember
        /** @var string|null */
        public ?string $SelectionCode=null,

        // @DataMember
        /** @var string|null */
        public ?string $SelectionCodeDescription=null,

        // @DataMember
        /** @var string|null */
        public ?string $Sku=null,

        // @DataMember
        /** @var string|null */
        public ?string $Mpn=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $Discontinued=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute1=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute2=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute3=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute4=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute5=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute6=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute7=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute8=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute9=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute10=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute11=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute12=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute13=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute14=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute15=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute16=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute17=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute18=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute19=null,

        // @DataMember
        /** @var string|null */
        public ?string $Attribute20=null,

        // @DataMember
        /** @var float */
        public float $ComputerQuantity=0.0,

        // @DataMember
        /** @var float */
        public float $OurPrice=0.0,

        // @DataMember
        /** @var float */
        public float $RetailPrice=0.0,

        // @DataMember
        /** @var float */
        public float $ActiveePrice=0.0,

        // @DataMember
        /** @var float */
        public float $PriceA=0.0,

        // @DataMember
        /** @var float */
        public float $PriceB=0.0,

        // @DataMember
        /** @var float */
        public float $PriceC=0.0,

        // @DataMember
        /** @var float */
        public float $MinPrice=0.0,

        // @DataMember
        /** @var float */
        public float $AvailableQuantity=0.0,

        // @DataMember
        /** @var bool|null */
        public ?bool $IsMedia=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $IsPackage=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $HasImage=null,

        // @DataMember
        /** @var string|null */
        public ?string $SearchTerm=null,

        // @DataMember
        /** @var string|null */
        public ?string $Keywords=null,

        // @DataMember
        /** @var string|null */
        public ?string $KeywordsOrigin=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $Deleted=null,

        // @DataMember
        /** @var DateTime */
        public DateTime $TimeStamp=new DateTime()
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['Pk'])) $this->Pk = $o['Pk'];
        if (isset($o['Description'])) $this->Description = $o['Description'];
        if (isset($o['InventoryType'])) $this->InventoryType = $o['InventoryType'];
        if (isset($o['Manufacturer'])) $this->Manufacturer = $o['Manufacturer'];
        if (isset($o['Model'])) $this->Model = $o['Model'];
        if (isset($o['Category'])) $this->Category = $o['Category'];
        if (isset($o['CategoryDescription'])) $this->CategoryDescription = $o['CategoryDescription'];
        if (isset($o['SubCategory'])) $this->SubCategory = $o['SubCategory'];
        if (isset($o['SubCategoryDescription'])) $this->SubCategoryDescription = $o['SubCategoryDescription'];
        if (isset($o['SelectionCode'])) $this->SelectionCode = $o['SelectionCode'];
        if (isset($o['SelectionCodeDescription'])) $this->SelectionCodeDescription = $o['SelectionCodeDescription'];
        if (isset($o['Sku'])) $this->Sku = $o['Sku'];
        if (isset($o['Mpn'])) $this->Mpn = $o['Mpn'];
        if (isset($o['Discontinued'])) $this->Discontinued = $o['Discontinued'];
        if (isset($o['Attribute1'])) $this->Attribute1 = $o['Attribute1'];
        if (isset($o['Attribute2'])) $this->Attribute2 = $o['Attribute2'];
        if (isset($o['Attribute3'])) $this->Attribute3 = $o['Attribute3'];
        if (isset($o['Attribute4'])) $this->Attribute4 = $o['Attribute4'];
        if (isset($o['Attribute5'])) $this->Attribute5 = $o['Attribute5'];
        if (isset($o['Attribute6'])) $this->Attribute6 = $o['Attribute6'];
        if (isset($o['Attribute7'])) $this->Attribute7 = $o['Attribute7'];
        if (isset($o['Attribute8'])) $this->Attribute8 = $o['Attribute8'];
        if (isset($o['Attribute9'])) $this->Attribute9 = $o['Attribute9'];
        if (isset($o['Attribute10'])) $this->Attribute10 = $o['Attribute10'];
        if (isset($o['Attribute11'])) $this->Attribute11 = $o['Attribute11'];
        if (isset($o['Attribute12'])) $this->Attribute12 = $o['Attribute12'];
        if (isset($o['Attribute13'])) $this->Attribute13 = $o['Attribute13'];
        if (isset($o['Attribute14'])) $this->Attribute14 = $o['Attribute14'];
        if (isset($o['Attribute15'])) $this->Attribute15 = $o['Attribute15'];
        if (isset($o['Attribute16'])) $this->Attribute16 = $o['Attribute16'];
        if (isset($o['Attribute17'])) $this->Attribute17 = $o['Attribute17'];
        if (isset($o['Attribute18'])) $this->Attribute18 = $o['Attribute18'];
        if (isset($o['Attribute19'])) $this->Attribute19 = $o['Attribute19'];
        if (isset($o['Attribute20'])) $this->Attribute20 = $o['Attribute20'];
        if (isset($o['ComputerQuantity'])) $this->ComputerQuantity = $o['ComputerQuantity'];
        if (isset($o['OurPrice'])) $this->OurPrice = $o['OurPrice'];
        if (isset($o['RetailPrice'])) $this->RetailPrice = $o['RetailPrice'];
        if (isset($o['ActiveePrice'])) $this->ActiveePrice = $o['ActiveePrice'];
        if (isset($o['PriceA'])) $this->PriceA = $o['PriceA'];
        if (isset($o['PriceB'])) $this->PriceB = $o['PriceB'];
        if (isset($o['PriceC'])) $this->PriceC = $o['PriceC'];
        if (isset($o['MinPrice'])) $this->MinPrice = $o['MinPrice'];
        if (isset($o['AvailableQuantity'])) $this->AvailableQuantity = $o['AvailableQuantity'];
        if (isset($o['IsMedia'])) $this->IsMedia = $o['IsMedia'];
        if (isset($o['IsPackage'])) $this->IsPackage = $o['IsPackage'];
        if (isset($o['HasImage'])) $this->HasImage = $o['HasImage'];
        if (isset($o['SearchTerm'])) $this->SearchTerm = $o['SearchTerm'];
        if (isset($o['Keywords'])) $this->Keywords = $o['Keywords'];
        if (isset($o['KeywordsOrigin'])) $this->KeywordsOrigin = $o['KeywordsOrigin'];
        if (isset($o['Deleted'])) $this->Deleted = $o['Deleted'];
        if (isset($o['TimeStamp'])) $this->TimeStamp = JsonConverters::from('DateTime', $o['TimeStamp']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->Pk)) $o['Pk'] = $this->Pk;
        if (isset($this->Description)) $o['Description'] = $this->Description;
        if (isset($this->InventoryType)) $o['InventoryType'] = $this->InventoryType;
        if (isset($this->Manufacturer)) $o['Manufacturer'] = $this->Manufacturer;
        if (isset($this->Model)) $o['Model'] = $this->Model;
        if (isset($this->Category)) $o['Category'] = $this->Category;
        if (isset($this->CategoryDescription)) $o['CategoryDescription'] = $this->CategoryDescription;
        if (isset($this->SubCategory)) $o['SubCategory'] = $this->SubCategory;
        if (isset($this->SubCategoryDescription)) $o['SubCategoryDescription'] = $this->SubCategoryDescription;
        if (isset($this->SelectionCode)) $o['SelectionCode'] = $this->SelectionCode;
        if (isset($this->SelectionCodeDescription)) $o['SelectionCodeDescription'] = $this->SelectionCodeDescription;
        if (isset($this->Sku)) $o['Sku'] = $this->Sku;
        if (isset($this->Mpn)) $o['Mpn'] = $this->Mpn;
        if (isset($this->Discontinued)) $o['Discontinued'] = $this->Discontinued;
        if (isset($this->Attribute1)) $o['Attribute1'] = $this->Attribute1;
        if (isset($this->Attribute2)) $o['Attribute2'] = $this->Attribute2;
        if (isset($this->Attribute3)) $o['Attribute3'] = $this->Attribute3;
        if (isset($this->Attribute4)) $o['Attribute4'] = $this->Attribute4;
        if (isset($this->Attribute5)) $o['Attribute5'] = $this->Attribute5;
        if (isset($this->Attribute6)) $o['Attribute6'] = $this->Attribute6;
        if (isset($this->Attribute7)) $o['Attribute7'] = $this->Attribute7;
        if (isset($this->Attribute8)) $o['Attribute8'] = $this->Attribute8;
        if (isset($this->Attribute9)) $o['Attribute9'] = $this->Attribute9;
        if (isset($this->Attribute10)) $o['Attribute10'] = $this->Attribute10;
        if (isset($this->Attribute11)) $o['Attribute11'] = $this->Attribute11;
        if (isset($this->Attribute12)) $o['Attribute12'] = $this->Attribute12;
        if (isset($this->Attribute13)) $o['Attribute13'] = $this->Attribute13;
        if (isset($this->Attribute14)) $o['Attribute14'] = $this->Attribute14;
        if (isset($this->Attribute15)) $o['Attribute15'] = $this->Attribute15;
        if (isset($this->Attribute16)) $o['Attribute16'] = $this->Attribute16;
        if (isset($this->Attribute17)) $o['Attribute17'] = $this->Attribute17;
        if (isset($this->Attribute18)) $o['Attribute18'] = $this->Attribute18;
        if (isset($this->Attribute19)) $o['Attribute19'] = $this->Attribute19;
        if (isset($this->Attribute20)) $o['Attribute20'] = $this->Attribute20;
        if (isset($this->ComputerQuantity)) $o['ComputerQuantity'] = $this->ComputerQuantity;
        if (isset($this->OurPrice)) $o['OurPrice'] = $this->OurPrice;
        if (isset($this->RetailPrice)) $o['RetailPrice'] = $this->RetailPrice;
        if (isset($this->ActiveePrice)) $o['ActiveePrice'] = $this->ActiveePrice;
        if (isset($this->PriceA)) $o['PriceA'] = $this->PriceA;
        if (isset($this->PriceB)) $o['PriceB'] = $this->PriceB;
        if (isset($this->PriceC)) $o['PriceC'] = $this->PriceC;
        if (isset($this->MinPrice)) $o['MinPrice'] = $this->MinPrice;
        if (isset($this->AvailableQuantity)) $o['AvailableQuantity'] = $this->AvailableQuantity;
        if (isset($this->IsMedia)) $o['IsMedia'] = $this->IsMedia;
        if (isset($this->IsPackage)) $o['IsPackage'] = $this->IsPackage;
        if (isset($this->HasImage)) $o['HasImage'] = $this->HasImage;
        if (isset($this->SearchTerm)) $o['SearchTerm'] = $this->SearchTerm;
        if (isset($this->Keywords)) $o['Keywords'] = $this->Keywords;
        if (isset($this->KeywordsOrigin)) $o['KeywordsOrigin'] = $this->KeywordsOrigin;
        if (isset($this->Deleted)) $o['Deleted'] = $this->Deleted;
        if (isset($this->TimeStamp)) $o['TimeStamp'] = JsonConverters::to('DateTime', $this->TimeStamp);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class ImageInfo implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var string|null */
        public ?string $Url=null,

        // @DataMember
        /** @var string|null */
        public ?string $ImageStream=null,

        // @DataMember
        /** @var string|null */
        public ?string $ImageSize=null,

        // @DataMember
        /** @var string|null */
        public ?string $ErrorMessage=null,

        // @DataMember
        /** @var int|null */
        public ?int $UriPk=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Url'])) $this->Url = $o['Url'];
        if (isset($o['ImageStream'])) $this->ImageStream = $o['ImageStream'];
        if (isset($o['ImageSize'])) $this->ImageSize = $o['ImageSize'];
        if (isset($o['ErrorMessage'])) $this->ErrorMessage = $o['ErrorMessage'];
        if (isset($o['UriPk'])) $this->UriPk = $o['UriPk'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Url)) $o['Url'] = $this->Url;
        if (isset($this->ImageStream)) $o['ImageStream'] = $this->ImageStream;
        if (isset($this->ImageSize)) $o['ImageSize'] = $this->ImageSize;
        if (isset($this->ErrorMessage)) $o['ErrorMessage'] = $this->ErrorMessage;
        if (isset($this->UriPk)) $o['UriPk'] = $this->UriPk;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class InventoryDetailAttribute implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var string|null */
        public ?string $Name=null,

        // @DataMember
        /** @var string|null */
        public ?string $Value=null,

        // @DataMember
        /** @var int */
        public int $Priority=0,

        /** @description 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 int */
        public int $WebType=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Name'])) $this->Name = $o['Name'];
        if (isset($o['Value'])) $this->Value = $o['Value'];
        if (isset($o['Priority'])) $this->Priority = $o['Priority'];
        if (isset($o['WebType'])) $this->WebType = $o['WebType'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Name)) $o['Name'] = $this->Name;
        if (isset($this->Value)) $o['Value'] = $this->Value;
        if (isset($this->Priority)) $o['Priority'] = $this->Priority;
        if (isset($this->WebType)) $o['WebType'] = $this->WebType;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class LocationInfo implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var int */
        public int $Id=0,

        // @DataMember
        /** @var string|null */
        public ?string $Desc=null,

        // @DataMember
        /** @var string|null */
        public ?string $ShortDesc=null,

        // @DataMember
        /** @var string|null */
        public ?string $Region=null,

        // @DataMember
        /** @var float */
        public float $Latitude=0.0,

        // @DataMember
        /** @var float */
        public float $Longitude=0.0,

        // @DataMember
        /** @var string|null */
        public ?string $InStorePickup=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $Active=null,

        // @DataMember
        /** @var int|null */
        public ?int $CashSaleAcct=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Id'])) $this->Id = $o['Id'];
        if (isset($o['Desc'])) $this->Desc = $o['Desc'];
        if (isset($o['ShortDesc'])) $this->ShortDesc = $o['ShortDesc'];
        if (isset($o['Region'])) $this->Region = $o['Region'];
        if (isset($o['Latitude'])) $this->Latitude = $o['Latitude'];
        if (isset($o['Longitude'])) $this->Longitude = $o['Longitude'];
        if (isset($o['InStorePickup'])) $this->InStorePickup = $o['InStorePickup'];
        if (isset($o['Active'])) $this->Active = $o['Active'];
        if (isset($o['CashSaleAcct'])) $this->CashSaleAcct = $o['CashSaleAcct'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Id)) $o['Id'] = $this->Id;
        if (isset($this->Desc)) $o['Desc'] = $this->Desc;
        if (isset($this->ShortDesc)) $o['ShortDesc'] = $this->ShortDesc;
        if (isset($this->Region)) $o['Region'] = $this->Region;
        if (isset($this->Latitude)) $o['Latitude'] = $this->Latitude;
        if (isset($this->Longitude)) $o['Longitude'] = $this->Longitude;
        if (isset($this->InStorePickup)) $o['InStorePickup'] = $this->InStorePickup;
        if (isset($this->Active)) $o['Active'] = $this->Active;
        if (isset($this->CashSaleAcct)) $o['CashSaleAcct'] = $this->CashSaleAcct;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class InventoryDetailBySerial implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var int */
        public int $SasPk=0,

        // @DataMember
        /** @var string|null */
        public ?string $Serial=null,

        // @DataMember
        /** @var float */
        public float $Retail=0.0,

        // @DataMember
        /** @var float */
        public float $OurPrice=0.0,

        // @DataMember
        /** @var float|null */
        public ?float $SalePrice=null,

        // @DataMember
        /** @var string|null */
        public ?string $Status=null,

        // @DataMember
        /** @var string|null */
        public ?string $SaleInfo=null,

        // @DataMember
        /** @var float */
        public float $PriceA=0.0,

        // @DataMember
        /** @var float */
        public float $PriceB=0.0,

        // @DataMember
        /** @var float */
        public float $PriceC=0.0,

        // @DataMember
        /** @var float */
        public float $MinPrice=0.0,

        // @DataMember
        /** @var float */
        public float $ActiveEPrice=0.0,

        // @DataMember
        /** @var bool|null */
        public ?bool $AllowPriceChange=null,

        // @DataMember
        /** @var float|null */
        public ?float $Cost=null,

        // @DataMember
        /** @var float|null */
        public ?float $WeightedCost=null,

        // @DataMember
        /** @var string|null */
        public ?string $Notes=null,

        // @DataMember
        /** @var array<InventoryDetailAttribute>|null */
        public ?array $Attributes=null,

        // @DataMember
        /** @var array<ImageInfo>|null */
        public ?array $Images=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $HasImages=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $IsActiveeHoldback=null,

        // @DataMember
        /** @var int|null */
        public ?int $CustomerAcct=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $AvailableForSTR=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['SasPk'])) $this->SasPk = $o['SasPk'];
        if (isset($o['Serial'])) $this->Serial = $o['Serial'];
        if (isset($o['Retail'])) $this->Retail = $o['Retail'];
        if (isset($o['OurPrice'])) $this->OurPrice = $o['OurPrice'];
        if (isset($o['SalePrice'])) $this->SalePrice = $o['SalePrice'];
        if (isset($o['Status'])) $this->Status = $o['Status'];
        if (isset($o['SaleInfo'])) $this->SaleInfo = $o['SaleInfo'];
        if (isset($o['PriceA'])) $this->PriceA = $o['PriceA'];
        if (isset($o['PriceB'])) $this->PriceB = $o['PriceB'];
        if (isset($o['PriceC'])) $this->PriceC = $o['PriceC'];
        if (isset($o['MinPrice'])) $this->MinPrice = $o['MinPrice'];
        if (isset($o['ActiveEPrice'])) $this->ActiveEPrice = $o['ActiveEPrice'];
        if (isset($o['AllowPriceChange'])) $this->AllowPriceChange = $o['AllowPriceChange'];
        if (isset($o['Cost'])) $this->Cost = $o['Cost'];
        if (isset($o['WeightedCost'])) $this->WeightedCost = $o['WeightedCost'];
        if (isset($o['Notes'])) $this->Notes = $o['Notes'];
        if (isset($o['Attributes'])) $this->Attributes = JsonConverters::fromArray('InventoryDetailAttribute', $o['Attributes']);
        if (isset($o['Images'])) $this->Images = JsonConverters::fromArray('ImageInfo', $o['Images']);
        if (isset($o['HasImages'])) $this->HasImages = $o['HasImages'];
        if (isset($o['IsActiveeHoldback'])) $this->IsActiveeHoldback = $o['IsActiveeHoldback'];
        if (isset($o['CustomerAcct'])) $this->CustomerAcct = $o['CustomerAcct'];
        if (isset($o['AvailableForSTR'])) $this->AvailableForSTR = $o['AvailableForSTR'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->SasPk)) $o['SasPk'] = $this->SasPk;
        if (isset($this->Serial)) $o['Serial'] = $this->Serial;
        if (isset($this->Retail)) $o['Retail'] = $this->Retail;
        if (isset($this->OurPrice)) $o['OurPrice'] = $this->OurPrice;
        if (isset($this->SalePrice)) $o['SalePrice'] = $this->SalePrice;
        if (isset($this->Status)) $o['Status'] = $this->Status;
        if (isset($this->SaleInfo)) $o['SaleInfo'] = $this->SaleInfo;
        if (isset($this->PriceA)) $o['PriceA'] = $this->PriceA;
        if (isset($this->PriceB)) $o['PriceB'] = $this->PriceB;
        if (isset($this->PriceC)) $o['PriceC'] = $this->PriceC;
        if (isset($this->MinPrice)) $o['MinPrice'] = $this->MinPrice;
        if (isset($this->ActiveEPrice)) $o['ActiveEPrice'] = $this->ActiveEPrice;
        if (isset($this->AllowPriceChange)) $o['AllowPriceChange'] = $this->AllowPriceChange;
        if (isset($this->Cost)) $o['Cost'] = $this->Cost;
        if (isset($this->WeightedCost)) $o['WeightedCost'] = $this->WeightedCost;
        if (isset($this->Notes)) $o['Notes'] = $this->Notes;
        if (isset($this->Attributes)) $o['Attributes'] = JsonConverters::toArray('InventoryDetailAttribute', $this->Attributes);
        if (isset($this->Images)) $o['Images'] = JsonConverters::toArray('ImageInfo', $this->Images);
        if (isset($this->HasImages)) $o['HasImages'] = $this->HasImages;
        if (isset($this->IsActiveeHoldback)) $o['IsActiveeHoldback'] = $this->IsActiveeHoldback;
        if (isset($this->CustomerAcct)) $o['CustomerAcct'] = $this->CustomerAcct;
        if (isset($this->AvailableForSTR)) $o['AvailableForSTR'] = $this->AvailableForSTR;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class InventoryDetailSubstitute implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var string|null */
        public ?string $Model=null,

        // @DataMember
        /** @var string|null */
        public ?string $Sku=null,

        // @DataMember
        /** @var string|null */
        public ?string $Mfg=null,

        // @DataMember
        /** @var string|null */
        public ?string $Description=null,

        // @DataMember
        /** @var float */
        public float $Price=0.0,

        // @DataMember
        /** @var float */
        public float $AvailableQty=0.0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Model'])) $this->Model = $o['Model'];
        if (isset($o['Sku'])) $this->Sku = $o['Sku'];
        if (isset($o['Mfg'])) $this->Mfg = $o['Mfg'];
        if (isset($o['Description'])) $this->Description = $o['Description'];
        if (isset($o['Price'])) $this->Price = $o['Price'];
        if (isset($o['AvailableQty'])) $this->AvailableQty = $o['AvailableQty'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Model)) $o['Model'] = $this->Model;
        if (isset($this->Sku)) $o['Sku'] = $this->Sku;
        if (isset($this->Mfg)) $o['Mfg'] = $this->Mfg;
        if (isset($this->Description)) $o['Description'] = $this->Description;
        if (isset($this->Price)) $o['Price'] = $this->Price;
        if (isset($this->AvailableQty)) $o['AvailableQty'] = $this->AvailableQty;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class InventoryDetailByLocation implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var int */
        public int $SaqPk=0,

        // @DataMember
        /** @var LocationInfo|null */
        public ?LocationInfo $LocationInfo=null,

        // @DataMember
        /** @var array<InventoryDetailBySerial>|null */
        public ?array $Serials=null,

        // @DataMember
        /** @var array<InventoryDetailSubstitute>|null */
        public ?array $Substitutes=null,

        // @DataMember
        /** @var float */
        public float $Retail=0.0,

        // @DataMember
        /** @var float */
        public float $OurPrice=0.0,

        // @DataMember
        /** @var float|null */
        public ?float $SalePrice=null,

        // @DataMember
        /** @var string|null */
        public ?string $SaleInfo=null,

        // @DataMember
        /** @var float */
        public float $PriceA=0.0,

        // @DataMember
        /** @var float */
        public float $PriceB=0.0,

        // @DataMember
        /** @var float */
        public float $PriceC=0.0,

        // @DataMember
        /** @var float */
        public float $MinPrice=0.0,

        // @DataMember
        /** @var float */
        public float $ActiveEPrice=0.0,

        // @DataMember
        /** @var float */
        public float $CustomerPrice=0.0,

        // @DataMember
        /** @var bool|null */
        public ?bool $AllowPriceChange=null,

        // @DataMember
        /** @var float */
        public float $Qty=0.0,

        // @DataMember
        /** @var float */
        public float $QtyAvail=0.0,

        // @DataMember
        /** @var float */
        public float $ActiveeHoldbackQty=0.0,

        // @DataMember
        /** @var int */
        public int $ReorderMin=0,

        // @DataMember
        /** @var int */
        public int $ReorderMax=0,

        // @DataMember
        /** @var float|null */
        public ?float $AverageCost=null,

        // @DataMember
        /** @var float|null */
        public ?float $WeightedCost=null,

        // @DataMember
        /** @var string|null */
        public ?string $Locator=null,

        // @DataMember
        /** @var string|null */
        public ?string $SelectionCode=null,

        // @DataMember
        /** @var string|null */
        public ?string $SelectionCodeDescription=null,

        // @DataMember
        /** @var float */
        public float $Spiff=0.0,

        // @DataMember
        /** @var float|null */
        public ?float $CurrentSpotCheckQty=null,

        // @DataMember
        /** @var float */
        public float $QtyOut=0.0,

        // @DataMember
        /** @var float */
        public float $QtyOnOrder=0.0,

        // @DataMember
        /** @var float */
        public float $AvailableForSTR=0.0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['SaqPk'])) $this->SaqPk = $o['SaqPk'];
        if (isset($o['LocationInfo'])) $this->LocationInfo = JsonConverters::from('LocationInfo', $o['LocationInfo']);
        if (isset($o['Serials'])) $this->Serials = JsonConverters::fromArray('InventoryDetailBySerial', $o['Serials']);
        if (isset($o['Substitutes'])) $this->Substitutes = JsonConverters::fromArray('InventoryDetailSubstitute', $o['Substitutes']);
        if (isset($o['Retail'])) $this->Retail = $o['Retail'];
        if (isset($o['OurPrice'])) $this->OurPrice = $o['OurPrice'];
        if (isset($o['SalePrice'])) $this->SalePrice = $o['SalePrice'];
        if (isset($o['SaleInfo'])) $this->SaleInfo = $o['SaleInfo'];
        if (isset($o['PriceA'])) $this->PriceA = $o['PriceA'];
        if (isset($o['PriceB'])) $this->PriceB = $o['PriceB'];
        if (isset($o['PriceC'])) $this->PriceC = $o['PriceC'];
        if (isset($o['MinPrice'])) $this->MinPrice = $o['MinPrice'];
        if (isset($o['ActiveEPrice'])) $this->ActiveEPrice = $o['ActiveEPrice'];
        if (isset($o['CustomerPrice'])) $this->CustomerPrice = $o['CustomerPrice'];
        if (isset($o['AllowPriceChange'])) $this->AllowPriceChange = $o['AllowPriceChange'];
        if (isset($o['Qty'])) $this->Qty = $o['Qty'];
        if (isset($o['QtyAvail'])) $this->QtyAvail = $o['QtyAvail'];
        if (isset($o['ActiveeHoldbackQty'])) $this->ActiveeHoldbackQty = $o['ActiveeHoldbackQty'];
        if (isset($o['ReorderMin'])) $this->ReorderMin = $o['ReorderMin'];
        if (isset($o['ReorderMax'])) $this->ReorderMax = $o['ReorderMax'];
        if (isset($o['AverageCost'])) $this->AverageCost = $o['AverageCost'];
        if (isset($o['WeightedCost'])) $this->WeightedCost = $o['WeightedCost'];
        if (isset($o['Locator'])) $this->Locator = $o['Locator'];
        if (isset($o['SelectionCode'])) $this->SelectionCode = $o['SelectionCode'];
        if (isset($o['SelectionCodeDescription'])) $this->SelectionCodeDescription = $o['SelectionCodeDescription'];
        if (isset($o['Spiff'])) $this->Spiff = $o['Spiff'];
        if (isset($o['CurrentSpotCheckQty'])) $this->CurrentSpotCheckQty = $o['CurrentSpotCheckQty'];
        if (isset($o['QtyOut'])) $this->QtyOut = $o['QtyOut'];
        if (isset($o['QtyOnOrder'])) $this->QtyOnOrder = $o['QtyOnOrder'];
        if (isset($o['AvailableForSTR'])) $this->AvailableForSTR = $o['AvailableForSTR'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->SaqPk)) $o['SaqPk'] = $this->SaqPk;
        if (isset($this->LocationInfo)) $o['LocationInfo'] = JsonConverters::to('LocationInfo', $this->LocationInfo);
        if (isset($this->Serials)) $o['Serials'] = JsonConverters::toArray('InventoryDetailBySerial', $this->Serials);
        if (isset($this->Substitutes)) $o['Substitutes'] = JsonConverters::toArray('InventoryDetailSubstitute', $this->Substitutes);
        if (isset($this->Retail)) $o['Retail'] = $this->Retail;
        if (isset($this->OurPrice)) $o['OurPrice'] = $this->OurPrice;
        if (isset($this->SalePrice)) $o['SalePrice'] = $this->SalePrice;
        if (isset($this->SaleInfo)) $o['SaleInfo'] = $this->SaleInfo;
        if (isset($this->PriceA)) $o['PriceA'] = $this->PriceA;
        if (isset($this->PriceB)) $o['PriceB'] = $this->PriceB;
        if (isset($this->PriceC)) $o['PriceC'] = $this->PriceC;
        if (isset($this->MinPrice)) $o['MinPrice'] = $this->MinPrice;
        if (isset($this->ActiveEPrice)) $o['ActiveEPrice'] = $this->ActiveEPrice;
        if (isset($this->CustomerPrice)) $o['CustomerPrice'] = $this->CustomerPrice;
        if (isset($this->AllowPriceChange)) $o['AllowPriceChange'] = $this->AllowPriceChange;
        if (isset($this->Qty)) $o['Qty'] = $this->Qty;
        if (isset($this->QtyAvail)) $o['QtyAvail'] = $this->QtyAvail;
        if (isset($this->ActiveeHoldbackQty)) $o['ActiveeHoldbackQty'] = $this->ActiveeHoldbackQty;
        if (isset($this->ReorderMin)) $o['ReorderMin'] = $this->ReorderMin;
        if (isset($this->ReorderMax)) $o['ReorderMax'] = $this->ReorderMax;
        if (isset($this->AverageCost)) $o['AverageCost'] = $this->AverageCost;
        if (isset($this->WeightedCost)) $o['WeightedCost'] = $this->WeightedCost;
        if (isset($this->Locator)) $o['Locator'] = $this->Locator;
        if (isset($this->SelectionCode)) $o['SelectionCode'] = $this->SelectionCode;
        if (isset($this->SelectionCodeDescription)) $o['SelectionCodeDescription'] = $this->SelectionCodeDescription;
        if (isset($this->Spiff)) $o['Spiff'] = $this->Spiff;
        if (isset($this->CurrentSpotCheckQty)) $o['CurrentSpotCheckQty'] = $this->CurrentSpotCheckQty;
        if (isset($this->QtyOut)) $o['QtyOut'] = $this->QtyOut;
        if (isset($this->QtyOnOrder)) $o['QtyOnOrder'] = $this->QtyOnOrder;
        if (isset($this->AvailableForSTR)) $o['AvailableForSTR'] = $this->AvailableForSTR;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class InventoryDetailByVariant implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var int */
        public int $SkuPk=0,

        // @DataMember
        /** @var string|null */
        public ?string $Sku=null,

        // @DataMember
        /** @var float|null */
        public ?float $VendorCost=null,

        // @DataMember
        /** @var string|null */
        public ?string $VendorName=null,

        // @DataMember
        /** @var array<InventoryDetailAttribute>|null */
        public ?array $Attributes=null,

        // @DataMember
        /** @var array<InventoryDetailByLocation>|null */
        public ?array $LocationDetails=null,

        // @DataMember
        /** @var array<ImageInfo>|null */
        public ?array $Images=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $HasImages=null,

        // @DataMember
        /** @var array<string>|null */
        public ?array $Barcodes=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['SkuPk'])) $this->SkuPk = $o['SkuPk'];
        if (isset($o['Sku'])) $this->Sku = $o['Sku'];
        if (isset($o['VendorCost'])) $this->VendorCost = $o['VendorCost'];
        if (isset($o['VendorName'])) $this->VendorName = $o['VendorName'];
        if (isset($o['Attributes'])) $this->Attributes = JsonConverters::fromArray('InventoryDetailAttribute', $o['Attributes']);
        if (isset($o['LocationDetails'])) $this->LocationDetails = JsonConverters::fromArray('InventoryDetailByLocation', $o['LocationDetails']);
        if (isset($o['Images'])) $this->Images = JsonConverters::fromArray('ImageInfo', $o['Images']);
        if (isset($o['HasImages'])) $this->HasImages = $o['HasImages'];
        if (isset($o['Barcodes'])) $this->Barcodes = JsonConverters::fromArray('string', $o['Barcodes']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->SkuPk)) $o['SkuPk'] = $this->SkuPk;
        if (isset($this->Sku)) $o['Sku'] = $this->Sku;
        if (isset($this->VendorCost)) $o['VendorCost'] = $this->VendorCost;
        if (isset($this->VendorName)) $o['VendorName'] = $this->VendorName;
        if (isset($this->Attributes)) $o['Attributes'] = JsonConverters::toArray('InventoryDetailAttribute', $this->Attributes);
        if (isset($this->LocationDetails)) $o['LocationDetails'] = JsonConverters::toArray('InventoryDetailByLocation', $this->LocationDetails);
        if (isset($this->Images)) $o['Images'] = JsonConverters::toArray('ImageInfo', $this->Images);
        if (isset($this->HasImages)) $o['HasImages'] = $this->HasImages;
        if (isset($this->Barcodes)) $o['Barcodes'] = JsonConverters::toArray('string', $this->Barcodes);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class AddOnDetail implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var int */
        public int $SadPk=0,

        // @DataMember
        /** @var int */
        public int $SkuPk=0,

        // @DataMember
        /** @var int */
        public int $CatPk=0,

        // @DataMember
        /** @var int */
        public int $SubPk=0,

        // @DataMember
        /** @var string|null */
        public ?string $Item=null,

        // @DataMember
        /** @var string|null */
        public ?string $Description=null,

        // @DataMember
        /** @var float */
        public float $Price=0.0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['SadPk'])) $this->SadPk = $o['SadPk'];
        if (isset($o['SkuPk'])) $this->SkuPk = $o['SkuPk'];
        if (isset($o['CatPk'])) $this->CatPk = $o['CatPk'];
        if (isset($o['SubPk'])) $this->SubPk = $o['SubPk'];
        if (isset($o['Item'])) $this->Item = $o['Item'];
        if (isset($o['Description'])) $this->Description = $o['Description'];
        if (isset($o['Price'])) $this->Price = $o['Price'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->SadPk)) $o['SadPk'] = $this->SadPk;
        if (isset($this->SkuPk)) $o['SkuPk'] = $this->SkuPk;
        if (isset($this->CatPk)) $o['CatPk'] = $this->CatPk;
        if (isset($this->SubPk)) $o['SubPk'] = $this->SubPk;
        if (isset($this->Item)) $o['Item'] = $this->Item;
        if (isset($this->Description)) $o['Description'] = $this->Description;
        if (isset($this->Price)) $o['Price'] = $this->Price;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class ActiveEInfo implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var string|null */
        public ?string $Dimension=null,

        // @DataMember
        /** @var string|null */
        public ?string $WebDescription=null,

        // @DataMember
        /** @var string|null */
        public ?string $Summary=null,

        // @DataMember
        /** @var string|null */
        public ?string $SETitle=null,

        // @DataMember
        /** @var string|null */
        public ?string $SEDescription=null,

        // @DataMember
        /** @var string|null */
        public ?string $SEKeywords=null,

        // @DataMember
        /** @var string|null */
        public ?string $SEAltText=null,

        // @DataMember
        /** @var string|null */
        public ?string $SEHtmlFreeText=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $Unpublished=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $FreeShipping=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $IsFeatured=null,

        // @DataMember
        /** @var array<int>|null */
        public ?array $WebCategoryIds=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Dimension'])) $this->Dimension = $o['Dimension'];
        if (isset($o['WebDescription'])) $this->WebDescription = $o['WebDescription'];
        if (isset($o['Summary'])) $this->Summary = $o['Summary'];
        if (isset($o['SETitle'])) $this->SETitle = $o['SETitle'];
        if (isset($o['SEDescription'])) $this->SEDescription = $o['SEDescription'];
        if (isset($o['SEKeywords'])) $this->SEKeywords = $o['SEKeywords'];
        if (isset($o['SEAltText'])) $this->SEAltText = $o['SEAltText'];
        if (isset($o['SEHtmlFreeText'])) $this->SEHtmlFreeText = $o['SEHtmlFreeText'];
        if (isset($o['Unpublished'])) $this->Unpublished = $o['Unpublished'];
        if (isset($o['FreeShipping'])) $this->FreeShipping = $o['FreeShipping'];
        if (isset($o['IsFeatured'])) $this->IsFeatured = $o['IsFeatured'];
        if (isset($o['WebCategoryIds'])) $this->WebCategoryIds = JsonConverters::fromArray('int', $o['WebCategoryIds']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Dimension)) $o['Dimension'] = $this->Dimension;
        if (isset($this->WebDescription)) $o['WebDescription'] = $this->WebDescription;
        if (isset($this->Summary)) $o['Summary'] = $this->Summary;
        if (isset($this->SETitle)) $o['SETitle'] = $this->SETitle;
        if (isset($this->SEDescription)) $o['SEDescription'] = $this->SEDescription;
        if (isset($this->SEKeywords)) $o['SEKeywords'] = $this->SEKeywords;
        if (isset($this->SEAltText)) $o['SEAltText'] = $this->SEAltText;
        if (isset($this->SEHtmlFreeText)) $o['SEHtmlFreeText'] = $this->SEHtmlFreeText;
        if (isset($this->Unpublished)) $o['Unpublished'] = $this->Unpublished;
        if (isset($this->FreeShipping)) $o['FreeShipping'] = $this->FreeShipping;
        if (isset($this->IsFeatured)) $o['IsFeatured'] = $this->IsFeatured;
        if (isset($this->WebCategoryIds)) $o['WebCategoryIds'] = JsonConverters::toArray('int', $this->WebCategoryIds);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class InventoryDetail implements JsonSerializable
{
    public function __construct(
        // @DataMember
        /** @var int */
        public int $SadPk=0,

        // @DataMember
        /** @var string|null */
        public ?string $InvType=null,

        // @DataMember
        /** @var string|null */
        public ?string $Model=null,

        // @DataMember
        /** @var string|null */
        public ?string $Description=null,

        // @DataMember
        /** @var string|null */
        public ?string $Mfg=null,

        // @DataMember
        /** @var int */
        public int $Category=0,

        // @DataMember
        /** @var string|null */
        public ?string $CategoryDescription=null,

        // @DataMember
        /** @var int */
        public int $SubCategory=0,

        // @DataMember
        /** @var string|null */
        public ?string $SubCategoryDescription=null,

        // @DataMember
        /** @var string|null */
        public ?string $SelectionCode=null,

        // @DataMember
        /** @var string|null */
        public ?string $SelectionCodeDescription=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $SellSerialsOnline=null,

        // @DataMember
        /** @var string|null */
        public ?string $Notes=null,

        // @DataMember
        /** @var array<ImageInfo>|null */
        public ?array $Images=null,

        // @DataMember
        /** @var bool|null */
        public ?bool $HasImages=null,

        // @DataMember
        /** @var array<InventoryDetailByVariant>|null */
        public ?array $VariantDetails=null,

        // @DataMember
        /** @var array<AddOnDetail>|null */
        public ?array $AddOns=null,

        // @DataMember
        /** @var ActiveEInfo|null */
        public ?ActiveEInfo $ActiveEInfo=null,

        // @DataMember
        /** @var float */
        public float $Weight=0.0,

        // @DataMember
        /** @var string|null */
        public ?string $Unit=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['SadPk'])) $this->SadPk = $o['SadPk'];
        if (isset($o['InvType'])) $this->InvType = $o['InvType'];
        if (isset($o['Model'])) $this->Model = $o['Model'];
        if (isset($o['Description'])) $this->Description = $o['Description'];
        if (isset($o['Mfg'])) $this->Mfg = $o['Mfg'];
        if (isset($o['Category'])) $this->Category = $o['Category'];
        if (isset($o['CategoryDescription'])) $this->CategoryDescription = $o['CategoryDescription'];
        if (isset($o['SubCategory'])) $this->SubCategory = $o['SubCategory'];
        if (isset($o['SubCategoryDescription'])) $this->SubCategoryDescription = $o['SubCategoryDescription'];
        if (isset($o['SelectionCode'])) $this->SelectionCode = $o['SelectionCode'];
        if (isset($o['SelectionCodeDescription'])) $this->SelectionCodeDescription = $o['SelectionCodeDescription'];
        if (isset($o['SellSerialsOnline'])) $this->SellSerialsOnline = $o['SellSerialsOnline'];
        if (isset($o['Notes'])) $this->Notes = $o['Notes'];
        if (isset($o['Images'])) $this->Images = JsonConverters::fromArray('ImageInfo', $o['Images']);
        if (isset($o['HasImages'])) $this->HasImages = $o['HasImages'];
        if (isset($o['VariantDetails'])) $this->VariantDetails = JsonConverters::fromArray('InventoryDetailByVariant', $o['VariantDetails']);
        if (isset($o['AddOns'])) $this->AddOns = JsonConverters::fromArray('AddOnDetail', $o['AddOns']);
        if (isset($o['ActiveEInfo'])) $this->ActiveEInfo = JsonConverters::from('ActiveEInfo', $o['ActiveEInfo']);
        if (isset($o['Weight'])) $this->Weight = $o['Weight'];
        if (isset($o['Unit'])) $this->Unit = $o['Unit'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->SadPk)) $o['SadPk'] = $this->SadPk;
        if (isset($this->InvType)) $o['InvType'] = $this->InvType;
        if (isset($this->Model)) $o['Model'] = $this->Model;
        if (isset($this->Description)) $o['Description'] = $this->Description;
        if (isset($this->Mfg)) $o['Mfg'] = $this->Mfg;
        if (isset($this->Category)) $o['Category'] = $this->Category;
        if (isset($this->CategoryDescription)) $o['CategoryDescription'] = $this->CategoryDescription;
        if (isset($this->SubCategory)) $o['SubCategory'] = $this->SubCategory;
        if (isset($this->SubCategoryDescription)) $o['SubCategoryDescription'] = $this->SubCategoryDescription;
        if (isset($this->SelectionCode)) $o['SelectionCode'] = $this->SelectionCode;
        if (isset($this->SelectionCodeDescription)) $o['SelectionCodeDescription'] = $this->SelectionCodeDescription;
        if (isset($this->SellSerialsOnline)) $o['SellSerialsOnline'] = $this->SellSerialsOnline;
        if (isset($this->Notes)) $o['Notes'] = $this->Notes;
        if (isset($this->Images)) $o['Images'] = JsonConverters::toArray('ImageInfo', $this->Images);
        if (isset($this->HasImages)) $o['HasImages'] = $this->HasImages;
        if (isset($this->VariantDetails)) $o['VariantDetails'] = JsonConverters::toArray('InventoryDetailByVariant', $this->VariantDetails);
        if (isset($this->AddOns)) $o['AddOns'] = JsonConverters::toArray('AddOnDetail', $this->AddOns);
        if (isset($this->ActiveEInfo)) $o['ActiveEInfo'] = JsonConverters::to('ActiveEInfo', $this->ActiveEInfo);
        if (isset($this->Weight)) $o['Weight'] = $this->Weight;
        if (isset($this->Unit)) $o['Unit'] = $this->Unit;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class SearchInventoryApiResult extends SearchInventoryResultSet implements JsonSerializable
{
    /**
     * @param int $Pk
     * @param string|null $Description
     * @param string|null $InventoryType
     * @param string|null $Manufacturer
     * @param string|null $Model
     * @param float|null $Category
     * @param string|null $CategoryDescription
     * @param float|null $SubCategory
     * @param string|null $SubCategoryDescription
     * @param string|null $SelectionCode
     * @param string|null $SelectionCodeDescription
     * @param string|null $Sku
     * @param string|null $Mpn
     * @param bool|null $Discontinued
     * @param string|null $Attribute1
     * @param string|null $Attribute2
     * @param string|null $Attribute3
     * @param string|null $Attribute4
     * @param string|null $Attribute5
     * @param string|null $Attribute6
     * @param string|null $Attribute7
     * @param string|null $Attribute8
     * @param string|null $Attribute9
     * @param string|null $Attribute10
     * @param string|null $Attribute11
     * @param string|null $Attribute12
     * @param string|null $Attribute13
     * @param string|null $Attribute14
     * @param string|null $Attribute15
     * @param string|null $Attribute16
     * @param string|null $Attribute17
     * @param string|null $Attribute18
     * @param string|null $Attribute19
     * @param string|null $Attribute20
     * @param float $ComputerQuantity
     * @param float $OurPrice
     * @param float $RetailPrice
     * @param float $ActiveePrice
     * @param float $PriceA
     * @param float $PriceB
     * @param float $PriceC
     * @param float $MinPrice
     * @param float $AvailableQuantity
     * @param bool|null $IsMedia
     * @param bool|null $IsPackage
     * @param bool|null $HasImage
     * @param string|null $SearchTerm
     * @param string|null $Keywords
     * @param string|null $KeywordsOrigin
     * @param bool|null $Deleted
     * @param DateTime $TimeStamp
     */
    public function __construct(
        int $Pk=0,
        ?string $Description=null,
        ?string $InventoryType=null,
        ?string $Manufacturer=null,
        ?string $Model=null,
        ?float $Category=null,
        ?string $CategoryDescription=null,
        ?float $SubCategory=null,
        ?string $SubCategoryDescription=null,
        ?string $SelectionCode=null,
        ?string $SelectionCodeDescription=null,
        ?string $Sku=null,
        ?string $Mpn=null,
        ?bool $Discontinued=null,
        ?string $Attribute1=null,
        ?string $Attribute2=null,
        ?string $Attribute3=null,
        ?string $Attribute4=null,
        ?string $Attribute5=null,
        ?string $Attribute6=null,
        ?string $Attribute7=null,
        ?string $Attribute8=null,
        ?string $Attribute9=null,
        ?string $Attribute10=null,
        ?string $Attribute11=null,
        ?string $Attribute12=null,
        ?string $Attribute13=null,
        ?string $Attribute14=null,
        ?string $Attribute15=null,
        ?string $Attribute16=null,
        ?string $Attribute17=null,
        ?string $Attribute18=null,
        ?string $Attribute19=null,
        ?string $Attribute20=null,
        float $ComputerQuantity=0.0,
        float $OurPrice=0.0,
        float $RetailPrice=0.0,
        float $ActiveePrice=0.0,
        float $PriceA=0.0,
        float $PriceB=0.0,
        float $PriceC=0.0,
        float $MinPrice=0.0,
        float $AvailableQuantity=0.0,
        ?bool $IsMedia=null,
        ?bool $IsPackage=null,
        ?bool $HasImage=null,
        ?string $SearchTerm=null,
        ?string $Keywords=null,
        ?string $KeywordsOrigin=null,
        ?bool $Deleted=null,
        DateTime $TimeStamp=new DateTime(),
        // @DataMember
        /** @var InventoryDetail|null */
        public ?InventoryDetail $Detail=null,

        // @DataMember
        /** @var ImageInfo|null */
        public ?ImageInfo $IconImage=null,

        // @DataMember
        /** @var float */
        public float $CustomerPrice=0.0
    ) {
        parent::__construct($Pk,$Description,$InventoryType,$Manufacturer,$Model,$Category,$CategoryDescription,$SubCategory,$SubCategoryDescription,$SelectionCode,$SelectionCodeDescription,$Sku,$Mpn,$Discontinued,$Attribute1,$Attribute2,$Attribute3,$Attribute4,$Attribute5,$Attribute6,$Attribute7,$Attribute8,$Attribute9,$Attribute10,$Attribute11,$Attribute12,$Attribute13,$Attribute14,$Attribute15,$Attribute16,$Attribute17,$Attribute18,$Attribute19,$Attribute20,$ComputerQuantity,$OurPrice,$RetailPrice,$ActiveePrice,$PriceA,$PriceB,$PriceC,$MinPrice,$AvailableQuantity,$IsMedia,$IsPackage,$HasImage,$SearchTerm,$Keywords,$KeywordsOrigin,$Deleted,$TimeStamp);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['Detail'])) $this->Detail = JsonConverters::from('InventoryDetail', $o['Detail']);
        if (isset($o['IconImage'])) $this->IconImage = JsonConverters::from('ImageInfo', $o['IconImage']);
        if (isset($o['CustomerPrice'])) $this->CustomerPrice = $o['CustomerPrice'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->Detail)) $o['Detail'] = JsonConverters::to('InventoryDetail', $this->Detail);
        if (isset($this->IconImage)) $o['IconImage'] = JsonConverters::to('ImageInfo', $this->IconImage);
        if (isset($this->CustomerPrice)) $o['CustomerPrice'] = $this->CustomerPrice;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class SearchInventoryResponse extends BaseResponse implements JsonSerializable
{
    /**
     * @param BaseResponseResult|null $Status
     */
    public function __construct(
        ?BaseResponseResult $Status=null,
        // @DataMember
        /** @var int */
        public int $StartOffset=0,

        // @DataMember
        /** @var int */
        public int $RecordCount=0,

        // @DataMember
        /** @var int */
        public int $RemainingRecords=0,

        // @DataMember
        /** @var int */
        public int $TotalRecords=0,

        // @DataMember
        // @ApiMember(Name="Records", ParameterType="body")
        /** @var array<SearchInventoryApiResult>|null */
        public ?array $Records=null
    ) {
        parent::__construct($Status);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['StartOffset'])) $this->StartOffset = $o['StartOffset'];
        if (isset($o['RecordCount'])) $this->RecordCount = $o['RecordCount'];
        if (isset($o['RemainingRecords'])) $this->RemainingRecords = $o['RemainingRecords'];
        if (isset($o['TotalRecords'])) $this->TotalRecords = $o['TotalRecords'];
        if (isset($o['Records'])) $this->Records = JsonConverters::fromArray('SearchInventoryApiResult', $o['Records']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->StartOffset)) $o['StartOffset'] = $this->StartOffset;
        if (isset($this->RecordCount)) $o['RecordCount'] = $this->RecordCount;
        if (isset($this->RemainingRecords)) $o['RemainingRecords'] = $this->RemainingRecords;
        if (isset($this->TotalRecords)) $o['TotalRecords'] = $this->TotalRecords;
        if (isset($this->Records)) $o['Records'] = JsonConverters::toArray('SearchInventoryApiResult', $this->Records);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description SearchInventoryRequires active-e Inventory Service */
// @DataContract
class SearchInventoryRequest extends BaseSecureRequest implements JsonSerializable
{
    /**
     * @param string $ApiKey
     * @param string|null $OAuthToken
     * @param string|null $Token
     * @param string|null $DeviceId
     * @param string $AppId
     */
    public function __construct(
        string $ApiKey='',
        ?string $OAuthToken=null,
        ?string $Token=null,
        ?string $DeviceId=null,
        string $AppId='',
        /** @description If sent, only items from the passed location will be returned */
        // @DataMember
        // @ApiMember(DataType="integer", Description="If sent, only items from the passed location will be returned", Format="int32", Name="LocFk")
        /** @var int|null */
        public ?int $LocFk=null,

        /** @description For Internal Use Only */
        // @DataMember
        // @ApiMember(DataType="integer", Description="For Internal Use Only", Format="int32", Name="MfgFk")
        /** @var int|null */
        public ?int $MfgFk=null,

        /** @description For Internal Use Only */
        // @DataMember
        // @ApiMember(DataType="integer", Description="For Internal Use Only", Format="int32", Name="CatFk")
        /** @var int|null */
        public ?int $CatFk=null,

        /** @description For Internal Use Only */
        // @DataMember
        // @ApiMember(DataType="integer", Description="For Internal Use Only", Format="int32", Name="SubFk")
        /** @var int|null */
        public ?int $SubFk=null,

        /** @description For Internal Use Only */
        // @DataMember
        // @ApiMember(DataType="integer", Description="For Internal Use Only", Format="int32", Name="SelFk")
        /** @var int|null */
        public ?int $SelFk=null,

        /** @description If sent, only items from the passed category# will be returned */
        // @DataMember
        // @ApiMember(DataType="integer", Description="If sent, only items from the passed category# will be returned", Format="int32", Name="Cat")
        /** @var int|null */
        public ?int $Cat=null,

        /** @description If sent, only items from the passed subcategory# will be returned. Must be used in conjunction with the Cat parameter. */
        // @DataMember
        // @ApiMember(DataType="integer", Description="If sent, only items from the passed subcategory# will be returned. Must be used in conjunction with the Cat parameter.", Format="int32", Name="Sub")
        /** @var int|null */
        public ?int $Sub=null,

        /** @description If sent, only items with the passed selection code will be returned */
        // @DataMember
        // @ApiMember(Description="If sent, only items with the passed selection code will be returned", Name="SelectionCode")
        /** @var string|null */
        public ?string $SelectionCode=null,

        /** @description If sent, only items with the passed mfg code will be returned */
        // @DataMember
        // @ApiMember(Description="If sent, only items with the passed mfg code will be returned", Name="Mfg")
        /** @var string|null */
        public ?string $Mfg=null,

        /** @description Serialized Items will be included in the search results */
        // @DataMember
        // @ApiMember(DataType="boolean", Description="Serialized Items will be included in the search results", Name="IncludeSerials")
        /** @var bool|null */
        public ?bool $IncludeSerials=null,

        /** @description Media Items will be included in the search results */
        // @DataMember
        // @ApiMember(DataType="boolean", Description="Media Items will be included in the search results", Name="IncludeMedia")
        /** @var bool|null */
        public ?bool $IncludeMedia=null,

        /** @description Non-Serialized, Non-Media Items will be included in the search results */
        // @DataMember
        // @ApiMember(DataType="boolean", Description="Non-Serialized, Non-Media Items will be included in the search results", Name="IncludeAccessories")
        /** @var bool|null */
        public ?bool $IncludeAccessories=null,

        /** @description Package Deal Items will be included in the search results */
        // @DataMember
        // @ApiMember(DataType="boolean", Description="Package Deal Items will be included in the search results", Name="IncludePackages")
        /** @var bool|null */
        public ?bool $IncludePackages=null,

        /** @description The string to be searched for */
        // @DataMember
        // @ApiMember(Description="The string to be searched for", Name="SearchStr")
        /** @var string|null */
        public ?string $SearchStr=null,

        /** @description If set, only items with the exact model contained in the search string will be returned */
        // @DataMember
        // @ApiMember(DataType="boolean", Description="If set, only items with the exact model contained in the search string will be returned", Name="ExactModel")
        /** @var bool|null */
        public ?bool $ExactModel=null,

        /** @description The Starting Offse */
        // @DataMember
        // @ApiMember(DataType="integer", Description="The Starting Offse", Format="int64", Name="StartOffset")
        /** @var int|null */
        public ?int $StartOffset=null,

        /** @description The # of records to be returned */
        // @DataMember
        // @ApiMember(DataType="integer", Description="The # of records to be returned", Format="int64", Name="RecordCount")
        /** @var int|null */
        public ?int $RecordCount=null,

        /** @description If set, Icon Image Urls will be included in the result, if available */
        // @DataMember
        // @ApiMember(DataType="boolean", Description="If set, Icon Image Urls will be included in the result, if available", Name="IncludeIconImage")
        /** @var bool|null */
        public ?bool $IncludeIconImage=null,

        /** @description If sent, only items from the passed category IDs will be returned */
        // @DataMember
        // @ApiMember(Description="If sent, only items from the passed category IDs will be returned", Name="CatIdList")
        /** @var array<int>|null */
        public ?array $CatIdList=null,

        /** @description If sent, only items from the passed subcategory IDs will be returned */
        // @DataMember
        // @ApiMember(Description="If sent, only items from the passed subcategory IDs will be returned", Name="SubIdList")
        /** @var array<int>|null */
        public ?array $SubIdList=null,

        /** @description If sent, only items from the passed mfg IDs will be returned */
        // @DataMember
        // @ApiMember(Description="If sent, only items from the passed mfg IDs will be returned", Name="MfgIdList")
        /** @var array<int>|null */
        public ?array $MfgIdList=null,

        /** @description If sent, only items from the passed selection code IDs will be returned */
        // @DataMember
        // @ApiMember(Description="If sent, only items from the passed selection code IDs will be returned", Name="SelIdList")
        /** @var array<int>|null */
        public ?array $SelIdList=null,

        /** @description Deleted Items will be included in the search results */
        // @DataMember
        // @ApiMember(DataType="boolean", Description="Deleted Items will be included in the search results", Name="IncludeDeleted")
        /** @var bool|null */
        public ?bool $IncludeDeleted=null,

        /** @description If sent, only inventory changed on or after this date/time will be included */
        // @DataMember
        // @ApiMember(DataType="string", Description="If sent, only inventory changed on or after this date/time will be included", Format="date", Name="ChangedDate", ParameterType="query")
        /** @var DateTime|null */
        public ?DateTime $ChangedDate=null,

        /** @description Package Deal Line Items will be included */
        // @DataMember
        // @ApiMember(DataType="boolean", Description="Package Deal Line Items will be included", Name="IncludePackageLineItems")
        /** @var bool|null */
        public ?bool $IncludePackageLineItems=null,

        /** @description If set, the InventoryDetails object for each item will also be returned. This is much slower. */
        // @DataMember
        // @ApiMember(DataType="boolean", Description="If set, the InventoryDetails object for each item will also be returned. This is much slower.", Name="IncludeDetails")
        /** @var bool|null */
        public ?bool $IncludeDetails=null,

        /** @description If sent, only items with an Available Quantity greater then or equal to the sent value will be returned. Use of this parameter requires that the LocFk parameter also be sent. */
        // @DataMember
        // @ApiMember(DataType="integer", Description="If sent, only items with an Available Quantity greater then or equal to the sent value will be returned. Use of this parameter requires that the LocFk parameter also be sent.", Format="int32", Name="MinimumAvailableQuantity")
        /** @var int|null */
        public ?int $MinimumAvailableQuantity=null
    ) {
        parent::__construct($ApiKey,$OAuthToken,$Token,$DeviceId,$AppId);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['LocFk'])) $this->LocFk = $o['LocFk'];
        if (isset($o['MfgFk'])) $this->MfgFk = $o['MfgFk'];
        if (isset($o['CatFk'])) $this->CatFk = $o['CatFk'];
        if (isset($o['SubFk'])) $this->SubFk = $o['SubFk'];
        if (isset($o['SelFk'])) $this->SelFk = $o['SelFk'];
        if (isset($o['Cat'])) $this->Cat = $o['Cat'];
        if (isset($o['Sub'])) $this->Sub = $o['Sub'];
        if (isset($o['SelectionCode'])) $this->SelectionCode = $o['SelectionCode'];
        if (isset($o['Mfg'])) $this->Mfg = $o['Mfg'];
        if (isset($o['IncludeSerials'])) $this->IncludeSerials = $o['IncludeSerials'];
        if (isset($o['IncludeMedia'])) $this->IncludeMedia = $o['IncludeMedia'];
        if (isset($o['IncludeAccessories'])) $this->IncludeAccessories = $o['IncludeAccessories'];
        if (isset($o['IncludePackages'])) $this->IncludePackages = $o['IncludePackages'];
        if (isset($o['SearchStr'])) $this->SearchStr = $o['SearchStr'];
        if (isset($o['ExactModel'])) $this->ExactModel = $o['ExactModel'];
        if (isset($o['StartOffset'])) $this->StartOffset = $o['StartOffset'];
        if (isset($o['RecordCount'])) $this->RecordCount = $o['RecordCount'];
        if (isset($o['IncludeIconImage'])) $this->IncludeIconImage = $o['IncludeIconImage'];
        if (isset($o['CatIdList'])) $this->CatIdList = JsonConverters::fromArray('int', $o['CatIdList']);
        if (isset($o['SubIdList'])) $this->SubIdList = JsonConverters::fromArray('int', $o['SubIdList']);
        if (isset($o['MfgIdList'])) $this->MfgIdList = JsonConverters::fromArray('int', $o['MfgIdList']);
        if (isset($o['SelIdList'])) $this->SelIdList = JsonConverters::fromArray('int', $o['SelIdList']);
        if (isset($o['IncludeDeleted'])) $this->IncludeDeleted = $o['IncludeDeleted'];
        if (isset($o['ChangedDate'])) $this->ChangedDate = JsonConverters::from('DateTime', $o['ChangedDate']);
        if (isset($o['IncludePackageLineItems'])) $this->IncludePackageLineItems = $o['IncludePackageLineItems'];
        if (isset($o['IncludeDetails'])) $this->IncludeDetails = $o['IncludeDetails'];
        if (isset($o['MinimumAvailableQuantity'])) $this->MinimumAvailableQuantity = $o['MinimumAvailableQuantity'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->LocFk)) $o['LocFk'] = $this->LocFk;
        if (isset($this->MfgFk)) $o['MfgFk'] = $this->MfgFk;
        if (isset($this->CatFk)) $o['CatFk'] = $this->CatFk;
        if (isset($this->SubFk)) $o['SubFk'] = $this->SubFk;
        if (isset($this->SelFk)) $o['SelFk'] = $this->SelFk;
        if (isset($this->Cat)) $o['Cat'] = $this->Cat;
        if (isset($this->Sub)) $o['Sub'] = $this->Sub;
        if (isset($this->SelectionCode)) $o['SelectionCode'] = $this->SelectionCode;
        if (isset($this->Mfg)) $o['Mfg'] = $this->Mfg;
        if (isset($this->IncludeSerials)) $o['IncludeSerials'] = $this->IncludeSerials;
        if (isset($this->IncludeMedia)) $o['IncludeMedia'] = $this->IncludeMedia;
        if (isset($this->IncludeAccessories)) $o['IncludeAccessories'] = $this->IncludeAccessories;
        if (isset($this->IncludePackages)) $o['IncludePackages'] = $this->IncludePackages;
        if (isset($this->SearchStr)) $o['SearchStr'] = $this->SearchStr;
        if (isset($this->ExactModel)) $o['ExactModel'] = $this->ExactModel;
        if (isset($this->StartOffset)) $o['StartOffset'] = $this->StartOffset;
        if (isset($this->RecordCount)) $o['RecordCount'] = $this->RecordCount;
        if (isset($this->IncludeIconImage)) $o['IncludeIconImage'] = $this->IncludeIconImage;
        if (isset($this->CatIdList)) $o['CatIdList'] = JsonConverters::toArray('int', $this->CatIdList);
        if (isset($this->SubIdList)) $o['SubIdList'] = JsonConverters::toArray('int', $this->SubIdList);
        if (isset($this->MfgIdList)) $o['MfgIdList'] = JsonConverters::toArray('int', $this->MfgIdList);
        if (isset($this->SelIdList)) $o['SelIdList'] = JsonConverters::toArray('int', $this->SelIdList);
        if (isset($this->IncludeDeleted)) $o['IncludeDeleted'] = $this->IncludeDeleted;
        if (isset($this->ChangedDate)) $o['ChangedDate'] = JsonConverters::to('DateTime', $this->ChangedDate);
        if (isset($this->IncludePackageLineItems)) $o['IncludePackageLineItems'] = $this->IncludePackageLineItems;
        if (isset($this->IncludeDetails)) $o['IncludeDetails'] = $this->IncludeDetails;
        if (isset($this->MinimumAvailableQuantity)) $o['MinimumAvailableQuantity'] = $this->MinimumAvailableQuantity;
        return empty($o) ? new class(){} : $o;
    }
}

PHP SearchInventoryRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .other suffix or ?format=other

HTTP + OTHER

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /api/SearchInventory HTTP/1.1 
Host: active-ewebservice.biz 
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length

{"LocFk":0,"MfgFk":0,"CatFk":0,"SubFk":0,"SelFk":0,"Cat":0,"Sub":0,"SelectionCode":"String","Mfg":"String","IncludeSerials":false,"IncludeMedia":false,"IncludeAccessories":false,"IncludePackages":false,"SearchStr":"String","ExactModel":false,"StartOffset":0,"RecordCount":0,"IncludeIconImage":false,"CatIdList":[0],"SubIdList":[0],"MfgIdList":[0],"SelIdList":[0],"IncludeDeleted":false,"ChangedDate":"0001-01-01T00:00:00.0000000","IncludePackageLineItems":false,"IncludeDetails":false,"MinimumAvailableQuantity":0,"Token":"String","DeviceId":"String","AppId":"String","ApiKey":"String","OAuthToken":"String"}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length

{"StartOffset":0,"RecordCount":0,"RemainingRecords":0,"TotalRecords":0,"Records":[{"Detail":{"SadPk":0,"InvType":"String","Model":"String","Description":"String","Mfg":"String","Category":0,"CategoryDescription":"String","SubCategory":0,"SubCategoryDescription":"String","SelectionCode":"String","SelectionCodeDescription":"String","SellSerialsOnline":false,"Notes":"String","Images":[{"Url":"String","ImageStream":"String","ImageSize":"String","ErrorMessage":"String","UriPk":0}],"HasImages":true,"VariantDetails":[{}],"AddOns":[{}],"ActiveEInfo":{"Dimension":"String","WebDescription":"String","Summary":"String","SETitle":"String","SEDescription":"String","SEKeywords":"String","SEAltText":"String","SEHtmlFreeText":"String","Unpublished":false,"FreeShipping":false,"IsFeatured":false,"WebCategoryIds":[0]},"Weight":0,"Unit":"String"},"IconImage":{"Url":"String","ImageStream":"String","ImageSize":"String","ErrorMessage":"String","UriPk":0},"CustomerPrice":0,"Pk":0,"Description":"String","InventoryType":"String","Manufacturer":"String","Model":"String","Category":0,"CategoryDescription":"String","SubCategory":0,"SubCategoryDescription":"String","SelectionCode":"String","SelectionCodeDescription":"String","Sku":"String","Mpn":"String","Discontinued":false,"Attribute1":"String","Attribute2":"String","Attribute3":"String","Attribute4":"String","Attribute5":"String","Attribute6":"String","Attribute7":"String","Attribute8":"String","Attribute9":"String","Attribute10":"String","Attribute11":"String","Attribute12":"String","Attribute13":"String","Attribute14":"String","Attribute15":"String","Attribute16":"String","Attribute17":"String","Attribute18":"String","Attribute19":"String","Attribute20":"String","ComputerQuantity":0,"OurPrice":0,"RetailPrice":0,"ActiveePrice":0,"PriceA":0,"PriceB":0,"PriceC":0,"MinPrice":0,"AvailableQuantity":0,"IsMedia":false,"IsPackage":false,"HasImage":false,"SearchTerm":"String","Keywords":"String","KeywordsOrigin":"String","Deleted":false,"PackageLineItems":[{"Model":"String","Cat":0,"Sub":0,"Description":"String","Quantity":0,"Amount":0,"Discount":0,"ItemType":"String"}]}],"Status":{"StatusCode":"String","Login":"String","ErrorCode":"String","ErrorDisplayText":"String","ErrorMessage":"String","DomainName":"String","IpAddress":"String"}}