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.
import 'package:servicestack/servicestack.dart';

// @DataContract(Name="SubscriptionItemTerminationReasonDto")
class SubscriptionItemTerminationReasonDto implements IConvertible
{
    // @DataMember(Name="reasonId", IsRequired=true)
    String? reasonId;

    // @DataMember(Name="reasonName", IsRequired=true)
    String? reasonName;

    // @DataMember(Name="reasonExternalId")
    String? reasonExternalId;

    // @DataMember(Name="subReasonId")
    String? subReasonId;

    // @DataMember(Name="subReasonName")
    String? subReasonName;

    // @DataMember(Name="subReasonExternalId")
    String? subReasonExternalId;

    // @DataMember(Name="comment", IsRequired=true)
    String? comment;

    SubscriptionItemTerminationReasonDto({this.reasonId,this.reasonName,this.reasonExternalId,this.subReasonId,this.subReasonName,this.subReasonExternalId,this.comment});
    SubscriptionItemTerminationReasonDto.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        reasonId = json['ReasonId'];
        reasonName = json['ReasonName'];
        reasonExternalId = json['ReasonExternalId'];
        subReasonId = json['SubReasonId'];
        subReasonName = json['SubReasonName'];
        subReasonExternalId = json['SubReasonExternalId'];
        comment = json['Comment'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'reasonId': reasonId,
        'reasonName': reasonName,
        'reasonExternalId': reasonExternalId,
        'subReasonId': subReasonId,
        'subReasonName': subReasonName,
        'subReasonExternalId': subReasonExternalId,
        'comment': comment
    };

    getTypeName() => "SubscriptionItemTerminationReasonDto";
    TypeContext? context = _ctx;
}

enum UsageBehaviourEnum
{
    Full,
    None,
}

enum CreditKindEnum
{
    Normal,
    Internal,
}

// @DataContract(Name="UsageCreditOptionsDto")
class UsageCreditOptionsDto implements IConvertible
{
    // @DataMember(Name="behaviour", IsRequired=true)
    UsageBehaviourEnum? behaviour;

    // @DataMember(Name="creditKind", IsRequired=true)
    CreditKindEnum? creditKind;

    UsageCreditOptionsDto({this.behaviour,this.creditKind});
    UsageCreditOptionsDto.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        behaviour = JsonConverters.fromJson(json['UsageBehaviour'],'UsageBehaviourEnum',context!);
        creditKind = JsonConverters.fromJson(json['CreditKind'],'CreditKindEnum',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'behaviour': JsonConverters.toJson(behaviour,'UsageBehaviourEnum',context!),
        'creditKind': JsonConverters.toJson(creditKind,'CreditKindEnum',context!)
    };

    getTypeName() => "UsageCreditOptionsDto";
    TypeContext? context = _ctx;
}

enum ProductTypeEnum
{
    Main,
    Addon,
    License,
    Usage,
}

// @DataContract(Name="CustomerBalanceChangeItemDto")
class CustomerBalanceChangeItemDto implements IConvertible
{
    // @DataMember(Name="type", IsRequired=true)
    ProductTypeEnum? type;

    // @DataMember(Name="id", IsRequired=true)
    String? id;

    // @DataMember(Name="name", IsRequired=true)
    String? name;

    // @DataMember(Name="productGroupId", IsRequired=true)
    String? productGroupId;

    // @DataMember(Name="productGroupName", IsRequired=true)
    String? productGroupName;

    // @DataMember(Name="quantity", IsRequired=true)
    double? quantity;

    // @DataMember(Name="amount", IsRequired=true)
    double? amount;

    // @DataMember(Name="discountAmount", IsRequired=true)
    double? discountAmount;

    // @DataMember(Name="totalAmount", EmitDefaultValue=false)
    double? totalAmount;

    // @DataMember(Name="invoiceRecipientCustomerId", IsRequired=true)
    String? invoiceRecipientCustomerId;

