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.

export enum ProductGroupTypeEnum
{
    Optional = 'Optional',
    Included = 'Included',
}

export enum StatusEnum
{
    Active = 'Active',
    Terminated = 'Terminated',
}

// @DataContract(Name="SubscriptionProductGroupProductResultDto")
export class SubscriptionProductGroupProductResultDto
{
    // @DataMember(Name="id", IsRequired=true)
    public id: string;

    // @DataMember(Name="name", IsRequired=true)
    public name: string;

    // @DataMember(Name="externalId")
    public externalId: string;

    // @DataMember(Name="articleNumber", IsRequired=true)
    public articleNumber: string;

    public constructor(init?: Partial<SubscriptionProductGroupProductResultDto>) { (Object as any).assign(this, init); }
}

export enum TypeEnum
{
    AtSubscriptionBillingPeriodEnd = 'AtSubscriptionBillingPeriodEnd',
    AtBindingPeriodEnd = 'AtBindingPeriodEnd',
    Immediately = 'Immediately',
}

export enum SourceEnum
{
    Direct = 'Direct',
    Plan = 'Plan',
    CustomerExpiration = 'CustomerExpiration',
    Update = 'Update',
    Unpaid = 'Unpaid',
}

// @DataContract(Name="SubscriptionItemTerminationReasonDto")
export class SubscriptionItemTerminationReasonDto
{
    // @DataMember(Name="reasonId", IsRequired=true)
    public reasonId: string;

    // @DataMember(Name="reasonName", IsRequired=true)
    public reasonName: string;

    // @DataMember(Name="reasonExternalId")
    public reasonExternalId: string;

    // @DataMember(Name="subReasonId")
    public subReasonId?: string;

    // @DataMember(Name="subReasonName")
    public subReasonName: string;

    // @DataMember(Name="subReasonExternalId")
    public subReasonExternalId: string;

    // @DataMember(Name="comment", IsRequired=true)
    public comment: string;

    public constructor(init?: Partial<SubscriptionItemTerminationReasonDto>) { (Object as any).assign(this, init); }
}

export enum SubscriptionBehaviourEnum
{
    Prorate = 'Prorate',
    Full = 'Full',
    None = 'None',
}

export enum CreditKindEnum
{
    Normal = 'Normal',
    Internal = 'Internal',
}

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

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

    // @DataMember(Name="prorateTimeAnchor")
    public prorateTimeAnchor?: string;

    public constructor(init?: Partial<CreditOptionsDto>) { (Object as any).assign(this, init); }
}

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

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

    // @DataMember(Name="scheduledDate", IsRequired=true)
    public scheduledDate: string;

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

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

    public constructor(init?: Partial<SubscriptionItemTerminationDto>) { (Object as any).assign(this, init); }
}

export enum ProductTypeEnum
{
    Main = 'Main',
    Addon = 'Addon',
    License = 'License',
    Usage = 'Usage',
}

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

    // @DataMember(Name="id", IsRequired=true)
    public id: string;

    // @DataMember(Name="name", IsRequired=true)
    public name: string;

    // @DataMember(Name="productGroupId", IsRequired=true)
    public productGroupId: string;

    // @DataMember(Name="productGroupName", IsRequired=true)
    public productGroupName: string;

    // @DataMember(Name="quantity", IsRequired=true)
    public quantity: number;

    // @DataMember(Name="amount", IsRequired=true)
    public amount: number;

    // @DataMember(Name="discountAmount", IsRequired=true)
    public discountAmount: number;

    // @DataMember(Name="totalAmount", EmitDefaultValue=false)
    public totalAmount: number;

    // @DataMember(Name="invoiceRecipientCustomerId", IsRequired=true)
    public invoiceRecipientCustomerId: string;

    public constructor(init?: Partial<CustomerBalanceChangeItemDto>) { (Object as any).assign(this, init); }
}

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

    // @DataMember(Name="totalAmount", EmitDefaultValue=false)
    public totalAmount: number;

    // @DataMember(Name="totalDiscountAmount", EmitDefaultValue=false)
    public totalDiscountAmount: number;

    public constructor(init?: Partial<CustomerBalanceChangeDto>) { (Object as any).assign(this, init); }
}

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

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

    // @DataMember(Name="id", IsRequired=true)
    public id: string;

    // @DataMember(Name="name", IsRequired=true)
    public name: string;

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

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

    // @DataMember(Name="created", IsRequired=true)
    public created: string;

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

    public constructor(init?: Partial<CreateSubscriptionProductGroupResult>) { (Object as any).assign(this, init); }
}

// @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
export class CreateVossUsage
{
    /** @description The company id */
    // @ApiMember(Description="The company id", IsRequired=true)
    public CompanyId: string;

    /** @description Article number. Can be fetched from products */
    // @ApiMember(Description="Article number. Can be fetched from products", IsRequired=true)
    public ArticleNumber: string;

    /** @description Example: developer worked 6 hours */
    // @ApiMember(Description="Example: developer worked 6 hours", IsRequired=true)
    public Quantity: number;

    public constructor(init?: Partial<CreateVossUsage>) { (Object as any).assign(this, init); }
}

TypeScript CreateVossUsage DTOs

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

To embed the response in a jsonp callback, append ?callback=myCallback

HTTP + JSON

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/json
Content-Type: application/json
Content-Length: length

{"ArticleNumber":"String","Quantity":0}
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: length

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