BokaMera.API.Host

<back to all web services

CreateVossUsageTermination

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin
The following routes are available for this service:
POST/voss/usage/{Id}/terminationCreate voss usage terminationAdd new product to company invoicing. Sends that product to VOSS System.
<?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(Name="SubscriptionItemTerminationReasonDto")
class SubscriptionItemTerminationReasonDto implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="reasonId", IsRequired=true)
        /** @var string */
        public string $reasonId='',

        // @DataMember(Name="reasonName", IsRequired=true)
        /** @var string */
        public string $reasonName='',

        // @DataMember(Name="reasonExternalId")
        /** @var string */
        public string $reasonExternalId='',

        // @DataMember(Name="subReasonId")
        /** @var string|null */
        public ?string $subReasonId=null,

        // @DataMember(Name="subReasonName")
        /** @var string */
        public string $subReasonName='',

        // @DataMember(Name="subReasonExternalId")
        /** @var string */
        public string $subReasonExternalId='',

        // @DataMember(Name="comment", IsRequired=true)
        /** @var string */
        public string $comment=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['reasonId'])) $this->reasonId = $o['reasonId'];
        if (isset($o['reasonName'])) $this->reasonName = $o['reasonName'];
        if (isset($o['reasonExternalId'])) $this->reasonExternalId = $o['reasonExternalId'];
        if (isset($o['subReasonId'])) $this->subReasonId = $o['subReasonId'];
        if (isset($o['subReasonName'])) $this->subReasonName = $o['subReasonName'];
        if (isset($o['subReasonExternalId'])) $this->subReasonExternalId = $o['subReasonExternalId'];
        if (isset($o['comment'])) $this->comment = $o['comment'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->reasonId)) $o['reasonId'] = $this->reasonId;
        if (isset($this->reasonName)) $o['reasonName'] = $this->reasonName;
        if (isset($this->reasonExternalId)) $o['reasonExternalId'] = $this->reasonExternalId;
        if (isset($this->subReasonId)) $o['subReasonId'] = $this->subReasonId;
        if (isset($this->subReasonName)) $o['subReasonName'] = $this->subReasonName;
        if (isset($this->subReasonExternalId)) $o['subReasonExternalId'] = $this->subReasonExternalId;
        if (isset($this->comment)) $o['comment'] = $this->comment;
        return empty($o) ? new class(){} : $o;
    }
}

enum UsageBehaviourEnum : string
{
    case Full = 'Full';
    case None = 'None';
}

enum CreditKindEnum : string
{
    case Normal = 'Normal';
    case Internal = 'Internal';
}

// @DataContract(Name="UsageCreditOptionsDto")
class UsageCreditOptionsDto implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="behaviour", IsRequired=true)
        /** @var UsageBehaviourEnum|null */
        public ?UsageBehaviourEnum $behaviour=null,

        // @DataMember(Name="creditKind", IsRequired=true)
        /** @var CreditKindEnum|null */
        public ?CreditKindEnum $creditKind=null
    ) {
    }

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

enum ProductTypeEnum : string
{
    case Main = 'Main';
    case Addon = 'Addon';
    case License = 'License';
    case Usage = 'Usage';
}

