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 Foundation
import ServiceStack

// @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
public class CreateVossUsage : Codable
{
    /**
    * The company id
    */
    // @ApiMember(Description="The company id", IsRequired=true)
    public var companyId:String

    /**
    * Article number. Can be fetched from products
    */
    // @ApiMember(Description="Article number. Can be fetched from products", IsRequired=true)
    public var articleNumber:String

    /**
    * Example: developer worked 6 hours
    */
    // @ApiMember(Description="Example: developer worked 6 hours", IsRequired=true)
    public var quantity:Int

    required public init(){}
}

// @DataContract(Name="CreateSubscriptionProductGroupResult")
public class CreateSubscriptionProductGroupResult : Codable
{
    // @DataMember(Name="productGroupType", IsRequired=true)
    public var productGroupType:ProductGroupTypeEnum

    // @DataMember(Name="status", IsRequired=true)
    public var status:StatusEnum

    // @DataMember(Name="id", IsRequired=true)
    public var id:String

    // @DataMember(Name="name", IsRequired=true)
    public var name:String

    // @DataMember(Name="products", EmitDefaultValue=false)
    public var products:[SubscriptionProductGroupProductResultDto] = []

    // @DataMember(Name="termination")
    public var termination:SubscriptionItemTerminationDto

    // @DataMember(Name="created", IsRequired=true)
    public var created:Date

    // @DataMember(Name="customerBalanceChange", IsRequired=true)
    public var customerBalanceChange:CustomerBalanceChangeDto

    required public init(){}
}

public enum ProductGroupTypeEnum : String, Codable
{
    case Optional
    case Included
}

public enum StatusEnum : String, Codable
{
    case Active
    case Terminated
}

// @DataContract(Name="SubscriptionProductGroupProductResultDto")
public class SubscriptionProductGroupProductResultDto : Codable
{
    // @DataMember(Name="id", IsRequired=true)
    public var id:String

    // @DataMember(Name="name", IsRequired=true)
    public var name:String

    // @DataMember(Name="externalId")
    public var externalId:String

    // @DataMember(Name="articleNumber", IsRequired=true)
    public var articleNumber:String

    required public init(){}
}

// @DataContract(Name="SubscriptionItemTerminationDto")
public class SubscriptionItemTerminationDto : Codable
{
    // @DataMember(Name="type")
    public var type:TypeEnum

    // @DataMember(Name="source", IsRequired=true)
    public var source:SourceEnum

    // @DataMember(Name="scheduledDate", IsRequired=true)
    public var scheduledDate:Date

    // @DataMember(Name="reason")
    public var reason:SubscriptionItemTerminationReasonDto

    // @DataMember(Name="creditOptions", IsRequired=true)
    public var creditOptions:CreditOptionsDto

    required public init(){}
}

public enum TypeEnum : String, Codable
{
    case AtSubscriptionBillingPeriodEnd
    case AtBindingPeriodEnd
    case Immediately
}

public enum SourceEnum : String, Codable
{
    case Direct
    case Plan
    case CustomerExpiration
    case Update
    case Unpaid
}

// @DataContract(Name="SubscriptionItemTerminationReasonDto")
public class SubscriptionItemTerminationReasonDto : Codable
{
    // @DataMember(Name="reasonId", IsRequired=true)
    public var reasonId:String

    // @DataMember(Name="reasonName", IsRequired=true)
    public var reasonName:String

    // @DataMember(Name="reasonExternalId")
    public var reasonExternalId:String

    // @DataMember(Name="subReasonId")
    public var subReasonId:String?

    // @DataMember(Name="subReasonName")
    public var subReasonName:String

    // @DataMember(Name="subReasonExternalId")
    public var subReasonExternalId:String

    // @DataMember(Name="comment", IsRequired=true)
    public var comment:String

    required public init(){}
}

// @DataContract(Name="CreditOptionsDto")
public class CreditOptionsDto : Codable
{
    // @DataMember(Name="behaviour", IsRequired=true)
    public var behaviour:SubscriptionBehaviourEnum

    // @DataMember(Name="creditKind", IsRequired=true)
    public var creditKind:CreditKindEnum

    // @DataMember(Name="prorateTimeAnchor")
    public var prorateTimeAnchor:Date?

    required public init(){}
}

public enum SubscriptionBehaviourEnum : String, Codable
{
    case Prorate
    case Full
    case None
}

public enum CreditKindEnum : String, Codable
{
    case Normal
    case Internal
}

// @DataContract(Name="CustomerBalanceChangeDto")
public class CustomerBalanceChangeDto : Codable
{
    // @DataMember(Name="items", EmitDefaultValue=false)
    public var items:[CustomerBalanceChangeItemDto] = []

    // @DataMember(Name="totalAmount", EmitDefaultValue=false)
    public var totalAmount:Double

    // @DataMember(Name="totalDiscountAmount", EmitDefaultValue=false)
    public var totalDiscountAmount:Double

    required public init(){}
}

// @DataContract(Name="CustomerBalanceChangeItemDto")
public class CustomerBalanceChangeItemDto : Codable
{
    // @DataMember(Name="type", IsRequired=true)
    public var type:ProductTypeEnum

    // @DataMember(Name="id", IsRequired=true)
    public var id:String

    // @DataMember(Name="name", IsRequired=true)
    public var name:String

    // @DataMember(Name="productGroupId", IsRequired=true)
    public var productGroupId:String

    // @DataMember(Name="productGroupName", IsRequired=true)
    public var productGroupName:String

    // @DataMember(Name="quantity", IsRequired=true)
    public var quantity:Double

    // @DataMember(Name="amount", IsRequired=true)
    public var amount:Double

    // @DataMember(Name="discountAmount", IsRequired=true)
    public var discountAmount:Double

    // @DataMember(Name="totalAmount", EmitDefaultValue=false)
    public var totalAmount:Double

    // @DataMember(Name="invoiceRecipientCustomerId", IsRequired=true)
    public var invoiceRecipientCustomerId:String

    required public init(){}
}

public enum ProductTypeEnum : String, Codable
{
    case Main
    case Addon
    case License
    case Usage
}


Swift CreateVossUsage 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 HTTP/1.1 
Host: api.bokamera.se 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<CreateVossUsage xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/BokaMera.API.ServiceModel.Dtos">
  <ArticleNumber>String</ArticleNumber>
  <CompanyId>00000000-0000-0000-0000-000000000000</CompanyId>
  <Quantity>0</Quantity>
</CreateVossUsage>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<CreateSubscriptionProductGroupResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/BokaMera.VossIntegration.ApiTools.Model">
  <created>0001-01-01T00:00:00</created>
  <customerBalanceChange i:nil="true" />
  <id>00000000-0000-0000-0000-000000000000</id>
  <name>String</name>
  <productGroupType>Optional</productGroupType>
  <products>
    <SubscriptionProductGroupProductResultDto i:nil="true" />
  </products>
  <status>Active</status>
  <termination i:nil="true" />
</CreateSubscriptionProductGroupResult>