| 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. |
|---|
"use strict";
/** @typedef {'Optional'|'Included'} */
export var ProductGroupTypeEnum;
(function (ProductGroupTypeEnum) {
ProductGroupTypeEnum["Optional"] = "Optional"
ProductGroupTypeEnum["Included"] = "Included"
})(ProductGroupTypeEnum || (ProductGroupTypeEnum = {}));
/** @typedef {'Active'|'Terminated'} */
export var StatusEnum;
(function (StatusEnum) {
StatusEnum["Active"] = "Active"
StatusEnum["Terminated"] = "Terminated"
})(StatusEnum || (StatusEnum = {}));
export class SubscriptionProductGroupProductResultDto {
/** @param {{id?:string,name?:string,externalId?:string,articleNumber?:string}} [init] */
constructor(init) { Object.assign(this, init) }
/** @type {string} */
id;
/** @type {string} */
name;
/** @type {string} */
externalId;
/** @type {string} */
articleNumber;
}
/** @typedef {'AtSubscriptionBillingPeriodEnd'|'AtBindingPeriodEnd'|'Immediately'} */
export var TypeEnum;
(function (TypeEnum) {
TypeEnum["AtSubscriptionBillingPeriodEnd"] = "AtSubscriptionBillingPeriodEnd"
TypeEnum["AtBindingPeriodEnd"] = "AtBindingPeriodEnd"
TypeEnum["Immediately"] = "Immediately"
})(TypeEnum || (TypeEnum = {}));
/** @typedef {'Direct'|'Plan'|'CustomerExpiration'|'Update'|'Unpaid'} */
export var SourceEnum;
(function (SourceEnum) {
SourceEnum["Direct"] = "Direct"
SourceEnum["Plan"] = "Plan"
SourceEnum["CustomerExpiration"] = "CustomerExpiration"
SourceEnum["Update"] = "Update"
SourceEnum["Unpaid"] = "Unpaid"
})(SourceEnum || (SourceEnum = {}));
export class SubscriptionItemTerminationReasonDto {
/** @param {{reasonId?:string,reasonName?:string,reasonExternalId?:string,subReasonId?:string,subReasonName?:string,subReasonExternalId?:string,comment?:string}} [init] */
constructor(init) { Object.assign(this, init) }
/** @type {string} */
reasonId;
/** @type {string} */
reasonName;
/** @type {string} */
reasonExternalId;
/** @type {?string} */
subReasonId;
/** @type {string} */
subReasonName;
/** @type {string} */
subReasonExternalId;
/** @type {string} */
comment;
}
/** @typedef {'Prorate'|'Full'|'None'} */
export var SubscriptionBehaviourEnum;
(function (SubscriptionBehaviourEnum) {
SubscriptionBehaviourEnum["Prorate"] = "Prorate"
SubscriptionBehaviourEnum["Full"] = "Full"
SubscriptionBehaviourEnum["None"] = "None"
})(SubscriptionBehaviourEnum || (SubscriptionBehaviourEnum = {}));
/** @typedef {'Normal'|'Internal'} */
export var CreditKindEnum;
(function (CreditKindEnum) {
CreditKindEnum["Normal"] = "Normal"
CreditKindEnum["Internal"] = "Internal"
})(CreditKindEnum || (CreditKindEnum = {}));
export class CreditOptionsDto {
/** @param {{behaviour?:SubscriptionBehaviourEnum,creditKind?:CreditKindEnum,prorateTimeAnchor?:string}} [init] */
constructor(init) { Object.assign(this, init) }
/** @type {SubscriptionBehaviourEnum} */
behaviour;
/** @type {CreditKindEnum} */
creditKind;
/** @type {?string} */
prorateTimeAnchor;
}
export class SubscriptionItemTerminationDto {
/** @param {{type?:TypeEnum,source?:SourceEnum,scheduledDate?:string,reason?:SubscriptionItemTerminationReasonDto,creditOptions?:CreditOptionsDto}} [init] */
constructor(init) { Object.assign(this, init) }
/** @type {TypeEnum} */
type;
/** @type {SourceEnum} */
source;
/** @type {string} */
scheduledDate;
/** @type {SubscriptionItemTerminationReasonDto} */
reason;
/** @type {CreditOptionsDto} */
creditOptions;
}
/** @typedef {'Main'|'Addon'|'License'|'Usage'} */
export var ProductTypeEnum;
(function (ProductTypeEnum) {
ProductTypeEnum["Main"] = "Main"
ProductTypeEnum["Addon"] = "Addon"
ProductTypeEnum["License"] = "License"
ProductTypeEnum["Usage"] = "Usage"
})(ProductTypeEnum || (ProductTypeEnum = {}));
export class CustomerBalanceChangeItemDto {
/** @param {{type?:ProductTypeEnum,id?:string,name?:string,productGroupId?:string,productGroupName?:string,quantity?:number,amount?:number,discountAmount?:number,totalAmount?:number,invoiceRecipientCustomerId?:string}} [init] */
constructor(init) { Object.assign(this, init) }
/** @type {ProductTypeEnum} */
type;
/** @type {string} */
id;
/** @type {string} */
name;
/** @type {string} */
productGroupId;
/** @type {string} */
productGroupName;
/** @type {number} */
quantity;
/** @type {number} */
amount;
/** @type {number} */
discountAmount;
/** @type {number} */
totalAmount;
/** @type {string} */
invoiceRecipientCustomerId;
}
export class CustomerBalanceChangeDto {
/** @param {{items?:CustomerBalanceChangeItemDto[],totalAmount?:number,totalDiscountAmount?:number}} [init] */
constructor(init) { Object.assign(this, init) }
/** @type {CustomerBalanceChangeItemDto[]} */
items = [];
/** @type {number} */
totalAmount;
/** @type {number} */
totalDiscountAmount;
}
export class CreateSubscriptionProductGroupResult {
/** @param {{productGroupType?:ProductGroupTypeEnum,status?:StatusEnum,id?:string,name?:string,products?:SubscriptionProductGroupProductResultDto[],termination?:SubscriptionItemTerminationDto,created?:string,customerBalanceChange?:CustomerBalanceChangeDto}} [init] */
constructor(init) { Object.assign(this, init) }
/** @type {ProductGroupTypeEnum} */
productGroupType;
/** @type {StatusEnum} */
status;
/** @type {string} */
id;
/** @type {string} */
name;
/** @type {SubscriptionProductGroupProductResultDto[]} */
products = [];
/** @type {SubscriptionItemTerminationDto} */
termination;
/** @type {string} */
created;
/** @type {CustomerBalanceChangeDto} */
customerBalanceChange;
}
export class CreateVossUsage {
/** @param {{CompanyId?:string,ArticleNumber?:string,Quantity?:number}} [init] */
constructor(init) { Object.assign(this, init) }
/**
* @type {string}
* @description The company id */
CompanyId;
/**
* @type {string}
* @description Article number. Can be fetched from products */
ArticleNumber;
/**
* @type {number}
* @description Example: developer worked 6 hours */
Quantity;
}
JavaScript CreateVossUsage DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv
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/csv
Content-Type: text/csv
Content-Length: length
{"ArticleNumber":"String","Quantity":0}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length
{"productGroupType":"Optional","status":"Active","name":"String","products":[{}]}