Predračuni
Predračun je ponuda sa cenama koja dolazi pre porudžbine. Zamrzava cene korpe, rezerviše zalihe i dobija broj i poziv na broj za uplatu. Kupac ga plaća, vaš magacin potvrđuje šta može da isporuči, a vi ga pretvarate u porudžbinu. Predračun koji se ne plati na vreme ističe.
Životni ciklus#
Predračun se pravi od korpe kojoj je naplata izračunala cene, sa primenjenim promocijama i pogodnostima: od obračuna porudžbine, koji imenuje order_processing_id. Odatle prolazi kroz ove statuse:
| Status | Šta znači |
|---|---|
| draft | Napravljen. Cene su zamrznute, zalihe rezervisane, iznos se duguje. |
| awaiting_payment | Plaćanje karticom je u toku, na primer čeka se 3-D Secure. |
| paid | Uplaćeno pokriva ukupan iznos. Delimične uplate se sabiraju dok ga ne pokriju. |
| confirmed | Magacin je potvrdio svaku stavku u celosti. |
| partial_confirmed | Magacin je za neke stavke potvrdio manje. Cene predračuna su ponovo izračunate, a razlika vraćena. |
| converted | Pretvoren u porudžbinu. Konačno. |
| canceled | Otkazan; naplaćene uplate su vraćene, a zalihe oslobođene. Konačno. |
| expired | Nije završen na vreme pa je automatski otkazan, bez poruke kupcu. Konačno. |
Predračun traje 72 sata, osim ako je vaša aplikacija drugačije podešena; expires_at kaže do kada. Njegove stavke, cene, kupac i isporuka ne mogu da se menjaju: da biste ih promenili, otkažite predračun i napravite nov. Menjaju se samo oznake, komentar i upozorenja.
Predračun u listama#
Ono što GET /proforma_orders vraća za svaki predračun. Iznosi su brojevi u valuti predračuna.
| Polje | Opis |
|---|---|
| idinteger | Naš id predračuna. |
| proforma_numberstring | Njegov broj, na primer P-2026-7KQ2XD. Jedinstven u vašoj aplikaciji i nije redni. |
| proforma_status_id, proforma_status_name, proforma_status_color, proforma_status_final | Status. |
| processing_datedatetime | Kad su cene zamrznute. |
| expires_at, expires_in_seconds | Kad predračun ističe i koliko je još ostalo. |
| customer_id, customer_email, customer_first_name, customer_last_name | Kupac. anonymous je true za gosta. |
| sales, discount, net_sales, vat, end_salesnumber | Bruto, popust, neto, PDV i iznos za plaćanje. |
| paid, debtnumber | Šta je plaćeno i šta se još duguje. |
| market_id, currency_id, sales_channel_id, sales_channel | Gde je predračun napravljen. |
| warehouse_confirmed_at, converted_at, order_idmože biti null | Kad ga je magacin potvrdio, kad je pretvoren i porudžbina koja je od njega nastala. |
| canceled, canceled_at, cancel_reason | Da li je, kada i zašto otkazan. |
| tags, alerts_count, open_alerts_count | Vaše oznake, i koliko upozorenja ima i koliko ih je nerešeno. Upozorenje beleži nešto što traži čoveka, na primer povraćaj novca koji nije uspeo. |
| inserted_at, updated_atdatetime · ISO 8601, UTC | Kad je napravljen i poslednji put izmenjen. Šalje se bez pomaka. |
Lista predračuna#
Predračuni vaše aplikacije, stranicu po stranicu. Filtrima nalazite ono što traži radnju: predračune koji uskoro ističu, plaćene koji čekaju magacin, one sa otvorenim upozorenjima.
Parametri upita
| Parametar | Opis |
|---|---|
| statusstring | Naziv jednog statusa, ili više njih odvojenih zarezima: status=paid,confirmed. |
| expiring_withininteger | Otvoreni predračuni koji ističu za toliko sati. |
| has_alertsboolean | true: bar jedno nerešeno upozorenje. false: nijedno. |
| anonymousboolean | Samo predračuni gostiju, ili samo kupaca. |
| customer_idinteger | Predračuni jednog kupca. |
| date_from, date_todatum ili datum i vreme | Po processing_date, uključivo. Sam datum pokriva ceo dan. |
| orderBystring | expires_at, end_sales, paid, debt, customer_name, processing_date, inserted_at, updated_at, proforma_number ili status, po želji sa asc ili desc iza. |
| offset, limitinteger · podrazumevano 0, 30 | Stranice. Pogledajte Paginaciju i filtriranje. |
Vrednost filtera koju ne možemo da iskoristimo zanemaruje se umesto da se odbije.
Vraća
data: listu predračuna. GET /proforma_orders/stats umesto toga vraća brojeve za kontrolnu tablu: otvorene predračune i njihov zbir, one koji čekaju uplatu, one koji ističu za 24 sata, plaćene a nepretvorene, pretvorene u poslednjih 7 dana, i stopu pretvaranja između date_from i date_to (podrazumevano: poslednjih 30 dana).
curl -G "https://api.morffeus.com/api/v2/proforma_orders" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ -d "status=paid" -d "orderBy=expires_at"
{
"data": [
{
"id": 2207,
"proforma_number": "P-2026-7KQ2XD",
"proforma_status_name": "paid",
"proforma_status_final": false,
"processing_date": "2026-10-01T09:12:40",
"expires_at": "2026-10-04T09:12:40",
"expires_in_seconds": 203400,
"customer_id": 5521,
"end_sales": 5490.0,
"paid": 5490.0,
"debt": 0.0,
"order_id": null,
"open_alerts_count": 0,
…
}
]
}
Čitanje jednog predračuna#
Jedan predračun u celosti, u obliku porudžbine, pa isti kod može da čita oba.
Vraća
data: polja i iznose predračuna, plus:
itemsifee_items: stavke, svaka sa traženom količinom i, posle koraka u magacinu, potvrđenom količinom.payments: svaku uplatu saamount,payment_method,payment_status,payment_dateifinalized.payment_instructions: ono što traži uplata na račun: primalac i račun koje je vaša aplikacija podesila, iznos koji se još duguje i poziv na broj (model97).tax_brackets,transaction_reference,delivery_areaialertssa njihovim rešenjem.converted_order_numberkad je pretvoren.
Predračun koji nije u vašoj aplikaciji vraća 404 sa praznim telom.
{
"data": {
"id": 2207,
"proforma_number": "P-2026-7KQ2XD",
"proforma_status": "paid",
"order_processing_id": 88123,
"end_sales": 5490.0,
"paid": 5490.0,
"payments": [
{
"amount": 5490.0,
"payment_method": "Bank transfer",
"payment_status": "Captured",
"finalized": true,
…
}
],
"payment_instructions": { … },
"alerts": [],
…
}
}
Pravljenje predračuna#
Pretvara obračun porudžbine u predračun. Cene, promocije i pogodnosti obračuna se zamrzavaju, zalihe se rezervišu, a obračun se troši: od njega ne može da nastane drugi predračun ni porudžbina.
Parametri tela zahteva
| Parametar | Opis |
|---|---|
| order_processing_idobaveznointeger | Obračun porudžbine, iz naplate. Nije umotan u objekat. |
Vraća
201 i predračun u data, u obliku iz Čitanja jednog predračuna.
Greške
| Status | Kada |
|---|---|
| 422 | Obračun ne postoji ili je potrošen: API.OrderProcessings.StaleEvaluation. Pripada drugoj aplikaciji: API.ProformaOrders.WrongApp. Proizvod nema PDV: API.Products.MissingVat. Podaci gosta za isporuku nisu potpuni: API.Orders.GuestDeliveryDataIncomplete. Mesto preuzimanja nedostaje ili nije dostupno: API.ShipmentMethods.PickupPointRequired, API.ShipmentMethods.PickupPointUnavailable. Nema dovoljno zaliha: Insufficient stock for product: …. |
curl -X POST "https://api.morffeus.com/api/v2/proforma_orders" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "order_processing_id": 88123 }'
{
"errors": {
"OrderProcessings": ["API.OrderProcessings.StaleEvaluation"]
}
}
Uplata, potvrda, pretvaranje#
Tri koraka koja vode predračun napred. Svaki vraća predračun, a pretvaranje porudžbinu, i ne prolazi sa API.ProformaOrders.AlreadyFinal za predračun koji je pretvoren, otkazan ili istekao.
| Poziv | Opis |
|---|---|
| POST /proforma_orders/{id}/pay | Beleži uplatu. Telo: {"payment": {"payment_method_id": …, "amount": …}}. amount od 0 ili manje plaća ceo preostali dug. Koristite ga za uplate koje se odmah završe, kao gotovina ili uplata na račun koju ste primili; plaćanja karticom za koja treba pregledač kupca idu preko naplate u prodavnici. Kad uplate pokriju ukupan iznos, status postaje paid. |
| POST /proforma_orders/{id}/warehouse_confirm | Potvrđuje šta magacin može da isporuči. Telo: {"adjustments": [{"proforma_order_item_id": …, "qty_confirmed": …}]}. Stavke koje izostavite potvrđuju se u celosti. Kad se stavka smanji, cene predračuna se ponovo računaju sa promocijama koje je imao kad je napravljen, zalihe koje više ne trebaju se oslobađaju, preplaćena razlika se vraća, a status postaje partial_confirmed; inače confirmed. |
| POST /proforma_orders/{id}/convert | Pravi porudžbinu: njene stavke nose potvrđene količine, uplate prelaze na porudžbinu, a pogodnosti koje je kupac zaradio se knjiže. Zalihe ostaju rezervisane kao što su bile. Ponovni poziv vraća istu porudžbinu. Odgovor je zapis porudžbine u data. |
Greške
| Status | Kada |
|---|---|
| 404 | U vašoj aplikaciji nema takvog predračuna. Telo je prazno. |
| 422 | Predračun je konačan: API.ProformaOrders.AlreadyFinal. Način plaćanja nije podržan: API.PaymentMethod.NotSupported. Uplata je veća od duga, ili je dug već plaćen: Payment amount exceeds order debt, Order debt is already paid. Uplata gotovinom traži iznos: API.Payments.CashAmountRequired. |
Povraćaj novca koji ne uspe tokom koraka u magacinu ne obara poziv: dodaje se u alerts predračuna da ga neko proveri.
curl -X POST "https://api.morffeus.com/api/v2/proforma_orders/2207/warehouse_confirm" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "adjustments": [ { "proforma_order_item_id": 9911, "qty_confirmed": 1 } ] }'
{
"errors": {
"ProformaOrders": ["API.ProformaOrders.AlreadyFinal"]
}
}
Oznake, komentar ili otkazivanje#
| Poziv | Opis |
|---|---|
| PUT /proforma_orders/{id}, PATCH | Menja jedine izmenljive delove. Telo: tags (lista stringova, koja zamenjuje staru), comment, i alerts koja treba rešiti, svako kao {"index": …, "resolved": true}. Oznake i komentar ne mogu da se menjaju na konačnom predračunu; upozorenja mogu uvek da se reše. Vraća predračun. |
| DELETE /proforma_orders/{id} | Otkazuje predračun: naplaćene uplate se vraćaju, zalihe i zadržane pogodnosti se oslobađaju, a status postaje canceled. Opciono telo: reason. Vraća 204 bez tela. |
Greške
| Status | Kada |
|---|---|
| 404 | U vašoj aplikaciji nema takvog predračuna. |
| 422 | Predračun je konačan: API.ProformaOrders.AlreadyFinal. Oznake ili komentar nisu ispravni: API.ProformaOrders.InvalidTags, API.ProformaOrders.InvalidComment. Upozorenje za rešavanje ne postoji: API.ProformaOrders.AlertNotFound, i ništa se ne upisuje. |
curl -X DELETE "https://api.morffeus.com/api/v2/proforma_orders/2207" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "reason": "Customer changed the order" }'
Povezano#
- Porudžbine: ono što predračun postaje.
- Naplata i plaćanje: kako kupac pravi i plaća predračun.
- Zalihe: predračun rezerviše zalihe dok se ne pretvori ili otkaže.