Akinon Release Notes (05/12/2025) are now live! Click here to learn what's new.
LogoLogo
API Reference
  • Home
  • Quick Start
  • Tutorials
  • Technical Guides
  • Release Notes
  • Glossary
  • Welcome to Akinon Technical Guides
  • ACC
    • ACC CLI
    • Create Application via CLI
    • Deploy Environment Variables
    • App Store for Developers
  • Omnitron
    • Product Types
    • Product Categorization
    • Splitting a Merged Order Item
  • Commerce
    • Shipping Rules Calculator
    • Data Source Shipping Options
    • Attribute Based Shipping Options
    • Filtering Products
    • Conversation & Messages
    • Sitemap Configuration
    • Weight-Based Product Sales
    • Group Attribute Sets
    • Contract Management
    • Find in Store for Whippy Ware
    • Plugins
    • Remote Price
    • E-mail Templates
    • Loyalty Accounts
    • Search Structure
    • User Segmentation & Rules
    • Promotions
  • OMS
    • Getting Started with OMS
    • Basic Setup
    • Scenarios
    • Capacity Feature
    • Package Management
      • Packages
      • Transfer
      • States
    • Commands
      • Packages
        • Package Command Parameters
        • DeAllocate Package Reservations Command
        • Channel Based Complete Packaging without Shipment Command
        • Complete Packaging with Shipment Command
        • Complete Packaging without Shipment Command
        • Package Refuse with Denial Reason Command
        • Product Not Found & Wrong Product Command
        • Product Not Found & Wrong Product Command Advanced
        • Package Packed for Refund Command
        • Block The Package For Action Command
        • Unblock the Package For Action Command
        • Update The Package’s Invoice
        • Manual Planning Command
      • Transfer
        • Transfer Order Advanced Command
        • Product for Transfer Not Found & Wrong Product Command
        • Transfer Delivered Command
        • Transfer Dispatch Command
        • Transfer Ready for Dispatch Command
        • Transfer Out Of Stock
      • Shipment
        • Shipment Order Command
        • Package Advanced Shipment Command
        • Ship The Package Command
        • Ship The Package without Shipment Integration Command
        • Update The Package’s Shipment Status Command
        • Update Shipment Info of Package Command
    • Inventory Locations & Engine
      • Properties & Domain Relation
      • Customization
      • Inventory Engine
    • Fulfillment
      • Shipments
      • Invoice Integration
    • Webhooks
      • Webhook Examples
        • Order Webhook
        • Package Webhook
        • Shipment Webhook
        • Stock Location Webhook
        • Transfer Webhook
    • Integrating OMS with Seller Center
  • Instore
    • Getting Started
    • Cash Register Integration
    • OTP (One Time Password) Process
    • Services
      • Password Reset Services
  • Marketplace Dashboard
    • N11 Marketplace Setup Configurations
    • Trendyol Marketplace Setup Configurations
    • Walmart Marketplace Setup Configurations
    • Amazon Marketplace Setup Configurations
    • Hepsiburada Marketplace Setup Configurations
  • Project Zero
    • Django
      • Basic Setup
      • Project Structure
        • Templates & Components
        • Private Dependencies
        • Omnife Project Submodule
        • Webpack
        • ESLint Rules
        • Bundles
        • Multilanguage & Translation
        • Environmental File
        • Custom Error Pages
        • Icon Font
      • Page Types
        • Static Pages & Flatpages
        • Account Page
          • Template Rendering in Account Pages
          • Forms & Validation
        • Basket Page
          • Redux Basket State
          • Basket Page - View
        • Checkout
          • Redux Checkout State
          • View & Template Rendering
          • Masking & Validation
      • Theming & Styling
      • Widgets
      • SEO Management
      • Extending Project Zero
    • Next.js
      • Basic Setup
      • Deployment
      • Static Assets
      • Plugins
      • Widgets
      • Icons
      • Localization
      • SEO Management
      • Advanced Usage
      • Data Fetching
        • Client
          • Account
          • Address
          • Basket
          • Checkout
          • Misc
          • Product
          • User
          • Wishlist
        • Server
          • Category
          • Flat Page
          • List
          • Menu
          • Product
          • SEO
          • Special Page
          • Widget
  • App Maker
    • Setup Your Environment
    • Plugin Quickstart
    • Create Project
    • Setup Existing Project
    • Deploy Project
    • Users and Roles
    • Add Public Key
    • App Maker CLI
    • Create App on Stores
      • Creating App on Apple App Store
      • Creating App on Google Play Store
    • Mobile App Framework
      • Configuration
      • Framework
      • Project Structure
        • Structure
        • Data Containers
        • Pages
      • Dependency Integration
        • Plugins
        • Akinon Plugin Adapter
  • Akifast
    • HPP
      • Getting Started
      • Authorization
      • Payment Session Creation
        • Key Points Before Creating a Payment Session
        • Creating Payment Session
        • Redirecting to the Payment Page
        • Errors Encountered During Payment Session Creation
      • Merchant Services
        • Shipping Query URL
        • Agreement Query URL
        • Other URLs
  • B2B
    • Getting Started
    • B2B Setup
  • Adds-on
    • Invoicer
      • Introduction
      • Invoice & Pay On Delivery Service
  • Channel App Template
    • Introduction
    • Installation and Usage
    • Development Steps
      • Folder Structure
      • Starting Step
      • Encoding the Sales Channel
        • Introduction
        • Setup
        • Products
        • Product Price
        • Product Stock
        • Product Image
        • Orders
        • Product Data
      • Adding a New Command to Akinon
      • Listening for External Requests
    • Architecture
      • Introduction
      • Integration
      • Services (Flows)
        • Introduction
        • Product Service
        • Price Service
        • Stock Service
        • Image Service
        • Order Service
  • Multi Regional Settings
    • Multi Regional Settings
