| Requires any of the roles: | bookingsupplier-administrator-write, superadmin |
| POST | /voss/usage/{Id}/termination | Create voss usage termination | Add 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
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
{}