BokaMera.API.Host

<back to all web services

CreateVossUsage

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin
The following routes are available for this service:
POST/voss/usageAdd product to company invoicingAdd new product to company invoicing. Sends that product to VOSS System.
import java.math.*
import java.util.*
import java.io.InputStream
import net.servicestack.client.*
import com.google.gson.annotations.*
import com.google.gson.reflect.*


@ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
@ValidateRequest(Validator="IsAuthenticated")
open class CreateVossUsage
{
    /**
    * The company id
    */
    @ApiMember(Description="The company id", IsRequired=true)
    open var CompanyId:UUID? = null

    /**
    * Article number. Can be fetched from products
    */
    @ApiMember(Description="Article number. Can be fetched from products", IsRequired=true)
    open var ArticleNumber:String? = null

    /**
    * Example: developer worked 6 hours
    */
    @ApiMember(Description="Example: developer worked 6 hours", IsRequired=true)
    open var Quantity:Int? = null
}

@DataContract(Name="CreateSubscriptionProductGroupResult")
open class CreateSubscriptionProductGroupResult
{
    @DataMember(Name="productGroupType", IsRequired=true)
    @SerializedName("productGroupType")
    open var ProductGroupType:ProductGroupTypeEnum? = null

    @DataMember(Name="status", IsRequired=true)
    @SerializedName("status")
    open var Status:StatusEnum? = null

    @DataMember(Name="id", IsRequired=true)
    @SerializedName("id")
    open var Id:UUID? = null

    @DataMember(Name="name", IsRequired=true)
    @SerializedName("name")
    open var Name:String? = null

    @DataMember(Name="products", EmitDefaultValue=false)
    @SerializedName("products")
    open var Products:ArrayList<SubscriptionProductGroupProductResultDto> = ArrayList<SubscriptionProductGroupProductResultDto>()

    @DataMember(Name="termination")
    @SerializedName("termination")
    open var Termination:SubscriptionItemTerminationDto? = null

    @DataMember(Name="created", IsRequired=true)
    @SerializedName("created")
    open var Created:Date? = null

    @DataMember(Name="customerBalanceChange", IsRequired=true)
    @SerializedName("customerBalanceChange")
    open var CustomerBalanceChange:CustomerBalanceChangeDto? = null
}

enum class ProductGroupTypeEnum
{
    Optional,
    Included,
}

enum class StatusEnum
{
    Active,
    Terminated,
}

@DataContract(Name="SubscriptionProductGroupProductResultDto")
open class SubscriptionProductGroupProductResultDto
{
    @DataMember(Name="id", IsRequired=true)
    @SerializedName("id")
    open var Id:UUID? = null

    @DataMember(Name="name", IsRequired=true)
    @SerializedName("name")
    open var Name:String? = null

    @DataMember(Name="externalId")
    @SerializedName("externalId")
    open var ExternalId:String? = null

    @DataMember(Name="articleNumber", IsRequired=true)
    @SerializedName("articleNumber")
    open var ArticleNumber:String? = null
}

@DataContract(Name="SubscriptionItemTerminationDto")
open class SubscriptionItemTerminationDto
{
    @DataMember(Name="type")
    @SerializedName("type")
    open var Type:TypeEnum? = null

    @DataMember(Name="source", IsRequired=true)
    @SerializedName("source")
    open var Source:SourceEnum? = null

    @DataMember(Name="scheduledDate", IsRequired=true)
    @SerializedName("scheduledDate")
    open var ScheduledDate:Date? = null

    @DataMember(Name="reason")
    @SerializedName("reason")
    open var Reason:SubscriptionItemTerminationReasonDto? = null

    @DataMember(Name="creditOptions", IsRequired=true)
    @SerializedName("creditOptions")
    open var CreditOptions:CreditOptionsDto? = null
}

enum class TypeEnum
{
    AtSubscriptionBillingPeriodEnd,
    AtBindingPeriodEnd,
    Immediately,
}

enum class SourceEnum
{
    Direct,
    Plan,
    CustomerExpiration,
    Update,
    Unpaid,
}

