462 lines
31 KiB
Markdown
462 lines
31 KiB
Markdown
# Satınalma (`App.Prc`)
|
||
|
||
> Menünün altındaki her dal bu dosyada bir bölümdür (`module-doc:section`); dosya ve bölümler ilk deploy'da otomatik açılır. `module-doc:todo` işaretli alt bölümleri modülü üreten kişi ya da AI doldurur (`lowcode.instructions.md` §0.13); MCP ile üretimde talep bu bölümler doldurulmadan Testing'e alınamaz. "Ek — Ekran envanteri" bölümü wizard dosyalarından üretilir, elle düzenlenmez.
|
||
|
||
<!-- module-doc:section App.Prc.Definitions -->
|
||
## Tanımlamalar (`App.Prc.Definitions`)
|
||
|
||
### 1. Amaç ve kapsam
|
||
|
||
Satınalma belgelerinde kullanılacak ödeme koşulu, ödeme yöntemi, teslimat koşulu (Incoterm) ve teslim yöntemi tanımları. Kullanıcılar satınalma ve muhasebe personelidir. Satınalma talebi, teklif, sipariş ve fatura belgeleri bu modülün kapsamında değildir; bu ekranlar onların lookup kaynağıdır.
|
||
|
||
Tedarikçi kartı (eski `App.Prc.Supplier`) satış ve satınalmanın ortak kartı olarak **Kontaklar** adıyla Yönetim › Tanımlamalar'a taşındı; ayrıntı [Administration › Tanımlamalar](<App.Administration.md>). Kontak kartının Satış ve Satınalma sekmeleri bu modülün tanımlarını lookup olarak kullanır.
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
- Modül kodu `Prc`, tablo öneki `Prc_T_`; ekranlar Satınalma › Tanımlamalar altında.
|
||
- Kart, etiket, ilgili kişi ve banka hesabı ekranları Satış tarafı da kullanacağı için `Adm` modülüne (`Adm_T_Contact*`, `App.Definitions.Contact*`) taşındı; bu modülde yalnızca satınalma koşulu tanımları kaldı.
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
Satınalma (`App.Prc`) › Tanımlamalar (`App.Prc.Definitions`):
|
||
|
||
| Ekran | Kod | Not |
|
||
| --- | --- | --- |
|
||
| Ödeme Koşulları | `App.Prc.PaymentTerm` | tanım, demo veri |
|
||
| Ödeme Yöntemleri | `App.Prc.PaymentMethod` | tanım, demo veri |
|
||
| Teslimat Koşulları | `App.Prc.Incoterm` | tanım, demo veri |
|
||
| Teslim Yöntemleri | `App.Prc.DeliveryMethod` | tanım, demo veri |
|
||
|
||
### 4. Veri modeli
|
||
|
||
Tüm tablolar kiracı (`TenantId`) + tam audit + soft delete taşır.
|
||
|
||
- `Prc_T_PaymentTerm` (Name, DueDays, Description, IsActive)
|
||
- `Prc_T_PaymentMethod` (Name, Journal, IsActive)
|
||
- `Prc_T_Incoterm` (Code, Name, IsActive)
|
||
- `Prc_T_DeliveryMethod` (Name, IsActive)
|
||
|
||
### 5. İş kuralları ve hesaplar
|
||
|
||
- Tanım lookup'ları yalnızca `IsActive = 1` ve silinmemiş kayıtları listeler; kullanılan tanım silinmek yerine pasife alınır.
|
||
- Ödeme koşulu `DueDays` vade gününü tutar; ay sonu kuralları açıklamada yazılıdır, otomatik vade hesabı yoktur.
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
Yetki ağacı: `App.Prc` › `App.Prc.Definitions` › her ekran (+ Create/Update/Delete/Export/Import/Note). Tüm ekranlar kiracı kapsamlıdır, şube filtresi yoktur. Widget'lar: her ekranda Toplam · Aktif · Pasif.
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
Yok. Tanımlar Yönetim › Tanımlamalar › Kontaklar'ın Satış ve Satınalma sekmelerinde (`App.Definitions.ContactSales`, `App.Definitions.ContactPurchasing`) seçilir.
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. Satınalma › Tanımlamalar › Ödeme Koşulları'nda "30 Gün" aktif durur.
|
||
2. Yönetim › Tanımlamalar › Kontaklar'da "Acme Corporation" açılır; Satınalma sekmesinde Düzenle ile Ödeme Koşulu = 30 Gün seçilip kaydedilir.
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
- **Tedarikçiler ekranı nerede?** Yönetim › Tanımlamalar › Kontaklar; müşteri ve tedarikçi aynı karttadır.
|
||
- **Pasife alınan tanım kartta görünüyor mu?** Var olan kayıtta değer durur, yeni seçimde listelenmez.
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
- Tablolar: `sql/object/Prc_T_PaymentTerm.sql`, `Prc_T_PaymentMethod.sql`, `Prc_T_Incoterm.sql`, `Prc_T_DeliveryMethod.sql`.
|
||
- Wizard'lar: `Prc_PaymentTerm.json`, `Prc_PaymentMethod.json`, `Prc_Incoterm.json`, `Prc_DeliveryMethod.json`.
|
||
- Demo veri: `data/App.Prc.{PaymentTerm,PaymentMethod,Incoterm,DeliveryMethod}.json`.
|
||
- Geri alma: Kontak sekmeleri bu tanımlara bağlı olduğu için önce kontak tarafındaki seçimler temizlenir; ekranlar `delete_wizard` ile silinir, tablolar yalnızca açık onayla `dropTables: true` ile düşürülür.
|
||
|
||
<!-- module-doc:section App.Prc.MaterialRequests -->
|
||
## Malzeme Talepleri (`App.Prc.MaterialRequests`)
|
||
|
||
### 1. Amaç ve kapsam
|
||
|
||
Departmanların iç ve dış ihtiyaç duydukları malzemeleri satınalmaya iletmesi. Talep eden personel talebi ve satırlarını girer, onaya gönderir; talep önce talep edenin departman onaycısına, sonra satınalmaya düşer. Onaylanan talep Tüm Talepler listesinde satınalma ekibinin işine düşer; teklif toplama süreci buradan başlar. Teklif, sipariş, transfer ve stok miktarı bu dalın kapsamında değildir.
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
- Wizard List ekranları + menüsüz satır alt formu + Grid Workflow. Taleplerim ve iki onay listesi aynı tabloyu (`Prc_T_MaterialRequest`) filtreyle gösterir; Tüm Talepler başlık × kalem görünümünden (`Prc_V_MaterialRequestLine`) okur, her kalem bir satırdır.
|
||
- Belge no numaratörden: `MaterialRequest` (MT-YYYY-00001, yıllık sıfırlanır). Şirket alanı açılmadı (kiracı kapsamı).
|
||
- Departman onaycısı: `Adm_T_Approver`'da Onay Yeri = Satınalma (`Purchase`) ve talebin departmanı. Satınalma onaycısı Onaycılar'da tanımlanmaz: Satınalma Onayı Bekleyenler ekranında karar verebilen, yani `App.Prc.MaterialRequestPurchaseApproval.Update` yetkisi doğrudan ya da rolüyle verilmiş aktif kullanıcılardır (satınalma ekibinin rolüne bu yetki verilir). Herhangi bir onaycının onayı yeterli.
|
||
- Taslak aşaması: kayıt Taslak açılır; akış platformun Onaya Gönder işlemiyle başlar (`WorkflowDto.ApprovalIsManualStart: true` — yoksa yeni kayıt akışı kendiliğinden başlatır ve satır girilemez).
|
||
- Görseldeki "Kendi Depomda" ve "Tüm Depolar" stok kolonları üretilmedi: uygulamada stok miktarı/hareket tablosu yok; stok modülü gelince ayrı talep.
|
||
- Karşılama Şekli: Satınalma / Depodan Transfer.
|
||
- İş akışı kolonları tablo tasarımcısının Workflow şablonundaki dörtlüdür: `ApprovalUserName` nvarchar(256) (onaycı kullanıcı adları), `ApprovalStatus` nvarchar(50) (bulunulan düğümün başlığı), `ApprovalDate` datetime, `ApprovalDescription` nvarchar(200); dört ekranın `WorkflowDto`'su bunlara bağlıdır. Departman ve satınalma kararları ayrı kolonda tutulmaz; her karar (karar veren, açıklama, red nedeni) iş akışı notlarına yazılır.
|
||
- Onay ve red bilgileri popup düzenleme formunda yer almaz (iş akışı yazar); listede kolon olarak görünür.
|
||
- Red nedeni ayrı kolonda tutulmaz: onay düğümleri red sırasında Red Nedenleri listesinden (`Prc_T_RejectReason`, zorunlu) seçim ister; seçilen neden ve not `ApprovalDescription`'a ve iş akışı notuna yazılır.
|
||
- Satır tablosu `Prc_T_MaterialRequestItem` adıyla açıldı (birim kolonu `Adm_T_Uom.Id` ile aynı tipte, nvarchar). İlk açılan `Prc_T_MaterialRequestLine` scripti (UomId uniqueidentifier) kullanılmıyor.
|
||
- Talebin durumu yalnız iş akışından gelir: `ApprovalStatus` boş (taslak) › Departman Onayı › Satınalma Onayı › Onaylandı ya da Reddedildi. Ayrı `Status` kolonu yoktur; karşılama satır durumundan (Bekliyor / Tamamlandı / İptal) izlenir.
|
||
- Planlama aşaması kaldırıldı (Planlama Bekleyenler listesi, satırdaki Planlandı durumu ve Planlanacak Miktar).
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
Satınalma (`App.Prc`) › Malzeme Talepleri (`App.Prc.MaterialRequests`):
|
||
|
||
| Ekran | Kod | Filtre / not |
|
||
| --- | --- | --- |
|
||
| Taleplerim | `App.Prc.MyMaterialRequest` | talep eden = oturumdaki kullanıcı; ekle/sil açık, akış |
|
||
| Departman Onayı Bekleyenler | `App.Prc.MaterialRequestDeptApproval` | ApprovalStatus = Departman Onayı; yalnız kendine düşenler |
|
||
| Satınalma Onayı Bekleyenler | `App.Prc.MaterialRequestPurchaseApproval` | ApprovalStatus = Satınalma Onayı; yalnız kendine düşenler |
|
||
| Tüm Talepler | `App.Prc.MaterialRequest` | filtresiz, kalem kalem; ekle/sil kapalı, yalnız kalemin sorumlusu ve durumu düzenlenir, akış yok |
|
||
|
||
Talep Satırları (`App.Prc.MaterialRequestLine`) menüsüz alt formdur; Taleplerim ve iki onay listesinde sekmedir (Tüm Talepler kalemleri kolon olarak gösterir). Red Nedenleri (`App.Prc.RejectReason`) Satınalma › Tanımlamalar altındadır (bkz. Tanımlamalar).
|
||
|
||
### 4. Veri modeli
|
||
|
||
Tüm tablolar kiracı + tam audit + soft delete taşır.
|
||
|
||
- `Prc_T_MaterialRequest`: RequestNo, Priority (0–3), RequesterUserId, DepartmentId, WarehouseId, LocationId, RequestDate, Description, ApprovalUserName, ApprovalStatus, ApprovalDate, ApprovalDescription (iş akışı), DeptApproverUserNames / PurchaseApproverUserNames (`|` ayrılmış kullanıcı adları).
|
||
- `Prc_T_MaterialRequestItem`: MaterialRequestId (FK, cascade), ProductId, Quantity, UomId (nvarchar, `Adm_T_Uom`), FulfillmentMethod (Purchase / Transfer), DueDate, RequestReason, DeliveredQuantity, PurchaseResponsibleUserId, LineStatus (Waiting / Done / Cancelled).
|
||
- `Prc_T_RejectReason`: Name, SortOrder, IsActive.
|
||
- Görünüm `Prc_V_MaterialRequestLine`: talep başlığı LEFT JOIN silinmemiş kalemler; `Id` kalemin Id'si (kalemi olmayan talepte talebin Id'si), `MaterialRequestId` talep. Tüm Talepler'in kaynağıdır.
|
||
- Prosedür `Prc_P_MaterialRequestAfterSave(@Id)`.
|
||
|
||
### 5. İş kuralları ve hesaplar
|
||
|
||
- `Prc_P_MaterialRequestAfterSave` talep kaydı/güncellemesi sonrasında çalışır ve onaycı kullanıcı listelerini (`DeptApproverUserNames`, `PurchaseApproverUserNames`) Onaycılar'dan yeniden yazar. Onaycılar sonradan değişirse talep yeniden kaydedilene kadar liste eski kalır. İki liste formda ve listede gizlidir; iş akışı onaycıyı bu alanlardan okur (`@DeptApproverUserNames`, `@PurchaseApproverUserNames`).
|
||
- Onaya gönderilmiş talebe satır eklenemez ve satır silinemez (alt form Insert/Delete Before komutu). Onay sürecindeki ya da onaylanmış talep silinemez; reddedilen talep silinebilir.
|
||
- Ürün listesi yalnız aktif ve satın alınabilir ürünleri gösterir; birim ürünün satınalma biriminden (yoksa biriminden) kopyalanır, salt okunurdur.
|
||
- Depo değişince konum temizlenir; konum listesi depoya göre süzülür. Talep eden değişince departmanı kullanıcı kartından gelir; yeni kayıtta departman oturumdaki kullanıcının departmanıdır.
|
||
- Tüm Talepler'de düzenleme `UpdateCommand` ile yalnız `Prc_T_MaterialRequestItem`'ın `PurchaseResponsibleUserId` ve `LineStatus` kolonlarını yazar; başlık alanları salt okunurdur. Kartlar kalemi değil talebi sayar (tablodan okur).
|
||
- Onaycı listesi boşsa akış o adımda hata verir: Onaycılar'a ilgili departman için Satınalma satırı tanımlanmalı ve en az bir kullanıcıya (ya da rolüne) Satınalma Onayı Bekleyenler güncelleme yetkisi verilmelidir.
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
Yetki ağacı: `App.Prc` › `App.Prc.MaterialRequests` › her liste (+ Create/Update/Delete/Export/Import/Note); alt form `App.Prc.MaterialRequestLine` listenin altında. Talep edenlere Taleplerim (+Create, +Update), onaycılara ilgili onay listesi (+Update), satınalma ekibine Tüm Talepler verilir; satır alt formunun yetkisi de role verilmelidir. Onay listeleri yalnız kullanıcının onayına düşen kayıtları gösterir. Kiracı kapsamlı, şube filtresi yok.
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
Yönetim › Tanımlamalar › Onaycılar (onay yeri Satınalma); Yönetim › Roller (Satınalma Onayı Bekleyenler yetkisi); Envanter › Tanımlamalar › Ürünler, Depolar, Konumlar; İK departmanları; Yönetim › Tanımlamalar › Diziler (`MaterialRequest`). Akış e-posta bildirimi platformun iş akışı altyapısındadır. Teklif/sipariş modülüyle entegrasyon yok.
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. Onaycılar'da BT departmanı için Satınalma yerinde Ayşe tanımlıdır; Mehmet'in rolünde Satınalma Onayı Bekleyenler güncelleme yetkisi vardır.
|
||
2. BT'den Ali Taleplerim'de yeni talep açar (MT-2026-00001), depo/konum seçer, Talep Satırları'na 10 adet ürün, termin ve neden girer; Onaya Gönder der.
|
||
3. Ayşe Departman Onayı Bekleyenler'de talebi onaylar; talep Satınalma Onayı Bekleyenler'e geçer.
|
||
4. Mehmet onaylar; talep Onaylandı olur, Ali'ye bilgi gider.
|
||
5. Satınalma Tüm Talepler'de satıra sorumluyu atar ve satırı Tamamlandı yapar.
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
- **Talebim onay listesinde görünmüyor?** Onaycılar'da talebin departmanı için aktif Satınalma satırı olmalı; satınalma adımı için en az bir aktif kullanıcının (doğrudan ya da rolüyle) Satınalma Onayı Bekleyenler güncelleme yetkisi olmalıdır. Onaycılar ya da yetkiler talep açıldıktan sonra değiştiyse talebi bir kez kaydedin.
|
||
- **Onaya gönderdikten sonra satır ekleyebilir miyim?** Hayır; talep reddedilirse ya da akış başa dönerse yeniden düzenlenir.
|
||
- **Kendi Depomda / Tüm Depolar miktarları nerede?** Stok modülü geldiğinde eklenecek.
|
||
- **Red nedeni nereden seçilir?** Reddet düğmesinin açtığı karar penceresinde, Satınalma › Tanımlamalar › Red Nedenleri listesinden; neden ve not Onay Açıklaması kolonunda görünür.
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
- Tablolar: `sql/object/Prc_T_MaterialRequest.sql`, `Prc_T_MaterialRequestItem.sql`, `Prc_T_RejectReason.sql` (+ postgres eşleri); kullanılmayan `Prc_T_MaterialRequestLine.sql`.
|
||
- Görünüm: `sql/object/Prc_V_MaterialRequestLine.sql` (+ postgres).
|
||
- Prosedür: `sql/object/Prc_P_MaterialRequestAfterSave.sql` (+ postgres).
|
||
- Wizard'lar: `Prc_MaterialRequestLine.json`, `Prc_MyMaterialRequest.json`, `Prc_MaterialRequestDeptApproval.json`, `Prc_MaterialRequestPurchaseApproval.json`, `Prc_MaterialRequest.json`, `Prc_RejectReason.json`; güncellenen `Adm_Approver.json`.
|
||
- Numaratör: `App.Definitions.Sequence` › `MaterialRequest`.
|
||
- Geri alma: Wizard Manager'da talep bazlı silme (alt form en son değil, önce listeler); tablolar yalnız açık onayla düşürülür.
|
||
|
||
<!-- module-doc:auto:begin -->
|
||
## Ek — Ekran envanteri (otomatik)
|
||
|
||
> Wizard dosyalarından üretilir; deploy, silme, tasarımcı kaydı ve import'ta yenilenir. Elle düzenleme bir sonraki yenilemede kaybolur.
|
||
|
||
### Tanımlamalar (`App.Prc.Definitions`)
|
||
|
||
#### Ödeme Koşulları — `App.Prc.PaymentTerm`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_PaymentTerm.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Prc.Definitions` › `App.Prc.PaymentTerm` (sıra 1) |
|
||
| Yetki | `App.Prc.PaymentTerm` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ödeme Koşulları — tedarikçi kartlarında ve satınalma belgelerinde kullanılan vade tanımları (peşin, 15/30/45 gün, ay sonu, peşinat + bakiye). |
|
||
| Geliştirme talebi | Satınalma Modülü |
|
||
| Kaynak | `Prc_T_PaymentTerm` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Prc.PaymentTerm.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Ad | dxTextBox | ✓ | ✓ | |
|
||
| `DueDays` | Vade (Gün) | dxNumberBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
|
||
#### Ödeme Yöntemleri — `App.Prc.PaymentMethod`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_PaymentMethod.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Prc.Definitions` › `App.Prc.PaymentMethod` (sıra 2) |
|
||
| Yetki | `App.Prc.PaymentMethod` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ödeme Yöntemleri — tedarikçiye ödemenin nasıl yapılacağı (banka havalesi, çek, nakit kasa, NACHA). |
|
||
| Geliştirme talebi | Satınalma Modülü |
|
||
| Kaynak | `Prc_T_PaymentMethod` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Prc.PaymentMethod.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Ad | dxTextBox | ✓ | ✓ | |
|
||
| `Journal` | Yevmiye | dxTextBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Teslimat Koşulları — `App.Prc.Incoterm`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_Incoterm.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Prc.Definitions` › `App.Prc.Incoterm` (sıra 3) |
|
||
| Yetki | `App.Prc.Incoterm` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Teslimat Koşulları — taşıma, sigorta ve riskin kimde olduğunu belirleyen uluslararası teslim şekilleri (EXW, FCA, FAS, FOB, CFR, CIF, CPT, CIP). |
|
||
| Geliştirme talebi | Satınalma Modülü |
|
||
| Kaynak | `Prc_T_Incoterm` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Prc.Incoterm.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Code` | Kod | dxTextBox | ✓ | ✓ | |
|
||
| `Name` | Ad | dxTextBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Teslim Yöntemleri — `App.Prc.DeliveryMethod`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_DeliveryMethod.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Prc.Definitions` › `App.Prc.DeliveryMethod` (sıra 4) |
|
||
| Yetki | `App.Prc.DeliveryMethod` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Teslim Yöntemleri — malın nasıl teslim edileceği (yerel teslimat, kargo, kurye). |
|
||
| Geliştirme talebi | Satınalma Modülü |
|
||
| Kaynak | `Prc_T_DeliveryMethod` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Prc.DeliveryMethod.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Ad | dxTextBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Red Nedenleri — `App.Prc.RejectReason`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_RejectReason.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Prc.Definitions` › `App.Prc.RejectReason` (sıra 5) |
|
||
| Yetki | `App.Prc.RejectReason` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Red Nedenleri — satınalma taleplerinin reddedilme sebepleri (ihtiyaç yok, miktar uygun değil, yanlış ürün, bütçe uygun değil, diğer). |
|
||
| Geliştirme talebi | Satınalma -> Malzeme Talepleri |
|
||
| Kaynak | `Prc_T_RejectReason` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | SortOrder=0, IsActive=true |
|
||
| Veri aynası | `data/App.Prc.RejectReason.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Red Nedeni | dxTextBox | ✓ | ✓ | |
|
||
| `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
### Malzeme Talepleri (`App.Prc.MaterialRequests`)
|
||
|
||
#### Taleplerim — `App.Prc.MyMaterialRequest`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_MyMaterialRequest.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Prc.MaterialRequests` › `App.Prc.MyMaterialRequest` (sıra 1) |
|
||
| Yetki | `App.Prc.MyMaterialRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Taleplerim — açtığınız malzeme talepleri, tüm durumlarıyla. |
|
||
| Geliştirme talebi | Satınalma -> Malzeme Talepleri |
|
||
| Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "RequesterUserId" = '@USERID'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Prc.MaterialRequestLine` (Id → MaterialRequestId) |
|
||
| Widget'lar | `App.Prc.MaterialRequest.Widget.Mine`, `App.Prc.MaterialRequest.Widget.Pending`, `App.Prc.MaterialRequest.Widget.Approved`, `App.Prc.MaterialRequest.Widget.Rejected` |
|
||
| Komutlar | InsertAfter: `Prc_P_MaterialRequestAfterSave` · UpdateAfter: `Prc_P_MaterialRequestAfterSave` · DeleteBefore: SQL |
|
||
| Form varsayılanları | RequestNo=MaterialRequest1, RequesterUserId=@USERID, DepartmentId=, RequestDate=@NOW, Priority=0 |
|
||
| Onay akışı | Start 'Onaya Gönderildi' → Approval 'Departman Onayı' → Approval 'Satınalma Onayı' → End 'Onaylandı' → End 'Reddedildi' |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `RequestNo` | Talep No | dxTextBox | | ✓ | |
|
||
| `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | |
|
||
| `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
|
||
| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department |
|
||
| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse · script |
|
||
| `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location (← WarehouseId) |
|
||
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `Description` | Genel Açıklama | dxTextBox | | ✓ | |
|
||
| `ApprovalStatus` | Onay Durumu | dxTextBox | | | |
|
||
| `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | |
|
||
| `ApprovalDate` | Onay Tarihi | dxDateBox | | | |
|
||
| `ApprovalDescription` | Onay Açıklaması | dxTextBox | | | |
|
||
| `PurchaseApproverUserNames` | Satınalma Onaycıları | dxTextBox | | | |
|
||
| `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | |
|
||
|
||
#### Departman Onayı Bekleyenler — `App.Prc.MaterialRequestDeptApproval`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_MaterialRequestDeptApproval.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequestDeptApproval` (sıra 2) |
|
||
| Yetki | `App.Prc.MaterialRequestDeptApproval` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Departman Onayı Bekleyenler — departman onaycısının kararını bekleyen malzeme talepleri. |
|
||
| Geliştirme talebi | Satınalma -> Malzeme Talepleri |
|
||
| Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "ApprovalStatus" = N'Departman Onayı'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Prc.MaterialRequestLine` (Id → MaterialRequestId) |
|
||
| Widget'lar | `App.Prc.MaterialRequest.Status.DeptApproval`, `App.Prc.MaterialRequest.Status.PurchaseApproval`, `App.Prc.MaterialRequest.Status.Rejected` |
|
||
| Komutlar | UpdateAfter: `Prc_P_MaterialRequestAfterSave` |
|
||
| Form varsayılanları | Priority=0 |
|
||
| Onay akışı | Start 'Onaya Gönderildi' → Approval 'Departman Onayı' → Approval 'Satınalma Onayı' → End 'Onaylandı' → End 'Reddedildi' |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `RequestNo` | Talep No | dxTextBox | | ✓ | |
|
||
| `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | |
|
||
| `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department |
|
||
| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse |
|
||
| `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location |
|
||
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `Description` | Genel Açıklama | dxTextArea | | ✓ | |
|
||
| `ApprovalStatus` | Onay Durumu | dxTextBox | | | |
|
||
| `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | |
|
||
| `PurchaseApproverUserNames` | Satınalma Onaycıları | dxTextBox | | | |
|
||
| `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | |
|
||
| `ApprovalDate` | Onay Tarihi | dxDateBox | | | |
|
||
| `ApprovalDescription` | Onay Açıklaması | dxTextBox | | | |
|
||
|
||
#### Satınalma Onayı Bekleyenler — `App.Prc.MaterialRequestPurchaseApproval`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_MaterialRequestPurchaseApproval.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequestPurchaseApproval` (sıra 3) |
|
||
| Yetki | `App.Prc.MaterialRequestPurchaseApproval` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Satınalma Onayı Bekleyenler — departmanca onaylanmış ve satınalmanın kararını bekleyen malzeme talepleri. |
|
||
| Geliştirme talebi | Satınalma -> Malzeme Talepleri |
|
||
| Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "ApprovalStatus" = N'Satınalma Onayı'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Prc.MaterialRequestLine` (Id → MaterialRequestId) |
|
||
| Widget'lar | `App.Prc.MaterialRequest.Status.PurchaseApproval`, `App.Prc.MaterialRequest.Status.Approved`, `App.Prc.MaterialRequest.Status.Rejected` |
|
||
| Komutlar | UpdateAfter: `Prc_P_MaterialRequestAfterSave` |
|
||
| Form varsayılanları | Priority=0 |
|
||
| Onay akışı | Start 'Onaya Gönderildi' → Approval 'Departman Onayı' → Approval 'Satınalma Onayı' → End 'Onaylandı' → End 'Reddedildi' |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `RequestNo` | Talep No | dxTextBox | | ✓ | |
|
||
| `Priority` | Öncelik (0-3) | dxRating | ✓ | ✓ | |
|
||
| `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department |
|
||
| `WarehouseId` | Depo | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Warehouse |
|
||
| `LocationId` | Konum | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Location |
|
||
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `Description` | Genel Açıklama | dxTextArea | | ✓ | |
|
||
| `ApprovalStatus` | Onay Durumu | dxTextBox | | | |
|
||
| `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | |
|
||
| `PurchaseApproverUserNames` | Satınalma Onaycıları | dxTextBox | | | |
|
||
| `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | |
|
||
| `ApprovalDate` | Onay Tarihi | dxDateBox | | | |
|
||
| `ApprovalDescription` | Onay Açıklaması | dxTextBox | | | |
|
||
|
||
#### Tüm Talepler — `App.Prc.MaterialRequest`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_MaterialRequest.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequest` (sıra 5) |
|
||
| Yetki | `App.Prc.MaterialRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Tüm Talepler — kurumun bütün malzeme talepleri, tüm durumlarıyla, kalem kalem; satınalma yönetiminin listesi. |
|
||
| Geliştirme talebi | Satınalma -> Malzeme Talepleri |
|
||
| Kaynak | `Prc_V_MaterialRequestLine` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Prc.MaterialRequest.Status.DeptApproval`, `App.Prc.MaterialRequest.Status.PurchaseApproval`, `App.Prc.MaterialRequest.Status.Approved`, `App.Prc.MaterialRequest.Status.Rejected` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `RequestNo` | Talep No | dxTextBox | | | |
|
||
| `Priority` | Öncelik (0-3) | dxRating | ✓ | | |
|
||
| `RequesterUserId` | Talep Eden | dxSelectBox | ✓ | | sorgu: AbpUsers |
|
||
| `DepartmentId` | Departman | dxSelectBox | ✓ | | sorgu: Hr_T_Department |
|
||
| `WarehouseId` | Depo | dxSelectBox | ✓ | | sorgu: Inv_T_Warehouse |
|
||
| `LocationId` | Konum | dxSelectBox | ✓ | | sorgu: Inv_T_Location (← WarehouseId) |
|
||
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | | |
|
||
| `Description` | Genel Açıklama | dxTextBox | | | |
|
||
| `ApprovalStatus` | Onay Durumu | dxTextBox | | | |
|
||
| `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | |
|
||
| `ApprovalDate` | Onay Tarihi | dxDateBox | | | |
|
||
| `ApprovalDescription` | Onay Açıklaması | dxTextBox | | | |
|
||
| `MaterialRequestId` | Malzeme Talebi | dxTextBox | | | |
|
||
| `ProductId` | Ürün | dxSelectBox | | | sorgu: Inv_T_Product |
|
||
| `Quantity` | Miktar | dxNumberBox | | | |
|
||
| `UomId` | Birim | dxSelectBox | | | sorgu: Adm_T_Uom |
|
||
| `FulfillmentMethod` | Karşılama Şekli | dxSelectBox | | | liste: Purchase, Transfer |
|
||
| `DueDate` | Termin Tarihi | dxDateBox | | | |
|
||
| `RequestReason` | Talep Nedeni | dxTextArea | | | |
|
||
| `DeliveredQuantity` | Teslim | dxNumberBox | | | |
|
||
| `PurchaseResponsibleUserId` | Satınalma Sorumlusu | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `LineStatus` | Satır Durumu | dxSelectBox | ✓ | ✓ | liste: Waiting, Done, Cancelled |
|
||
|
||
#### Talep Satırları — `App.Prc.MaterialRequestLine`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Prc_MaterialRequestLine.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Prc.MaterialRequestLine` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Talep Satırları — malzeme talebinde istenen ürünler. |
|
||
| Geliştirme talebi | Satınalma -> Malzeme Talepleri |
|
||
| Kaynak | `Prc_T_MaterialRequestItem` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertBefore: SQL · DeleteBefore: SQL |
|
||
| Form varsayılanları | FulfillmentMethod=Purchase, DeliveredQuantity=0, LineStatus=Waiting, Quantity=1, PurchaseResponsibleUserId=@USERID |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `MaterialRequestId` | Malzeme Talebi | dxTextBox | | | |
|
||
| `ProductId` | Ürün | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product · script |
|
||
| `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | |
|
||
| `UomId` | Birim | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Uom |
|
||
| `FulfillmentMethod` | Karşılama Şekli | dxSelectBox | ✓ | ✓ | liste: Purchase, Transfer |
|
||
| `DueDate` | Termin Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `RequestReason` | Talep Nedeni | dxTextArea | ✓ | ✓ | |
|
||
| `DeliveredQuantity` | Teslim | dxNumberBox | | ✓ | |
|
||
| `PurchaseResponsibleUserId` | Satınalma Sorumlusu | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `LineStatus` | Satır Durumu | dxSelectBox | ✓ | ✓ | liste: Waiting, Done, Cancelled |
|
||
|
||
<!-- module-doc:auto:end -->
|