    CustomerBalanceChangeItemDto({this.type,this.id,this.name,this.productGroupId,this.productGroupName,this.quantity,this.amount,this.discountAmount,this.totalAmount,this.invoiceRecipientCustomerId});
    CustomerBalanceChangeItemDto.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        type = JsonConverters.fromJson(json['ProductType'],'ProductTypeEnum',context!);
        id = json['Id'];
        name = json['Name'];
        productGroupId = json['ProductGroupId'];
        productGroupName = json['ProductGroupName'];
        quantity = JsonConverters.toDouble(json['Quantity']);
        amount = JsonConverters.toDouble(json['Amount']);
        discountAmount = JsonConverters.toDouble(json['DiscountAmount']);
        totalAmount = JsonConverters.toDouble(json['TotalAmount']);
        invoiceRecipientCustomerId = json['InvoiceRecipientCustomerId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'type': JsonConverters.toJson(type,'ProductTypeEnum',context!),
        'id': id,
        'name': name,
        'productGroupId': productGroupId,
        'productGroupName': productGroupName,
        'quantity': quantity,
        'amount': amount,
        'discountAmount': discountAmount,
        'totalAmount': totalAmount,
        'invoiceRecipientCustomerId': invoiceRecipientCustomerId
    };

    getTypeName() => "CustomerBalanceChangeItemDto";
    TypeContext? context = _ctx;
}

// @DataContract(Name="CustomerBalanceChangeDto")
class CustomerBalanceChangeDto implements IConvertible
{
    // @DataMember(Name="items", EmitDefaultValue=false)
    List<CustomerBalanceChangeItemDto>? items = [];

    // @DataMember(Name="totalAmount", EmitDefaultValue=false)
    double? totalAmount;

    // @DataMember(Name="totalDiscountAmount", EmitDefaultValue=false)
    double? totalDiscountAmount;

    CustomerBalanceChangeDto({this.items,this.totalAmount,this.totalDiscountAmount});
    CustomerBalanceChangeDto.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        items = JsonConverters.fromJson(json['Items'],'List<CustomerBalanceChangeItemDto>',context!);
        totalAmount = JsonConverters.toDouble(json['TotalAmount']);
        totalDiscountAmount = JsonConverters.toDouble(json['TotalDiscountAmount']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'items': JsonConverters.toJson(items,'List<CustomerBalanceChangeItemDto>',context!),
        'totalAmount': totalAmount,
        'totalDiscountAmount': totalDiscountAmount
    };

    getTypeName() => "CustomerBalanceChangeDto";
    TypeContext? context = _ctx;
}

// @DataContract(Name="CreateUsageTerminationResult")
class CreateUsageTerminationResult implements IConvertible
{
    // @DataMember(Name="scheduledDate", IsRequired=true)
    DateTime? scheduledDate;

    // @DataMember(Name="reason")
    SubscriptionItemTerminationReasonDto? reason;

    // @DataMember(Name="creditOptions", IsRequired=true)
    UsageCreditOptionsDto? creditOptions;

    // @DataMember(Name="customerBalanceChange", IsRequired=true)
    CustomerBalanceChangeDto? customerBalanceChange;

    CreateUsageTerminationResult({this.scheduledDate,this.reason,this.creditOptions,this.customerBalanceChange});
    CreateUsageTerminationResult.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        scheduledDate = JsonConverters.fromJson(json['ScheduledDate'],'DateTime',context!);
        reason = JsonConverters.fromJson(json['Reason'],'SubscriptionItemTerminationReasonDto',context!);
        creditOptions = JsonConverters.fromJson(json['CreditOptions'],'UsageCreditOptionsDto',context!);
        customerBalanceChange = JsonConverters.fromJson(json['CustomerBalanceChange'],'CustomerBalanceChangeDto',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'scheduledDate': JsonConverters.toJson(scheduledDate,'DateTime',context!),
        'reason': JsonConverters.toJson(reason,'SubscriptionItemTerminationReasonDto',context!),
        'creditOptions': JsonConverters.toJson(creditOptions,'UsageCreditOptionsDto',context!),
        'customerBalanceChange': JsonConverters.toJson(customerBalanceChange,'CustomerBalanceChangeDto',context!)
    };

    getTypeName() => "CreateUsageTerminationResult";
    TypeContext? context = _ctx;
}

