# Tashqi tizimdan sotuv

> Sotuvni amalga oshirishning to'liq ssenariysi, shu jumladan chegirmalar, sertifikatlar va kechiktirilgan cheklar.

Asosiy yo’l — [birinchi sotuv](/uz/start/first-sale/) bo’limida.

## Chekka chegirma

```bash
curl -X POST 'https://api-admin.billz.ai/v2/order-manual-discount/SOTUV_ID' \
  -H 'Authorization: Bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Billz-Response-Channel: HTTP' \
  -d '{ "discount_unit": "PERCENTAGE", "discount_value": 10 }'
```

`discount_unit` `PERCENTAGE` yoki `CURRENCY` ni qabul qiladi. Majburiy bo’lmagan `product_id` maydoni chegirmani bitta pozitsiyaga qo’llaydi; busiz chegirma butun savatga qo’llaniladi.

Tarkib yoki chegirmalar o’zgargandan so’ng, dolzarb chekni sinxron `POST /v1/recalculate-order-bill/:order_id` qaytaradi.

> **Chekni qayta hisoblash va savatni qayta hisoblash — turli operatsiyalardir**
>
> To’lov tekshiradigan «savat qayta hisoblangan» belgisini faqat **savatni qayta hisoblash** o’rnatadi — uni `POST /v2/order-product/:order_id`, `POST /v2/order-manual-discount/:order_id` va `PUT /v2/order-customer-new/:order_id` ishga tushiradi. `recalculate-order-bill` summalarni qayta hisoblaydi. Qarang: [sotuvning hayotiy davri](/uz/concepts/sale-lifecycle/).

## Bir nechta usul bilan to’lash

```json
{
  "payments": [
    { "company_payment_type_id": "ID_NAQD PUL", "paid_amount": 100000 },
    { "company_payment_type_id": "ID_KARTA", "paid_amount": 900000 }
  ]
}
```

Mijozning bonuslarini yechib olish uchun `with_cashback` maydoni to’ldiriladi.

## Sovg’a sertifikatlari

1. Kartani topish: `GET /v1/gift-card/search` — sinxron
2. Sotuvga qo’shish: `PUT /v1/order-gift-card/:id` — **asinxron**
3. Olib tashlash: `POST /v1/order-gift-card-remove/:id` — **asinxron**
4. Sertifikat bilan to’lovni amalga oshirish: `POST /v2/order-payment/:order_id`

> **`:id` — sotuv ID si, `gift_card_id` — butun son**
>
> Sertifikat tanada butun son ko’rinishida ko’rsatiladi:
>
> ```json
> { "gift_card_id": 10472 }
> ```

## Kechiktirish va qaytarish

Kechiktirilgan chek — sotuvdagi mahsulotlarni band qilish usuli.

* Kechiktirish: `POST /v2/order/create_postpone` (asinxron) — tanada `order_id`, `time` va ixtiyoriy `comment`; `time` maydoni majburiy va qat’iy formatda (`2024-07-16 06:47:30`)
* Ishga qaytarish: `POST /v2/order/return-postpone` (asinxron)
* Pozitsiya miqdorini o’zgartirish: `POST /v2/order-product/:order_id`, `sold_measurement_value` maydoni; `0` qiymati pozitsiyani unga qo’lda belgilangan chegirma bilan birga **o’chiradi**

## Ro’yxatlar va tafsilotlar

| Vazifa                                    | Metod                                                                                                                                        |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Davr uchun sotuvlar                       | `GET /v1/general-report-table` va `GET /v1/transaction-report-table` hisobotlari — [sotuvlar yuklanmasini](/uz/guides/sales-export/) ko’ring |
| Bitta sotuv tafsilotlari                  | `GET /v2/order/:id`                                                                                                                          |
| Qoralamalar va kechiktirilganlar ro’yxati | `GET /v2/order-notes`                                                                                                                        |

## Sarlavhalar

Chek tarkibini, mijozni va chegirmalarni o’zgartiruvchi metodlar asinxrondir. Ular uchun `Billz-Response-Channel: HTTP` talab qilinadi, aks holda faqat `correlation_id` keladi. `POST /v2/order-payment/:order_id` to’lovi va `POST /v1/recalculate-order-bill/:order_id` qayta hisob-kitobi sinxron bo’lib, ularga sarlavha kerak emas.

> **Javob kanali sarlavha yoki query-parametr orqali belgilanadi**
>
> `Billz-Response-Channel` sarlavhadan, agar u bo’lmasa, xuddi shu nomdagi query-parametrdan (`?Billz-Response-Channel=HTTP`) o’qiladi.
>
> Istisno — `POST /v2/order-product/:order_id`: u tanadagi `response_type: "HTTP"` maydonini ham qabul qiladi. Qolgan metodlarda bunday maydon yo’q.