@DataContract(Name="SubscriptionItemTerminationReasonDto")
open class SubscriptionItemTerminationReasonDto
{
    @DataMember(Name="reasonId", IsRequired=true)
    @SerializedName("reasonId")
    open var ReasonId:UUID? = null

    @DataMember(Name="reasonName", IsRequired=true)
    @SerializedName("reasonName")
    open var ReasonName:String? = null

    @DataMember(Name="reasonExternalId")
    @SerializedName("reasonExternalId")
    open var ReasonExternalId:String? = null

    @DataMember(Name="subReasonId")
    @SerializedName("subReasonId")
    open var SubReasonId:UUID? = null

    @DataMember(Name="subReasonName")
    @SerializedName("subReasonName")
    open var SubReasonName:String? = null

    @DataMember(Name="subReasonExternalId")
    @SerializedName("subReasonExternalId")
    open var SubReasonExternalId:String? = null

    @DataMember(Name="comment", IsRequired=true)
    @SerializedName("comment")
    open var Comment:String? = null
}

@DataContract(Name="CreditOptionsDto")
open class CreditOptionsDto
{
    @DataMember(Name="behaviour", IsRequired=true)
    @SerializedName("behaviour")
    open var SubscriptionBehaviour:SubscriptionBehaviourEnum? = null

    @DataMember(Name="creditKind", IsRequired=true)
    @SerializedName("creditKind")
    open var CreditKind:CreditKindEnum? = null

    @DataMember(Name="prorateTimeAnchor")
    @SerializedName("prorateTimeAnchor")
    open var ProrateTimeAnchor:Date? = null
}

enum class SubscriptionBehaviourEnum
{
    Prorate,
    Full,
    None,
}

enum class CreditKindEnum
{
    Normal,
    Internal,
}

@DataContract(Name="CustomerBalanceChangeDto")
open class CustomerBalanceChangeDto
{
    @DataMember(Name="items", EmitDefaultValue=false)
    @SerializedName("items")
    open var Items:ArrayList<CustomerBalanceChangeItemDto> = ArrayList<CustomerBalanceChangeItemDto>()

    @DataMember(Name="totalAmount", EmitDefaultValue=false)
    @SerializedName("totalAmount")
    open var TotalAmount:Double? = null

    @DataMember(Name="totalDiscountAmount", EmitDefaultValue=false)
    @SerializedName("totalDiscountAmount")
    open var TotalDiscountAmount:Double? = null
}

@DataContract(Name="CustomerBalanceChangeItemDto")
open class CustomerBalanceChangeItemDto
{
    @DataMember(Name="type", IsRequired=true)
    @SerializedName("type")
    open var ProductType:ProductTypeEnum? = null

    @DataMember(Name="id", IsRequired=true)
    @SerializedName("id")
    open var Id:UUID? = null

    @DataMember(Name="name", IsRequired=true)
    @SerializedName("name")
    open var Name:String? = null

    @DataMember(Name="productGroupId", IsRequired=true)
    @SerializedName("productGroupId")
    open var ProductGroupId:UUID? = null

    @DataMember(Name="productGroupName", IsRequired=true)
    @SerializedName("productGroupName")
    open var ProductGroupName:String? = null

    @DataMember(Name="quantity", IsRequired=true)
    @SerializedName("quantity")
    open var Quantity:Double? = null

    @DataMember(Name="amount", IsRequired=true)
    @SerializedName("amount")
    open var Amount:Double? = null

    @DataMember(Name="discountAmount", IsRequired=true)
    @SerializedName("discountAmount")
    open var DiscountAmount:Double? = null

    @DataMember(Name="totalAmount", EmitDefaultValue=false)
    @SerializedName("totalAmount")
    open var TotalAmount:Double? = null

    @DataMember(Name="invoiceRecipientCustomerId", IsRequired=true)
    @SerializedName("invoiceRecipientCustomerId")
    open var InvoiceRecipientCustomerId:UUID? = null
}

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

Kotlin CreateVossUsage DTOs

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

HTTP + JSV

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

POST /voss/usage HTTP/1.1 
Host: api.bokamera.se 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	ArticleNumber: String,
	Quantity: 0
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	productGroupType: Optional,
	status: Active,
	name: String,
	products: 
	[
		{
			
		}
	]
}