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.
"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 .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>