BokaMera.API.Host

<back to all web services

CreateArticle

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin
The following routes are available for this service:
POST/articlesAdd new articleAdd article to the company for the currently logged in user
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum
Object = TypeVar('Object')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BaseModel:
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ArticleServiceRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    service_id: int = 0

    # @Required()
    article_id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ArticleResponse:
    company_id: Optional[str] = None
    id: int = 0
    name: Optional[str] = None
    article_type_id: int = 0
    description: Optional[str] = None
    image_url: Optional[str] = None
    active: bool = False
    amount: int = 0
    price: float = 0.0
    currency_id: Optional[str] = None
    sort_order: int = 0
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)
    duration: int = 0
    services: List[ArticleServiceRelation] = field(default_factory=list)
    service_ids: List[int] = field(default_factory=list)
    price_sign: Optional[str] = None
    vat: Optional[Decimal] = None
    valid_days: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateArticle:
    # @ApiMember(Description="")
    company_id: Optional[str] = None
    """
    
    """

    # @ApiMember(Description="", IsRequired=true)
    name: Optional[str] = None
    """
    
    """

    # @ApiMember(Description="", IsRequired=true)
    article_type_id: int = 0
    """
    
    """

    # @ApiMember(Description="", IsRequired=true)
    description: Optional[str] = None
    """
    
    """

    # @ApiMember(Description="")
    image_url: Optional[str] = None
    """
    
    """

    # @ApiMember(Description="", IsRequired=true)
    active: bool = False
    """
    
    """

    # @ApiMember(Description="", IsRequired=true)
    amount: int = 0
    """
    
    """

    # @ApiMember(Description="If the article is a service article, the duration in minutes.", IsRequired=true)
    duration: int = 0
    """
    If the article is a service article, the duration in minutes.
    """


    # @ApiMember(Description="SortOrder")
    sort_order: int = 0
    """
    SortOrder
    """


    # @ApiMember(Description="The price of the article.", IsRequired=true)
    price: float = 0.0
    """
    The price of the article.
    """


    # @ApiMember(Description="The payment currency id", IsRequired=true)
    currency_id: Optional[str] = None
    """
    The payment currency id
    """


    # @ApiMember(Description="The price VAT in percent")
    vat: Optional[Decimal] = None
    """
    The price VAT in percent
    """


    # @ApiMember(Description="Query for specific services.", ParameterType="query")
    service_ids: List[int] = field(default_factory=list)
    """
    Query for specific services.
    """


    # @ApiMember(Description="Number of days the article is valid from the purchase date. Used to calculate ValidToDate on rebate codes, punch tickets, and gift cards.")
    valid_days: int = 0
    """
    Number of days the article is valid from the purchase date. Used to calculate ValidToDate on rebate codes, punch tickets, and gift cards.
    """

Python CreateArticle DTOs

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

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /articles HTTP/1.1 
Host: testapi.bokamera.se 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	CompanyId: 00000000-0000-0000-0000-000000000000,
	Name: String,
	ArticleTypeId: 0,
	Description: String,
	Active: False,
	Amount: 0,
	Duration: 0,
	SortOrder: 0,
	Price: 0,
	CurrencyId: String,
	VAT: 0,
	ServiceIds: 
	[
		0
	],
	ValidDays: 0
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	Id: 0,
	Name: String,
	ArticleTypeId: 0,
	Description: String,
	ImageUrl: String,
	Active: False,
	Amount: 0,
	Price: 0,
	CurrencyId: String,
	SortOrder: 0,
	Duration: 0,
	Services: 
	[
		{
			Id: 0,
			ServiceId: 0,
			ArticleId: 0
		}
	],
	ServiceIds: 
	[
		0
	],
	PriceSign: String,
	VAT: 0,
	ValidDays: 0
}