// @DataContract(Name="CustomerBalanceChangeItemDto")
class CustomerBalanceChangeItemDto implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="type", IsRequired=true)
        /** @var ProductTypeEnum|null */
        public ?ProductTypeEnum $type=null,

        // @DataMember(Name="id", IsRequired=true)
        /** @var string */
        public string $id='',

        // @DataMember(Name="name", IsRequired=true)
        /** @var string */
        public string $name='',

        // @DataMember(Name="productGroupId", IsRequired=true)
        /** @var string */
        public string $productGroupId='',

        // @DataMember(Name="productGroupName", IsRequired=true)
        /** @var string */
        public string $productGroupName='',

        // @DataMember(Name="quantity", IsRequired=true)
        /** @var float */
        public float $quantity=0.0,

        // @DataMember(Name="amount", IsRequired=true)
        /** @var float */
        public float $amount=0.0,

        // @DataMember(Name="discountAmount", IsRequired=true)
        /** @var float */
        public float $discountAmount=0.0,

        // @DataMember(Name="totalAmount", EmitDefaultValue=false)
        /** @var float */
        public float $totalAmount=0.0,

        // @DataMember(Name="invoiceRecipientCustomerId", IsRequired=true)
        /** @var string */
        public string $invoiceRecipientCustomerId=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['type'])) $this->type = JsonConverters::from('ProductTypeEnum', $o['type']);
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['productGroupId'])) $this->productGroupId = $o['productGroupId'];
        if (isset($o['productGroupName'])) $this->productGroupName = $o['productGroupName'];
        if (isset($o['quantity'])) $this->quantity = $o['quantity'];
        if (isset($o['amount'])) $this->amount = $o['amount'];
        if (isset($o['discountAmount'])) $this->discountAmount = $o['discountAmount'];
        if (isset($o['totalAmount'])) $this->totalAmount = $o['totalAmount'];
        if (isset($o['invoiceRecipientCustomerId'])) $this->invoiceRecipientCustomerId = $o['invoiceRecipientCustomerId'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->type)) $o['type'] = JsonConverters::to('ProductTypeEnum', $this->type);
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->productGroupId)) $o['productGroupId'] = $this->productGroupId;
        if (isset($this->productGroupName)) $o['productGroupName'] = $this->productGroupName;
        if (isset($this->quantity)) $o['quantity'] = $this->quantity;
        if (isset($this->amount)) $o['amount'] = $this->amount;
        if (isset($this->discountAmount)) $o['discountAmount'] = $this->discountAmount;
        if (isset($this->totalAmount)) $o['totalAmount'] = $this->totalAmount;
        if (isset($this->invoiceRecipientCustomerId)) $o['invoiceRecipientCustomerId'] = $this->invoiceRecipientCustomerId;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract(Name="CustomerBalanceChangeDto")
class CustomerBalanceChangeDto implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="items", EmitDefaultValue=false)
        /** @var array<CustomerBalanceChangeItemDto>|null */
        public ?array $items=null,

        // @DataMember(Name="totalAmount", EmitDefaultValue=false)
        /** @var float */
        public float $totalAmount=0.0,

        // @DataMember(Name="totalDiscountAmount", EmitDefaultValue=false)
        /** @var float */
        public float $totalDiscountAmount=0.0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['items'])) $this->items = JsonConverters::fromArray('CustomerBalanceChangeItemDto', $o['items']);
        if (isset($o['totalAmount'])) $this->totalAmount = $o['totalAmount'];
        if (isset($o['totalDiscountAmount'])) $this->totalDiscountAmount = $o['totalDiscountAmount'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->items)) $o['items'] = JsonConverters::toArray('CustomerBalanceChangeItemDto', $this->items);
        if (isset($this->totalAmount)) $o['totalAmount'] = $this->totalAmount;
        if (isset($this->totalDiscountAmount)) $o['totalDiscountAmount'] = $this->totalDiscountAmount;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract(Name="CreateUsageTerminationResult")
class CreateUsageTerminationResult implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="scheduledDate", IsRequired=true)
        /** @var DateTime */
        public DateTime $scheduledDate=new DateTime(),

        // @DataMember(Name="reason")
        /** @var SubscriptionItemTerminationReasonDto|null */
        public ?SubscriptionItemTerminationReasonDto $reason=null,

        // @DataMember(Name="creditOptions", IsRequired=true)
        /** @var UsageCreditOptionsDto|null */
        public ?UsageCreditOptionsDto $creditOptions=null,

        // @DataMember(Name="customerBalanceChange", IsRequired=true)
        /** @var CustomerBalanceChangeDto|null */
        public ?CustomerBalanceChangeDto $customerBalanceChange=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['scheduledDate'])) $this->scheduledDate = JsonConverters::from('DateTime', $o['scheduledDate']);
        if (isset($o['reason'])) $this->reason = JsonConverters::from('SubscriptionItemTerminationReasonDto', $o['reason']);
        if (isset($o['creditOptions'])) $this->creditOptions = JsonConverters::from('UsageCreditOptionsDto', $o['creditOptions']);
        if (isset($o['customerBalanceChange'])) $this->customerBalanceChange = JsonConverters::from('CustomerBalanceChangeDto', $o['customerBalanceChange']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->scheduledDate)) $o['scheduledDate'] = JsonConverters::to('DateTime', $this->scheduledDate);
        if (isset($this->reason)) $o['reason'] = JsonConverters::to('SubscriptionItemTerminationReasonDto', $this->reason);
        if (isset($this->creditOptions)) $o['creditOptions'] = JsonConverters::to('UsageCreditOptionsDto', $this->creditOptions);
        if (isset($this->customerBalanceChange)) $o['customerBalanceChange'] = JsonConverters::to('CustomerBalanceChangeDto', $this->customerBalanceChange);
        return empty($o) ? new class(){} : $o;
    }
}