// @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
class CreateVossUsageTermination implements IConvertible
{
    /**
    * The company id
    */
    // @ApiMember(Description="The company id", IsRequired=true)
    String? CompanyId;

    /**
    * Usage Id
    */
    // @ApiMember(Description="Usage Id", IsRequired=true)
    String? Id;

    List<String>? InvoiceLineTexts = [];
    String? TerminationReasonComment;
    String? TerminationReasonId;
    /**
    * 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)
    UsageBehaviourEnum? Behaviour;

    /**
    * 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)
    CreditKindEnum? CreditKind;

    CreateVossUsageTermination({this.CompanyId,this.Id,this.InvoiceLineTexts,this.TerminationReasonComment,this.TerminationReasonId,this.Behaviour,this.CreditKind});
    CreateVossUsageTermination.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        InvoiceLineTexts = JsonConverters.fromJson(json['InvoiceLineTexts'],'List<String>',context!);
        TerminationReasonComment = json['TerminationReasonComment'];
        TerminationReasonId = json['TerminationReasonId'];
        Behaviour = JsonConverters.fromJson(json['Behaviour'],'UsageBehaviourEnum',context!);
        CreditKind = JsonConverters.fromJson(json['CreditKind'],'CreditKindEnum',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CompanyId': CompanyId,
        'Id': Id,
        'InvoiceLineTexts': JsonConverters.toJson(InvoiceLineTexts,'List<String>',context!),
        'TerminationReasonComment': TerminationReasonComment,
        'TerminationReasonId': TerminationReasonId,
        'Behaviour': JsonConverters.toJson(Behaviour,'UsageBehaviourEnum',context!),
        'CreditKind': JsonConverters.toJson(CreditKind,'CreditKindEnum',context!)
    };

    getTypeName() => "CreateVossUsageTermination";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'api.bokamera.se', types: <String, TypeInfo> {
    'SubscriptionItemTerminationReasonDto': TypeInfo(TypeOf.Class, create:() => SubscriptionItemTerminationReasonDto()),
    'UsageBehaviourEnum': TypeInfo(TypeOf.Enum, enumValues:UsageBehaviourEnum.values),
    'CreditKindEnum': TypeInfo(TypeOf.Enum, enumValues:CreditKindEnum.values),
    'UsageCreditOptionsDto': TypeInfo(TypeOf.Class, create:() => UsageCreditOptionsDto()),
    'ProductTypeEnum': TypeInfo(TypeOf.Enum, enumValues:ProductTypeEnum.values),
    'CustomerBalanceChangeItemDto': TypeInfo(TypeOf.Class, create:() => CustomerBalanceChangeItemDto()),
    'CustomerBalanceChangeDto': TypeInfo(TypeOf.Class, create:() => CustomerBalanceChangeDto()),
    'List<CustomerBalanceChangeItemDto>': TypeInfo(TypeOf.Class, create:() => <CustomerBalanceChangeItemDto>[]),
    'CreateUsageTerminationResult': TypeInfo(TypeOf.Class, create:() => CreateUsageTerminationResult()),
    'CreateVossUsageTermination': TypeInfo(TypeOf.Class, create:() => CreateVossUsageTermination()),
});

Dart CreateVossUsageTermination DTOs

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

HTTP + XML

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: application/xml
Content-Type: application/xml
Content-Length: length

<CreateVossUsageTermination xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/BokaMera.API.ServiceModel.Dtos">
  <Behaviour>Full</Behaviour>
  <CompanyId>00000000-0000-0000-0000-000000000000</CompanyId>
  <CreditKind>Normal</CreditKind>
  <Id>String</Id>
  <InvoiceLineTexts xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:string>String</d2p1:string>
  </InvoiceLineTexts>
  <TerminationReasonComment>String</TerminationReasonComment>
  <TerminationReasonId>00000000-0000-0000-0000-000000000000</TerminationReasonId>
</CreateVossUsageTermination>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<CreateUsageTerminationResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/BokaMera.VossIntegration.ApiTools.Model">
  <creditOptions i:nil="true" />
  <customerBalanceChange i:nil="true" />
  <reason i:nil="true" />
  <scheduledDate>0001-01-01T00:00:00</scheduledDate>
</CreateUsageTerminationResult>