Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/typings / microservices / orderManagement.ts
Size: Mime:
/**
 * @file @todo finish types
 * @see https://jira.skava.net/confluence/display/ESA/Easy+Reorder+API+Call
 */
import {
  FlagList,
} from '../index.base.d'
import {
  LabelValue,
  Value,
  TypeValue,  
  Identifier,
  NumberOrString,
} from './generic.d'
import {
  CartItemInfo,
  CartInfo,
  CartBuyInfo as BuyInfo,
  CartBuyInfo as SkuInfo,
  CartProduct as Product,
  CartProperties as Properties,
} from './cart'
import {
  // not sure if this  is the same
  AddressInfo as ShippingAddress,
  ShippingMethod,
} from './addressAndShipping'
import {
  UserInfo,  
} from './user'

type AddressIdentifier = Identifier

 /**
  * @todo  cross-check
  */
interface OrderUserInfo extends UserInfo {
  // @todo - payment
}



/** 
 * order details ============
 */
interface OrderProductCartInfo {
  /**
   * @lends id
   */
  orderitemid: Identifier
  
  totaltax: NumberOrString
  total: NumberOrString  
  discountonlytotal: NumberOrString  
  discounttotal: NumberOrString
  
  /** 
   * @todo add examples 
   */
  valueaddedtaxes: Array<LabelValue>
  surcharges: Array<TypeValue>

  shippingmethods: Array<ShippingMethod>
}


interface OrderProductItemInfo extends CartItemInfo {
  /**
   * @lends id
   */
  psvid: Identifier
  
  categoryids: Array<LabelValue>
  flags: FlagList

  cartinfo: CartInfo

  description: Array<Value>
  specifications: Array<LabelValue>

  /** 
   * String
   */
  isgiftcard: Boolean
  isgiftwrap: Boolean

  additionalinfo: Array<LabelValue>
}

interface OrderProductState {
  timings: Array<LabelValue>
  additionalinfo: Array<LabelValue>

  /** 
   * @todo @enum
   */
  locale: String
  
  // NumberOrString
  status: String
}

interface OrderInfo {
  /**
   * @lends id
   */
  orderid: Identifier
}
/** 
 * store locator?
 */
interface StoreInfo {
  /**
   * @lends id
   */
  identifier: Identifier
}

interface OrderProductProperties {
  buyinfo: BuyInfo
  cartinfo: OrderProductCartInfo
  iteminfo: OrderProductItemInfo
  state: OrderProductState
  math: Math

  orderinfo: OrderInfo
  
  /** 
   * in cart this is not real skuinfo
   */
  skuinfo: SkuInfo

  userinfo: Array<OrderUserInfo>
}

interface OrderProduct extends Product {
  // identifier: ID!
  name: String

  // @enum
  type: String

  properties: OrderProductProperties
}

type OrderProductList = Array<OrderProduct>
interface OrderChildrenProducts {
  products: OrderProductList
}

/** 
 * @see shipping
 */
interface OrderChildrenPropertiesItemInfo {
  /** 
   * @todo finish type example
   */
  shippingmessages: Array<LabelValue>
  additionalinfo: Array<LabelValue>
}

interface OrderChildrenProperties extends Properties {
  cartinfo: CartInfo
  state: OrderProductState
  iteminfo: OrderChildrenPropertiesItemInfo
  math: Math

  storeinfo: StoreInfo
  userinfo: Array<OrderUserInfo>
  orderinfo: OrderInfo
}


interface OrderPackages {
  children: OrderChildrenProducts
  properties: OrderChildrenProperties
}

type FulfilmentType = 'digital' | 'physical'

interface OrderProductsByFulfilmentType {
  physicalDeliveryProducts: Array<?OrderProduct>,
  digitalDeliveryProducts: Array<?OrderProduct>,
}
interface OrderProductGroup {
  products: Array<OrderProduct>,
  shippingAddress: ShippingAddress,

  // defaults
  // these two are different on digital...
  shippingMethod: ShippingMethod,
  fulfilmentType: FulfilmentType,
}
type ProductNameList = Array<string>
type AddressIdentifierList = Array<AddressIdentifier>

interface OrderDynamicState {
  // normal
  products: Array<OrderProduct>,
  // dynamic
  groupedProducts: Array<OrderProductGroup>,
  productsName: ProductNameList,
  totalItemCount: number,
}

declare function typeToAddressIdList(products: OrderProductList): AddressIdentifierList
declare function typeFromProductsToNameList(products: OrderProductList, limit: number): ProductNameList
declare function typeHasAddressId(product: OrderProduct): boolean
declare function typeFromProductToName(product: OrderProduct): string
declare function typeIsFulfilmentType(product: OrderProduct): boolean
declare function typeToIndexedDeliveryType(products: OrderProductList): OrderProductsByFulfilmentType

export {
  //
  typeToAddressIdList,
  typeFromProductsToNameList,
  typeHasAddressId,
  typeFromProductToName,
  typeIsFulfilmentType,
  typeToIndexedDeliveryType,
  OrderProductList,
  //
  OrderUserInfo,
  OrderProductCartInfo,
  OrderProductItemInfo,
  OrderProductState,
  OrderInfo,
  OrderProductProperties,
  OrderProduct,
  OrderChildrenProducts,
  OrderChildrenPropertiesItemInfo,
  StoreInfo,
  OrderChildrenProperties,
  OrderPackages,
}