Powered by GitBook

© 2025 Akinon. All rights reserved.

On this page
  • Example Request
  • Configuration Considerations

Was this helpful?

  1. Commerce

Weight-Based Product Sales

Weight-based sales is a feature used to sell products measured by weight in a more flexible and customer-friendly way. This sales model plays a critical role, especially in the trade of products measured by weight, such as food, construction materials, and chemical products. In weight-based sales, customers can purchase as much as they need in specified weight units, rather than buying a fixed quantity of a product.

For a product to be sold based on weight, specific attributes need to be defined. These attributes manage the sales process based on the product's weight and ensure that transactions are processed correctly according to the weight when added to the basket.

Additionally, attribute keys can be changed from the settings if needed.

The related attribute information is defined in the omnishop/products/conf.py file.

Flag
Default Key

BASKET_UNIT_VALUE_ATTRIBUTE

basket_unit_value

UNIT_STEP_VALUE_ATTRIBUTE

unit_step_value

UNIT_REFERENCE_VALUE_ATTRIBUTE

unit_reference_value

UNIT_PRODUCT_FLAG_ATTRIBUTE

is_unit_product

UNIT_MINIMUM_VALUE_ATTRIBUTE

unit_minimum_value

Below are the default values and explanations for these keys:

Default Key
Description

is_unit_product

This attribute indicates that the product is sold by weight. When creating this attribute in Omnitron, the Product Attribute Input Type should be set to Boolean. It takes True/False values. For the product to be sold by weight, this attribute must be set to True.

unit_minimum_value

This defines the minimum weight value that can be added to the basket. This value shows the minimum weight of the product that can be purchased in basket transactions. When creating this attribute in Omnitron, the Product Attribute Input Type should be set to Text and it takes an Integer value in grams. The default value is 0. For example, if the unit_minimum_value is set to 500, at least 500 grams of this product can be added to the basket.

unit_step_value

This attribute defines the weight increment frequency of the product. When creating this attribute in Omnitron, the Product Attribute Input Type should be set to Text, and it takes an Integer value in grams. For example, if the product.unit_step_value is set to 300: If the unit_minimum_value is not entered, requests can be made for values that are multiples of 300, such as 300, 600, 900, 1200. Requests for values like 200, 500, 700, 850, and 1000 will result in an error. If the unit_minimum_value is set to 500, requests can be made for values like 500, 800, 1100, 1400, which are obtained by adding multiples of 300 to 500. Requests for values like 200, 600, 750, 900, and 1000 will result in an error.

unit_reference_value

This defines the weight for which the set price is valid. When creating this attribute in Omnitron, the Product Attribute Input Type should be set to Text, and it takes an Integer value in grams. For example, if the unit_reference_value is set to 500 and the product price is set to 100 TL, then 500 grams of the product will be priced at 100 TL, and 1000 grams will be priced at 200 TL.

basket_unit_value

This attribute indicates the total weight of the product added to the basket in the basket item. It is sent in the request body.

Example Request

curl --location 'https://{commerce_url}/baskets/basket/' \
--header 'accept: application/json, text/plain, */*' \

--data '{
    "product": "product_id",
    "quantity": 1,
    "attributes": {
        "basket_unit_value": "basket_unit_value"
    }
}'

Configuration Considerations

1. When adding a weight-based product to the basket, the quantity value is always set to 1.

{
    "product": "product_id",
    "quantity": 1,
    "attributes": {
        "basket_unit_value": 1500
    }
}

If the quantity is set to more than 1 for weight-based products, the system will throw a serializer error and display the following error message:

ValidationError("This product can not be added more than 1.")

2. When the product is deducted from stock, the weight is converted into kilograms and rounded up to the nearest whole number. This rounded value is then deducted from the stock. For example:

1200 g → 1.2 kg → 2 (Stock will decrease by 2)
4000 g → 4 kg → 4 (Stock will decrease by 4)
900 g → 0.9 kg → 1 (Stock will decrease by 1)
4001 g → 4.001 kg → 5 (Stock will decrease by 5)

3. The product price is calculated as follows:

price = (basket_unit_value * product.price / unit_reference_value)

4. The appropriate stock information is calculated based on the weight intended to be added to the basket. This calculation uses the unit_minimum_value and unit_step_value values.

For example:

  • product.unit_minimum_value: 1000

  • product.unit_step_value: 300

If 1500 grams is desired, it will round down to 1300 grams; if 1200 grams is desired, it will round down to 1000 grams.

The omnishop.baskets.utils.find_appropriate_unit_amount function is used for this calculation.

5. To sell the product based on weight, during stock definition, the unit_type field should be set to kg instead of qty.

PreviousSitemap ConfigurationNextGroup Attribute Sets

Last updated 1 month ago

Was this helpful?