| Requires any of the roles: | bookingsupplier-administrator-write, superadmin |
| POST | /voss/usage | Add product to company invoicing | Add 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
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=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>