Satınalma Talepleri

This commit is contained in:
Sedat ÖZTÜRK 2026-10-09 22:57:57 +03:00
parent f44308756c
commit 6f472b15f0
13 changed files with 27 additions and 3347 deletions

View file

@ -16824,76 +16824,6 @@
"MultiTenancySide": 3,
"Modules": "Prc"
},
{
"GroupName": "App.Prc",
"Name": "App.Prc.MaterialRequestPlanning",
"ParentName": "App.Prc.MaterialRequests",
"DisplayName": "App.Prc.MaterialRequestPlanning",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Prc"
},
{
"GroupName": "App.Prc",
"Name": "App.Prc.MaterialRequestPlanning.Create",
"ParentName": "App.Prc.MaterialRequestPlanning",
"DisplayName": "App.Platform.Create",
"Order": 1,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Prc"
},
{
"GroupName": "App.Prc",
"Name": "App.Prc.MaterialRequestPlanning.Update",
"ParentName": "App.Prc.MaterialRequestPlanning",
"DisplayName": "App.Platform.Update",
"Order": 2,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Prc"
},
{
"GroupName": "App.Prc",
"Name": "App.Prc.MaterialRequestPlanning.Delete",
"ParentName": "App.Prc.MaterialRequestPlanning",
"DisplayName": "App.Platform.Delete",
"Order": 3,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Prc"
},
{
"GroupName": "App.Prc",
"Name": "App.Prc.MaterialRequestPlanning.Export",
"ParentName": "App.Prc.MaterialRequestPlanning",
"DisplayName": "App.Platform.Export",
"Order": 4,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Prc"
},
{
"GroupName": "App.Prc",
"Name": "App.Prc.MaterialRequestPlanning.Import",
"ParentName": "App.Prc.MaterialRequestPlanning",
"DisplayName": "App.Platform.Import",
"Order": 5,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Prc"
},
{
"GroupName": "App.Prc",
"Name": "App.Prc.MaterialRequestPlanning.Note",
"ParentName": "App.Prc.MaterialRequestPlanning",
"DisplayName": "App.Platform.Note",
"Order": 6,
"IsEnabled": true,
"MultiTenancySide": 3,
"Modules": "Prc"
},
{
"GroupName": "App.Prc",
"Name": "App.Prc.MaterialRequest",

View file

@ -10,6 +10,13 @@
"ApprovalArea": "Purchase",
"ApproverUserId": "77dc76f8-c567-974c-4bc6-3a2433f9216e",
"IsActive": true
},
{
"Id": "db014b58-ec8b-4a65-b406-078f66323b7c",
"DepartmentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f",
"ApprovalArea": "Purchase",
"ApproverUserId": "e065080e-be54-c62c-a272-3a243467aa16",
"IsActive": true
}
]
}

View file

