Bu sayfa src/cluster_erp/modules/procurement/purchase_orders/ içindeki purchase_orders alt modülünü ve ortak yardımcı src/cluster_erp/modules/procurement/delivery_address.py dosyasını anlatır. Bir satın alma siparişi (PurchaseOrder), bir tedarikçiye verilen sipariştir. Bir sipariş kaleminin kabulü, inventory modülünde EventBus üzerinden bir mal girişi işler.
Kapsam ve kaynak¶
- Tanımlandığı yer: alt modülün
models.py(PurchaseOrder,PurchaseOrderItem),services.py(PurchaseOrderService),routes.py,metadata.pyveitem_metadata.pydosyaları. - Sayım: 2 tablo, 18 uç (
routes.pyiçindeki@router.dekoratörleri), 6ActionMetagirdisi (5'i siparişte, 1'i kalemde).
Sipariş alanları¶
| Ad | Anlam | Kaynak |
|---|---|---|
po_no |
purchase_order yıllık dizisinden gelen iş anahtarı |
src/cluster_erp/modules/procurement/purchase_orders/models.py:31, src/cluster_erp/modules/procurement/purchase_orders/services.py:245 |
vendor_id, vendor_name_cache |
Tedarikçi taraf ve önbelleğe alınmış adı | src/cluster_erp/modules/procurement/purchase_orders/models.py:37-42 |
purchase_request_id, project_id |
Kaynak talep ve proje | src/cluster_erp/modules/procurement/purchase_orders/models.py:46-52 |
status |
Varsayılan draft |
src/cluster_erp/modules/procurement/purchase_orders/models.py:56-62 |
order_date, eta_date, actual_arrival_date |
Tarihler | src/cluster_erp/modules/procurement/purchase_orders/models.py:63-71 |
currency, total_amount |
Para birimi ve toplam Numeric(19, 4) |
src/cluster_erp/modules/procurement/purchase_orders/models.py:75-82 |
incoterm, payment_terms |
Ticari koşullar | src/cluster_erp/modules/procurement/purchase_orders/models.py:85-89 |
delivery_party_id, delivery_address_id, delivery_address |
Yapılandırılmış teslimat adresi ve metin anlık görüntüsü | src/cluster_erp/modules/procurement/purchase_orders/models.py:97-107 |
sent_at, sent_by, acknowledged_at |
Yaşam döngüsü kaydı | src/cluster_erp/modules/procurement/purchase_orders/models.py:111-119 |
has_technical_attachment, cancel_reason, notes |
Gönderim kapısı bayrağı, neden, notlar | src/cluster_erp/modules/procurement/purchase_orders/models.py:123-133 |
Kalem alanları¶
| Ad | Anlam | Kaynak |
|---|---|---|
product_id, product_model_id, product_version_id, description |
Kırılımlı katalog kalemi ya da yalnızca açıklamalı metin kalemi | src/cluster_erp/modules/procurement/purchase_orders/models.py:159-174, src/cluster_erp/modules/procurement/purchase_orders/schemas.py:20-37 |
vendor_part_number |
Tedarikçinin parça numarası | src/cluster_erp/modules/procurement/purchase_orders/models.py:175 |
qty_ordered, qty_received, qty_rejected |
Miktarlar Numeric(14, 4) |
src/cluster_erp/modules/procurement/purchase_orders/models.py:179-190 |
unit_price, line_total, unit_id |
Fiyat Numeric(18, 4), toplam Numeric(19, 4), birim |
src/cluster_erp/modules/procurement/purchase_orders/models.py:195-203 |
expected_date, actual_received_date, batch_id, heat_lot_id |
Kabul verileri | src/cluster_erp/modules/procurement/purchase_orders/models.py:207-219 |
status |
Varsayılan open; sonra partial veya received |
src/cluster_erp/modules/procurement/purchase_orders/models.py:223-228, src/cluster_erp/modules/procurement/purchase_orders/services.py:759-762 |
Durumlar ve aksiyonlar¶
Servis şu geçişlere izin verir (src/cluster_erp/modules/procurement/purchase_orders/services.py:67-75):
stateDiagram-v2 [*] --> draft draft --> sent: send sent --> acknowledged: acknowledge acknowledged --> in_transit: in_transit acknowledged --> received: son kalem kabul edildi in_transit --> received: son kalem kabul edildi received --> in_transit: kabul geri alındı received --> closed: close draft --> cancelled: cancel sent --> cancelled: cancel acknowledged --> cancelled: cancel in_transit --> cancelled: cancel
Düz anlatımla: bir sipariş draft olarak başlar. send bir sipariş tarihi ve has_technical_attachment bayrağı ister (src/cluster_erp/modules/procurement/purchase_orders/services.py:620-641). Kabul acknowledged ve in_transit durumlarında yapılabilir; tüm canlı kalemler received olduğunda sipariş received olur (src/cluster_erp/modules/procurement/purchase_orders/services.py:705-774). Bir kabul geri alındığında received sipariş in_transit durumuna dönebilir (src/cluster_erp/modules/procurement/purchase_orders/services.py:854-891). close, received durumunu izler; cancel kabule kadar açıktır (src/cluster_erp/modules/procurement/purchase_orders/services.py:892-929).
| Aksiyon | Etiket | Koşul | Uç | İzin | Kaynak |
|---|---|---|---|---|---|
send |
Gönder | status değeri draft |
POST /purchase-orders/{id}/send |
purchase_order.send |
src/cluster_erp/modules/procurement/purchase_orders/metadata.py:92-108, src/cluster_erp/modules/procurement/purchase_orders/routes.py:201 |
acknowledge |
Onayla | status değeri sent |
POST /purchase-orders/{id}/acknowledge |
purchase_order.update |
src/cluster_erp/modules/procurement/purchase_orders/metadata.py:109-125, src/cluster_erp/modules/procurement/purchase_orders/routes.py:213 |
in_transit |
Yolda Olarak İşaretle | status değeri acknowledged |
POST /purchase-orders/{id}/in-transit |
purchase_order.update |
src/cluster_erp/modules/procurement/purchase_orders/metadata.py:126-143, src/cluster_erp/modules/procurement/purchase_orders/routes.py:225 |
close |
Kapat | status değeri received |
POST /purchase-orders/{id}/close |
purchase_order.update |
src/cluster_erp/modules/procurement/purchase_orders/metadata.py:144-158, src/cluster_erp/modules/procurement/purchase_orders/routes.py:269 |
cancel |
İptal Et | status değeri draft, sent, acknowledged veya in_transit |
POST /purchase-orders/{id}/cancel |
purchase_order.update |
src/cluster_erp/modules/procurement/purchase_orders/metadata.py:159-192, src/cluster_erp/modules/procurement/purchase_orders/routes.py:281 |
receive (kalem) |
Mal Kabul | kalem status değeri open veya partial |
POST /purchase-orders/items/{id}/receive |
purchase_order.receive |
src/cluster_erp/modules/procurement/purchase_orders/item_metadata.py:57-125, src/cluster_erp/modules/procurement/purchase_orders/routes.py:254 |
Sipariş uçları¶
| Yöntem ve yol | İzin | Kaynak |
|---|---|---|
GET /purchase-orders/, GET /purchase-orders/{po_id} |
purchase_order.read |
src/cluster_erp/modules/procurement/purchase_orders/routes.py:58, src/cluster_erp/modules/procurement/purchase_orders/routes.py:147 |
POST /purchase-orders/, POST /purchase-orders/from-pr/{pr_id} |
purchase_order.create |
src/cluster_erp/modules/procurement/purchase_orders/routes.py:98-110 |
GET /purchase-orders/receivable-lines |
purchase_order.read |
src/cluster_erp/modules/procurement/purchase_orders/routes.py:129 |
PUT /purchase-orders/{po_id} |
purchase_order.update |
src/cluster_erp/modules/procurement/purchase_orders/routes.py:161 |
DELETE /purchase-orders/{po_id}, POST /purchase-orders/bulk-delete |
purchase_order.delete, purchase_order.bulk_delete |
src/cluster_erp/modules/procurement/purchase_orders/routes.py:174-186 |
POST /purchase-orders/{po_id}/items/{item_id}/receive |
purchase_order.receive |
src/cluster_erp/modules/procurement/purchase_orders/routes.py:237 |
POST /purchase-orders/{po_id}/items, PUT ve DELETE /purchase-orders/{po_id}/items/{item_id} |
purchase_order.update |
src/cluster_erp/modules/procurement/purchase_orders/routes.py:297-331 |
Mal kabul¶
Diyagram tek bir kalemin kabulünü gösterir.
sequenceDiagram participant U as receive ucu participant S as PurchaseOrderService participant B as EventBus participant I as inventory U->>S: receive_item S->>S: durum, kırılım ve miktar denetimi S->>B: PoReceivedFull veya PoReceivedPartial yayar S->>B: PostGoodsReceipt sorgusu B->>I: _handle_post_goods_receipt I-->>S: hareket kimliği
Düz anlatımla: servis metin kalemini ve modeli ile versiyonu olmayan kalemi reddeder, çünkü stok kırılım başına işlenir (src/cluster_erp/modules/procurement/purchase_orders/services.py:718-731). Kabul edilen miktar sipariş miktarını aşamaz (src/cluster_erp/modules/procurement/purchase_orders/services.py:738-749). Servis kalem ve sipariş durumunu günceller, PoReceivedFull veya PoReceivedPartial yayar, ardından siparişi referans, kalem kimliğini ve siparişin projesini stok sahibi olarak vererek PostGoodsReceipt sorgular (src/cluster_erp/modules/procurement/purchase_orders/services.py:750-822). Envanterden gelen bir hata kabulü PO_GOODS_RECEIPT_FAILED ile başarısız kılar; envanter işleyicisi yoksa bu günlüğe yazılır ve kabul yalnızca bir satın alma kaydı olarak kalır (src/cluster_erp/modules/procurement/purchase_orders/services.py:823-837). İptal edilen bir mal hareketi açık miktarı ReconcilePoReceiptReversal sorgusuyla geri verir (src/cluster_erp/modules/procurement/module.py:192-202, src/cluster_erp/modules/procurement/module.py:885-916).
Kısıtlar ve doğrulama¶
- Oluşturmada tedarikçi
GetPartyByIdile okunur; kara listedeki tedarikçi reddedilir (src/cluster_erp/modules/procurement/purchase_orders/services.py:215-243). - Her katalog kaleminin kırılımı
ensure_product_breakdownile denetlenir (src/cluster_erp/modules/procurement/purchase_orders/services.py:279,src/cluster_erp/modules/procurement/purchase_orders/services.py:507). - Birim fiyat dört basamağa, kalem toplamı sütun ölçeğine, ikisi de
ROUND_HALF_EVENile yuvarlanır; başlık toplamı bunların toplamıdır (src/cluster_erp/modules/procurement/purchase_orders/services.py:112-123,src/cluster_erp/modules/procurement/purchase_orders/services.py:307-312). - Başlık ve kalemler yalnızca
draftdurumunda değişir; yalnızca taslak silinebilir (src/cluster_erp/modules/procurement/purchase_orders/services.py:415-468). - Teslimat adresi, teslimat tarafının bir sevkiyat adresi olmalıdır; metni anlık görüntü olarak saklanır (
src/cluster_erp/modules/procurement/delivery_address.py:24-28,src/cluster_erp/modules/procurement/delivery_address.py:78,src/cluster_erp/modules/procurement/purchase_orders/services.py:251). - Olaylar:
PoCreated,PoSent,PoAcknowledged,PoReceivedFull,PoReceivedPartial,PoCancelled(src/cluster_erp/modules/procurement/purchase_orders/services.py:338,src/cluster_erp/modules/procurement/purchase_orders/services.py:648,src/cluster_erp/modules/procurement/purchase_orders/services.py:672,src/cluster_erp/modules/procurement/purchase_orders/services.py:779-797,src/cluster_erp/modules/procurement/purchase_orders/services.py:921).
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| purchase order | PurchaseOrder |
Bir tedarikçiye verilen sipariş. | Satın alma siparişi | src/cluster_erp/modules/procurement/purchase_orders/models.py:24 |
| text item | product_id olmayan PurchaseOrderItem |
Açıklaması olan, ürünü olmayan sipariş kalemi; mal kabulü yapılmaz. | Metin kalemi | src/cluster_erp/modules/procurement/purchase_orders/services.py:718-724 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.