// @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
class CreateVossUsageTermination implements JsonSerializable
{
    public function __construct(
        /** @description The company id */
        // @ApiMember(Description="The company id", IsRequired=true)
        /** @var string */
        public string $CompanyId='',

        /** @description Usage Id */
        // @ApiMember(Description="Usage Id", IsRequired=true)
        /** @var string */
        public string $Id='',

        /** @var array<string>|null */
        public ?array $InvoiceLineTexts=null,
        /** @var string */
        public string $TerminationReasonComment='',
        /** @var string */
        public string $TerminationReasonId='',
        /** @description Credit behaviour:  <br /> 1. Full - usage will be credited in full  <br /> 2. None - no credit will be created */
        // @ApiMember(Description="Credit behaviour:  <br /> 1. Full - usage will be credited in full  <br /> 2. None - no credit will be created", IsRequired=true)
        /** @var UsageBehaviourEnum|null */
        public ?UsageBehaviourEnum $Behaviour=null,

        /** @description Credit kind:  <br /> 1. Normal - default credit type  <br /> 2. Internal - corresponding credit will be marked as internal in invoice file line */
        // @ApiMember(Description="Credit kind:  <br /> 1. Normal - default credit type  <br /> 2. Internal - corresponding credit will be marked as internal in invoice file line", IsRequired=true)
        /** @var CreditKindEnum|null */
        public ?CreditKindEnum $CreditKind=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['CompanyId'])) $this->CompanyId = $o['CompanyId'];
        if (isset($o['Id'])) $this->Id = $o['Id'];
        if (isset($o['InvoiceLineTexts'])) $this->InvoiceLineTexts = JsonConverters::fromArray('string', $o['InvoiceLineTexts']);
        if (isset($o['TerminationReasonComment'])) $this->TerminationReasonComment = $o['TerminationReasonComment'];
        if (isset($o['TerminationReasonId'])) $this->TerminationReasonId = $o['TerminationReasonId'];
        if (isset($o['Behaviour'])) $this->Behaviour = JsonConverters::from('UsageBehaviourEnum', $o['Behaviour']);
        if (isset($o['CreditKind'])) $this->CreditKind = JsonConverters::from('CreditKindEnum', $o['CreditKind']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->CompanyId)) $o['CompanyId'] = $this->CompanyId;
        if (isset($this->Id)) $o['Id'] = $this->Id;
        if (isset($this->InvoiceLineTexts)) $o['InvoiceLineTexts'] = JsonConverters::toArray('string', $this->InvoiceLineTexts);
        if (isset($this->TerminationReasonComment)) $o['TerminationReasonComment'] = $this->TerminationReasonComment;
        if (isset($this->TerminationReasonId)) $o['TerminationReasonId'] = $this->TerminationReasonId;
        if (isset($this->Behaviour)) $o['Behaviour'] = JsonConverters::to('UsageBehaviourEnum', $this->Behaviour);
        if (isset($this->CreditKind)) $o['CreditKind'] = JsonConverters::to('CreditKindEnum', $this->CreditKind);
        return empty($o) ? new class(){} : $o;
    }
}

PHP CreateVossUsageTermination 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 /voss/usage/{Id}/termination HTTP/1.1 
Host: api.bokamera.se 
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length

{"Id":"String","InvoiceLineTexts":["String"],"TerminationReasonComment":"String","Behaviour":"Full","CreditKind":"Normal"}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length

{}