@ -36698,20 +36698,6 @@
"Key": "App.Listform.ListformField.PlannedEndDate",
"Value": "Planlanan Bitiş Tarihi"
},
{
"Id": "71f44b99-33da-5adf-bc0f-02467329fdb2",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.PlannedQuantity",
"Value": "Planned Quantity"
},
{
"Id": "5b1bb98c-dab7-5af3-a255-1b310ac206dd",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Listform.ListformField.PlannedQuantity",
"Value": "Planlanan Miktar"
},
{
"Id": "62dd0d52-6cd4-5f98-b670-50d57bde028f",
"CultureName": "en",
@ -93216,20 +93202,6 @@
"Key": "App.Prc.MaterialRequest.LineStatus.Waiting",
"Value": "Bekliyor"
},
{
"Id": "dbb37c7a-6cc4-5357-9c5f-f5d519f216bb",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Prc.MaterialRequest.LineStatus.Planned",
"Value": "Planned"
},
{
"Id": "d6f9b304-674f-53d7-82d6-b8df5c44e4de",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Prc.MaterialRequest.LineStatus.Planned",
"Value": "Planlandı"
},
{
"Id": "d09ac050-b969-5106-9199-e1e08c021126",
"CultureName": "en",
@ -93874,48 +93846,6 @@
"Key": "App.Prc.MaterialRequestPurchaseApproval.Desc",
"Value": "Satınalma Onayı Bekleyenler — departmanca onaylanmış ve satınalmanın kararını bekleyen malzeme talepleri.\nNerede: Satınalma › Satınalma Talepleri › Satınalma Onayı Bekleyenler.\nKim: Yönetim › Tanımlamalar › Onaycılar'da Satınalma Masası onay yerinde tanımlı onaycılar (departmandan bağımsız); her onaycı yalnız kendisine düşen talepleri görür.\nNe yapılır: talebi ve satırlarını inceleyip Onayla (talep Onaylandı olur, Planlama Bekleyenler'e düşer, talep edene bilgi gider) ya da not ve red nedeniyle Reddet.\nİlişkili: Departman Onayı Bekleyenler, Planlama Bekleyenler, Tüm Talepler."
},
{
"Id": "9e5e455f-ecc8-5066-8fb4-63884166647d",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Prc.MaterialRequestPlanning",
"Value": "Awaiting Planning"
},
{
"Id": "14c03915-e459-560b-b860-60547e1601a7",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Prc.MaterialRequestPlanning",
"Value": "Planlama Bekleyenler"
},
{
"Id": "95fbb1fd-77cb-58f7-a493-e8b65c7c2d7a",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Prc.MaterialRequestPlanning.Title",
"Value": "Awaiting Planning"
},
{
"Id": "46910333-c5f6-59a3-a23f-c1492f1601d4",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Prc.MaterialRequestPlanning.Title",
"Value": "Planlama Bekleyenler"
},
{
"Id": "2891afab-5548-5940-9e42-2bbba6f98611",
"CultureName": "en",
"ResourceName": "Platform",
"Key": "App.Prc.MaterialRequestPlanning.Desc",
"Value": "Awaiting Planning — approved material requests whose lines are not all completed yet; the purchasing team's work list.\nWhere: Purchasing › Material Requests › Awaiting Planning.\nWhat to do: open the request and, on the Request Lines tab, set the purchasing responsible, the quantity to plan and the line status (Waiting / Planned / Done / Cancelled). The request status follows the lines: any line Planned → In Progress, some lines Done → Partially Done, all lines Done or Cancelled → Done (the request then leaves this list). This list is the starting point of the quotation process.\nRelated: Awaiting Purchasing Approval, All Requests."
},
{
"Id": "93219adb-c4b3-5455-a59b-4d08b8a39e6b",
"CultureName": "tr",
"ResourceName": "Platform",
"Key": "App.Prc.MaterialRequestPlanning.Desc",
"Value": "Planlama Bekleyenler — onaylanmış ve satırları henüz tamamlanmamış malzeme talepleri; satınalma ekibinin iş listesi.\nNerede: Satınalma › Satınalma Talepleri › Planlama Bekleyenler.\nNe yapılır: talebi açıp Talep Satırları sekmesinde satınalma sorumlusunu, planlanacak miktarı ve satır durumunu (Bekliyor / Planlandı / Tamamlandı / İptal) girin. Talebin durumu satırları izler: bir satır Planlandı → İşlemde, satırların bir kısmı Tamamlandı → Kısmi Tamamlandı, tüm satırlar Tamamlandı ya da İptal → Tamamlandı (talep bu listeden çıkar). Teklif toplama sürecinin giriş noktasıdır.\nİlişkili: Satınalma Onayı Bekleyenler, Tüm Talepler."
},
{
"Id": "04e8c193-a841-520d-b338-0d4a73ca066b",
"CultureName": "en",

View file

@ -2905,7 +2905,7 @@
"DisplayName": "App.Prc.MaterialRequestPurchaseApproval",
"Order": 3,
"Url": "/admin/list/App.Prc.MaterialRequestPurchaseApproval",
"Icon": "FcApproval",
"Icon": "FcApprove",
"ParentCode": "App.Prc.MaterialRequests",
"RequiredPermissionName": "App.Prc.MaterialRequestPurchaseApproval",
"CssClass": null,
@ -2914,21 +2914,6 @@
"ElementId": null,
"ModuleId": "Prc"
},
{
"Id": "893db5a1-88bb-4116-be3c-54ffb800b61c",
"Code": "App.Prc.MaterialRequestPlanning",
"DisplayName": "App.Prc.MaterialRequestPlanning",
"Order": 4,
"Url": "/admin/list/App.Prc.MaterialRequestPlanning",
"Icon": "FcPlanner",
"ParentCode": "App.Prc.MaterialRequests",
"RequiredPermissionName": "App.Prc.MaterialRequestPlanning",
"CssClass": null,
"Target": null,
"IsDisabled": false,
"ElementId": null,
"ModuleId": "Prc"
},
{
"Id": "99ab4ed0-b594-4492-817e-a091fb7c3080",
"Code": "App.Prc.MaterialRequest",

View file

@ -71,7 +71,7 @@ Yok. Tanımlar Yönetim › Tanımlamalar › Kontaklar'ın Satış ve Satınalm
### 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 (Satınalma Masası) düşer. Onaylanan talep Planlama Bekleyenler listesine geçer ve satınalma ekibi satırları planlar; teklif toplama süreci bu listeden başlar. Teklif, sipariş, transfer ve stok miktarı bu dalın kapsamında değildir.
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 (Satınalma Masası) 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
@ -83,7 +83,8 @@ Departmanların iç ve dış ihtiyaç duydukları malzemeleri satınalmaya iletm
- Karşılama Şekli: Satınalma / Depodan Transfer.
- Onay akışının "onaylayan" alanı platformda kullanıcı adı (metin) yazdığı için akışa bağlanmadı (`ApprovalUserFieldName` boş); departman/satınalma onaylayanı kayıt sonrası prosedürde kaydı son güncelleyen kullanıcıdan yazılır. `ApproverId` kolonu kullanılmaz.
- 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.
- Talep durumu satırlardan türetilir; ayrı İşlemde / Tamamlandı butonu yerine satır durumu (Bekliyor / Planlandı / Tamamlandı / İptal) kullanılır.
- Talep durumu satırlardan türetilir; ayrı Tamamlandı butonu yerine satır durumu (Bekliyor / Tamamlandı / İptal) kullanılır.
- Planlama aşaması kaldırıldı (Planlama Bekleyenler listesi, satırdaki Planlandı durumu ve Planlanacak Miktar). İşlemde (`InProgress`) durumu korunur: talep depoya girdiğinde kullanılacak, şimdilik hiçbir kural yazmaz.
### 3. Menü ve ekranlar
@ -94,7 +95,6 @@ Satınalma (`App.Prc`) › Satınalma Talepleri (`App.Prc.MaterialRequests`):
| 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 |
| Planlama Bekleyenler | `App.Prc.MaterialRequestPlanning` | ApprovalStatus = Onaylandı ve Status ≠ Done; akış yok |
| Tüm Talepler | `App.Prc.MaterialRequest` | filtresiz; ekle/sil açık, akış |
Talep Satırları (`App.Prc.MaterialRequestLine`) menüsüz alt formdur; beş listenin hepsinde sekmedir. Red Nedenleri (`App.Prc.RejectReason`) Satınalma › Tanımlamalar altındadır (bkz. Tanımlamalar).
@ -104,13 +104,13 @@ Talep Satırları (`App.Prc.MaterialRequestLine`) menüsüz alt formdur; beş li
Tüm tablolar kiracı + tam audit + soft delete taşır.
- `Prc_T_MaterialRequest`: RequestNo, Priority (0–3), RequesterUserId, DepartmentId, WarehouseId, LocationId, RequestDate, Description, Status (Draft / DeptApproval / PurchaseApproval / Approved / InProgress / PartiallyDone / Done / Rejected), ApprovalStatus, ApprovalDate, ApprovalNote (akış), DeptApproverUserNames / PurchaseApproverUserNames (`|` ayrılmış kullanıcı adları), DeptApprovedBy/Date/Note, PurchaseApprovedBy/Date/Note, RejectReasonId, ApproverId (kullanılmaz).
- `Prc_T_MaterialRequestItem`: MaterialRequestId (FK, cascade), ProductId, Quantity, UomId (nvarchar, `Adm_T_Uom`), FulfillmentMethod (Purchase / Transfer), DueDate, RequestReason, DeliveredQuantity, PlannedQuantity, PurchaseResponsibleUserId, LineStatus (Waiting / Planned / Done / Cancelled).
- `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.
- Prosedür `Prc_P_MaterialRequestAfterSave(@Id, @UserId)`.
### 5. İş kuralları ve hesaplar
- `Prc_P_MaterialRequestAfterSave` talep kaydı/güncellemesi ve satır ekleme/güncelleme/silme sonrasında çalışır: boş planlanacak miktarı talep miktarıyla doldurur; onaycı kullanıcı listelerini Onaycılar'dan yeniden yazar; ApprovalStatus departman adımını geçince departman onay bilgilerini, Onaylandı/Reddedildi olunca satınalma onay bilgilerini (onaylayan, tarih, not) kopyalar; Status'u türetir: Departman Onayı → DeptApproval, Satınalma Onayı → PurchaseApproval, Reddedildi → Rejected, Onaylandı → satırlara göre (tümü Tamamlandı/İptal → Done, bir kısmı Tamamlandı → PartiallyDone, Planlandı varsa → InProgress, değilse Approved), boş → Draft.
- `Prc_P_MaterialRequestAfterSave` talep kaydı/güncellemesi ve satır ekleme/güncelleme/silme sonrasında çalışır: onaycı kullanıcı listelerini Onaycılar'dan yeniden yazar; ApprovalStatus departman adımını geçince departman onay bilgilerini, Onaylandı/Reddedildi olunca satınalma onay bilgilerini (onaylayan, tarih, not) kopyalar; Status'u türetir: Departman Onayı → DeptApproval, Satınalma Onayı → PurchaseApproval, Reddedildi → Rejected, Onaylandı → satırlara göre (tümü Tamamlandı/İptal → Done, bir kısmı Tamamlandı → PartiallyDone, değilse Approved), boş → Draft.
- 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.
@ -118,7 +118,7 @@ Tüm tablolar kiracı + tam audit + soft delete taşır.
### 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 Planlama Bekleyenler ve 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.
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
@ -129,8 +129,8 @@ Yönetim › Tanımlamalar › Onaycılar (onay yerleri Satınalma ve Satınalma
1. Onaycılar'da BT departmanı için Satınalma yerinde Ayşe, Satınalma Masası yerinde Mehmet tanımlıdı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, talep Planlama Bekleyenler'de görünür.
5. Satınalma satırda sorumluyu atar, satırı Planlandı yapar (talep İşlemde), sonra Tamamlandı yapar (talep Tamamlandı, listeden çıkar).
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 (talep Tamamlandı).
### 9. Sık sorulanlar
@ -143,7 +143,7 @@ Yönetim › Tanımlamalar › Onaycılar (onay yerleri Satınalma ve Satınalma
- Tablolar: `sql/object/Prc_T_MaterialRequest.sql`, `Prc_T_MaterialRequestItem.sql`, `Prc_T_RejectReason.sql` (+ postgres eşleri); kullanılmayan `Prc_T_MaterialRequestLine.sql`.
- Prosedür: `sql/object/Prc_P_MaterialRequestAfterSave.sql` (+ postgres).
- Wizard'lar: `Prc_MaterialRequestLine.json`, `Prc_MyMaterialRequest.json`, `Prc_MaterialRequestDeptApproval.json`, `Prc_MaterialRequestPurchaseApproval.json`, `Prc_MaterialRequestPlanning.json`, `Prc_MaterialRequest.json`, `Prc_RejectReason.json`; güncellenen `Adm_Approver.json`.
- 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.
@ -396,43 +396,6 @@ Yönetim › Tanımlamalar › Onaycılar (onay yerleri Satınalma ve Satınalma
| `DeptApprovalDate` | Departman Onay Tarihi | dxDateBox | | ✓ | |
| `DeptApprovalNote` | Departman Onay Notu | dxTextArea | | ✓ | |
#### Planlama Bekleyenler — `App.Prc.MaterialRequestPlanning`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Prc_MaterialRequestPlanning.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Prc.MaterialRequests` › `App.Prc.MaterialRequestPlanning` (sıra 4) |
| Yetki | `App.Prc.MaterialRequestPlanning` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
| Açıklama | Planlama Bekleyenler — onaylanmış ve satırları henüz tamamlanmamış malzeme talepleri; satınalma ekibinin iş listesi. |
| Geliştirme talebi | Satınalma -> Satınalma Talepleri |
| Kaynak | `Prc_T_MaterialRequest` · filtre `"IsDeleted" = 'false' AND "ApprovalStatus" = N'Onaylandı' AND "Status" <> 'Done'` |
| 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.Approved`, `App.Prc.MaterialRequest.Status.InProgress`, `App.Prc.MaterialRequest.Status.PartiallyDone` |
| Komutlar | UpdateAfter: `Prc_P_MaterialRequestAfterSave` |
| Form varsayılanları | Priority=0, Status=Draft |
| 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 | ✓ | ✓ | |
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Draft, DeptApproval, PurchaseApproval, Approved, InProgress, PartiallyDone, Done, Rejected |
| `Description` | Genel Açıklama | dxTextArea | | ✓ | |
| `DeptApprovedBy` | Departman Onaylayan | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `PurchaseApprovedBy` | Satınalma Onaylayan | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `DeptApprovalDate` | Departman Onay Tarihi | dxDateBox | | ✓ | |
| `PurchaseApprovalDate` | Satınalma Onay Tarihi | dxDateBox | | ✓ | |
| `DeptApprovalNote` | Departman Onay Notu | dxTextArea | | ✓ | |
| `PurchaseApprovalNote` | Satınalma Onay Notu | dxTextArea | | ✓ | |
#### Tüm Talepler — `App.Prc.MaterialRequest`
| Özellik | Değer |
@ -505,8 +468,7 @@ Yönetim › Tanımlamalar › Onaycılar (onay yerleri Satınalma ve Satınalma
| `DueDate` | Termin Tarihi | dxDateBox | ✓ | ✓ | |
| `RequestReason` | Talep Nedeni | dxTextBox | ✓ | ✓ | |
| `DeliveredQuantity` | Teslim | dxNumberBox | | ✓ | |
| `PlannedQuantity` | Planlanacak Miktar | dxNumberBox | | ✓ | |
| `PurchaseResponsibleUserId` | Satınalma Sorumlusu | dxSelectBox | | ✓ | sorgu: AbpUsers |
| `LineStatus` | Satır Durumu | dxSelectBox | ✓ | ✓ | liste: Waiting, Planned, Done, Cancelled |
| `LineStatus` | Satır Durumu | dxSelectBox | ✓ | ✓ | liste: Waiting, Done, Cancelled |
<!-- module-doc:auto:end -->

View file

@ -7,9 +7,6 @@ AS $$
BEGIN
IF "p_Id" IS NULL THEN RETURN; END IF;
UPDATE "Prc_T_MaterialRequestItem" l SET "PlannedQuantity" = l."Quantity"
WHERE l."MaterialRequestId" = "p_Id" AND l."IsDeleted" = false AND l."PlannedQuantity" IS NULL;
UPDATE "Prc_T_MaterialRequest" r SET
"DeptApproverUserNames" = (
SELECT string_agg(u."UserName", '|')
@ -49,15 +46,13 @@ BEGIN
CASE
WHEN s."Total" > 0 AND s."Closed" = s."Total" THEN 'Done'
WHEN s."Closed" > 0 THEN 'PartiallyDone'
WHEN s."Planned" > 0 THEN 'InProgress'
ELSE 'Approved'
END
ELSE 'Draft'
END
FROM (
SELECT COUNT(*) AS "Total",
COALESCE(SUM(CASE WHEN l."LineStatus" IN ('Done', 'Cancelled') THEN 1 ELSE 0 END), 0) AS "Closed",
COALESCE(SUM(CASE WHEN l."LineStatus" IN ('Planned', 'Done') THEN 1 ELSE 0 END), 0) AS "Planned"
COALESCE(SUM(CASE WHEN l."LineStatus" IN ('Done', 'Cancelled') THEN 1 ELSE 0 END), 0) AS "Closed"
FROM "Prc_T_MaterialRequestItem" l
WHERE l."MaterialRequestId" = "p_Id" AND l."IsDeleted" = false
) s

View file

@ -10,7 +10,6 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_MaterialRequestItem"
"DueDate" date NOT NULL,
"RequestReason" varchar(256) NOT NULL,
"DeliveredQuantity" numeric(18, 4) NOT NULL DEFAULT 0,
"PlannedQuantity" numeric(18, 4) NULL,
"PurchaseResponsibleUserId" uuid NULL,
"LineStatus" varchar(16) NOT NULL DEFAULT 'Waiting',
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),

View file

@ -10,7 +10,6 @@ CREATE TABLE IF NOT EXISTS public."Prc_T_MaterialRequestLine"
"DueDate" date NOT NULL,
"RequestReason" varchar(256) NOT NULL,
"DeliveredQuantity" numeric(18, 4) NOT NULL DEFAULT 0,
"PlannedQuantity" numeric(18, 4) NULL,
"PurchaseResponsibleUserId" uuid NULL,
"LineStatus" varchar(16) NOT NULL DEFAULT 'Waiting',
"CreationTime" timestamp NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC'),

View file

@ -6,11 +6,6 @@ BEGIN
SET NOCOUNT ON;
IF @Id IS NULL RETURN;
-- Satır planlanan miktarı boşsa talep miktarıyla doldur
UPDATE l SET PlannedQuantity = l.Quantity
FROM Prc_T_MaterialRequestItem l
WHERE l.MaterialRequestId = @Id AND l.IsDeleted = 0 AND l.PlannedQuantity IS NULL;
-- Onaycılar (Adm_T_Approver): departman onayı = Purchase + talebin departmanı, satınalma onayı = PurchaseDesk
UPDATE r SET
DeptApproverUserNames = (
@ -57,7 +52,6 @@ BEGIN
CASE
WHEN s.Total > 0 AND s.Closed = s.Total THEN 'Done'
WHEN s.Closed > 0 THEN 'PartiallyDone'
WHEN s.Planned > 0 THEN 'InProgress'
ELSE 'Approved'
END
ELSE 'Draft'
@ -65,8 +59,7 @@ BEGIN
FROM Prc_T_MaterialRequest r
CROSS APPLY (
SELECT COUNT(*) AS Total,
ISNULL(SUM(CASE WHEN l.LineStatus IN ('Done', 'Cancelled') THEN 1 ELSE 0 END), 0) AS Closed,
ISNULL(SUM(CASE WHEN l.LineStatus IN ('Planned', 'Done') THEN 1 ELSE 0 END), 0) AS Planned
ISNULL(SUM(CASE WHEN l.LineStatus IN ('Done', 'Cancelled') THEN 1 ELSE 0 END), 0) AS Closed
FROM Prc_T_MaterialRequestItem l
WHERE l.MaterialRequestId = r.Id AND l.IsDeleted = 0
) s

View file

@ -12,7 +12,6 @@ BEGIN
[DueDate] date NOT NULL,
[RequestReason] nvarchar(256) NOT NULL,
[DeliveredQuantity] decimal(18, 4) NOT NULL DEFAULT 0,
[PlannedQuantity] decimal(18, 4) NULL,
[PurchaseResponsibleUserId] uniqueidentifier NULL,
[LineStatus] nvarchar(16) NOT NULL DEFAULT 'Waiting',
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),

View file

@ -12,7 +12,6 @@ BEGIN
[DueDate] date NOT NULL,
[RequestReason] nvarchar(256) NOT NULL,
[DeliveredQuantity] decimal(18, 4) NOT NULL DEFAULT 0,
[PlannedQuantity] decimal(18, 4) NULL,
[PurchaseResponsibleUserId] uniqueidentifier NULL,
[LineStatus] nvarchar(16) NOT NULL DEFAULT 'Waiting',
[CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(),

View file

@ -33,8 +33,8 @@
"MenuTr": "Talep Satırları",
"TitleEn": "Request Lines",
"TitleTr": "Talep Satırları",
"DescEn": "Request Lines — the products requested in a material request.\nWhere: Purchasing › Material Requests › any list › Request Lines tab (no menu of its own).\nFields: product (active, purchasable products), quantity, unit (copied from the product's purchase unit, read-only), fulfilment (Purchasing / Warehouse Transfer), due date, request reason, delivered quantity (read-only), planned quantity (defaults to quantity), purchasing responsible, line status (Waiting / Planned / Done / Cancelled).\nRules: lines can be added or deleted only while the request has not been sent for approval. Changing line statuses recalculates the request status (In Progress / Partially Done / Done).",
"DescTr": "Talep Satırları — malzeme talebinde istenen ürünler.\nNerede: Satınalma › Satınalma Talepleri › herhangi bir liste › Talep Satırları sekmesi (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), miktar, birim (ürünün satınalma biriminden gelir, salt okunur), karşılama şekli (Satınalma / Depodan Transfer), termin tarihi, talep nedeni, teslim edilen miktar (salt okunur), planlanacak miktar (boşsa miktar), satınalma sorumlusu, satır durumu (Bekliyor / Planlandı / Tamamlandı / İptal).\nKurallar: satır yalnız talep onaya gönderilmeden eklenip silinebilir. Satır durumları değişince talebin durumu yeniden hesaplanır (İşlemde / Kısmi Tamamlandı / Tamamlandı).",
"DescEn": "Request Lines — the products requested in a material request.\nWhere: Purchasing › Material Requests › any list › Request Lines tab (no menu of its own).\nFields: product (active, purchasable products), quantity, unit (copied from the product's purchase unit, read-only), fulfilment (Purchasing / Warehouse Transfer), due date, request reason, delivered quantity (read-only), purchasing responsible, line status (Waiting / Done / Cancelled).\nRules: lines can be added or deleted only while the request has not been sent for approval. Changing line statuses recalculates the request status (Partially Done / Done).",
"DescTr": "Talep Satırları — malzeme talebinde istenen ürünler.\nNerede: Satınalma › Satınalma Talepleri › herhangi bir liste › Talep Satırları sekmesi (kendi menüsü yoktur).\nAlanlar: ürün (aktif ve satın alınabilir ürünler), miktar, birim (ürünün satınalma biriminden gelir, salt okunur), karşılama şekli (Satınalma / Depodan Transfer), termin tarihi, talep nedeni, teslim edilen miktar (salt okunur), satınalma sorumlusu, satır durumu (Bekliyor / Tamamlandı / İptal).\nKurallar: satır yalnız talep onaya gönderilmeden eklenip silinebilir. Satır durumları değişince talebin durumu yeniden hesaplanır (Kısmi Tamamlandı / Tamamlandı).",
"Texts": [
{
"Key": "App.StaticLookup.Purchase",
@ -51,11 +51,6 @@
"En": "Waiting",
"Tr": "Bekliyor"
},
{
"Key": "App.Prc.MaterialRequest.LineStatus.Planned",
"En": "Planned",
"Tr": "Planlandı"
},
{
"Key": "App.Prc.MaterialRequest.LineStatus.Done",
"En": "Done",
@ -125,12 +120,6 @@
"En": "Delivered",
"Tr": "Teslim"
},
{
"FieldName": "PlannedQuantity",
"CaptionName": "App.Listform.ListformField.PlannedQuantity",
"En": "Quantity to Plan",
"Tr": "Planlanacak Miktar"
},
{
"FieldName": "PurchaseResponsibleUserId",
"CaptionName": "App.Listform.ListformField.PurchaseResponsibleUserId",
@ -1991,132 +1980,6 @@
"CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000"
},
{
"EditType": null,
"ListFormCode": "App.Prc.MaterialRequestLine",
"RoleId": null,
"UserId": null,
"ColumnJoinTableDto": {
"JoinType": null,
"TableName": null,
"JoinFieldName": null,
"BaseTableJoinFieldName": null,
"SelectFieldName": null,
"FieldNameAlias": null,
"JoinCondition2": "AND",
"JoinFieldName2": null,
"BaseTableJoinFieldName2_OrValue": null
},
"FieldName": "PlannedQuantity",
"CaptionName": "App.Listform.ListformField.PlannedQuantity",
"PlaceHolder": null,
"ReadOnly": false,
"Visible": true,
"IsActive": true,
"Width": 0,
"ListOrderNo": 10,
"SourceDbType": 7,
"CultureName": "en",
"DataType": "number",
"SortIndex": 0,
"SortDirection": null,
"AllowSearch": true,
"AllowEditing": true,
"AllowAdding": true,
"ColumnCssClass": null,
"ColumnCssValue": null,
"BandName": null,
"ColumnFilterDto": {
"AllowFiltering": true,
"FilterOperations": null,
"SelectedFilterOperation": null,
"FilterValue": null
},
"ColumnHeaderDto": {
"AllowHeaderFiltering": true,
"AllowSearch": false,
"DataSource": null,
"DataSourceString": ""
},
"ColumnGroupingDto": {
"AllowGrouping": true,
"GroupIndex": null,
"AutoExpandGroup": false
},
"ColumnCustomizationDto": {
"Fixed": false,
"FixedPosition": "left",
"AllowReordering": true
},
"ColumnTotalSummaryDto": {
"SummaryType": null,
"ValueFormat": null,
"ShowInGroupFooter": false,
"AlignByColumn": false,
"DisplayFormat": null,
"ShowInColumn": null
},
"ColumnGroupSummaryDto": {
"SummaryType": null,
"ValueFormat": null,
"ShowInGroupFooter": false,
"AlignByColumn": false,
"DisplayFormat": null,
"ShowInColumn": null
},
"LookupDto": {
"DataSourceType": 0,
"ValueExpr": "Key",
"DisplayExpr": "Name",
"CascadeRelationField": null,
"CascadeFilterOperator": "=",
"CascadeParentFields": null,
"CascadeEmptyFields": null,
"LookupQuery": null
},
"ValidationRuleDto": [],
"ColumnStylingDto": [],
"PermissionDto": {
"Deny": false,
"C": "App.Prc.MaterialRequestLine.Create",
"R": "App.Prc.MaterialRequestLine",
"U": "App.Prc.MaterialRequestLine.Update",
"E": true,
"I": true
},
"CanRead": false,
"CanCreate": false,
"CanUpdate": false,
"CanExport": false,
"DefaultValue": null,
"DefaultValueType": 0,
"PivotSettingsDto": {
"IsPivot": true,
"Expanded": false,
"SortOrder": "asc",
"Area": "filter",
"Format": null,
"SummaryType": null,
"GroupInterval": "",
"WordWrapEnabled": false
},
"Alignment": "left",
"Format": null,
"EditOrderNo": 8,
"EditGroupOrderNo": 1,
"EditorType2": "dxNumberBox",
"ColSpan": 1,
"EditorOptions": "{\"format\":\"#,##0.##\",\"min\":0}",
"GridBoxOptions": null,
"TagBoxOptions": null,
"ImageUploadOptions": null,
"EditorScript": null,
"LastModificationTime": null,
"LastModifierId": null,
"CreationTime": "0001-01-01T00:00:00",
"CreatorId": null,
"Id": "00000000-0000-0000-0000-000000000000"
},
{
"EditType": null,
"ListFormCode": "App.Prc.MaterialRequestLine",
@ -2140,7 +2003,7 @@
"Visible": true,
"IsActive": true,
"Width": 0,
"ListOrderNo": 11,
"ListOrderNo": 10,
"SourceDbType": 9,
"CultureName": "en",
"DataType": "string",
@ -2228,7 +2091,7 @@
},
"Alignment": "left",
"Format": null,
"EditOrderNo": 9,
"EditOrderNo": 8,
"EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox",
"ColSpan": 1,
@ -2266,7 +2129,7 @@
"Visible": true,
"IsActive": true,
"Width": 0,
"ListOrderNo": 12,
"ListOrderNo": 11,
"SourceDbType": 16,
"CultureName": "en",
"DataType": "string",
@ -2324,7 +2187,7 @@
"CascadeFilterOperator": "=",
"CascadeParentFields": null,
"CascadeEmptyFields": null,
"LookupQuery": "[{\"key\":\"Waiting\",\"name\":\"App.Prc.MaterialRequest.LineStatus.Waiting\"},{\"key\":\"Planned\",\"name\":\"App.Prc.MaterialRequest.LineStatus.Planned\"},{\"key\":\"Done\",\"name\":\"App.Prc.MaterialRequest.LineStatus.Done\"},{\"key\":\"Cancelled\",\"name\":\"App.Prc.MaterialRequest.LineStatus.Cancelled\"}]"
"LookupQuery": "[{\"key\":\"Waiting\",\"name\":\"App.Prc.MaterialRequest.LineStatus.Waiting\"},{\"key\":\"Done\",\"name\":\"App.Prc.MaterialRequest.LineStatus.Done\"},{\"key\":\"Cancelled\",\"name\":\"App.Prc.MaterialRequest.LineStatus.Cancelled\"}]"
},
"ValidationRuleDto": [
{
@ -2366,7 +2229,7 @@
},
"Alignment": "left",
"Format": null,
"EditOrderNo": 10,
"EditOrderNo": 9,
"EditGroupOrderNo": 1,
"EditorType2": "dxSelectBox",
"ColSpan": 1,
@ -2391,7 +2254,6 @@
"App.Prc.MaterialRequestLine.Desc",
"App.StaticLookup.WarehouseTransfer",
"App.Prc.MaterialRequest.LineStatus.Waiting",
"App.Prc.MaterialRequest.LineStatus.Planned",
"App.Prc.MaterialRequest.LineStatus.Done",
"App.Prc.MaterialRequest.LineStatus.Cancelled",
"App.Listform.ListformField.MaterialRequestId",

File diff suppressed because it is too large Load diff