Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -121,7 +121,14 @@ LEFT JOIN (
|
||||
-- Paketlenen (OrderLine IsClosed=1) belge PB toplam
|
||||
SUM(
|
||||
CASE
|
||||
WHEN ISNULL(l.IsClosed,0) = 1
|
||||
WHEN (
|
||||
ISNULL(l.IsClosed,0) = 1
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.trInvoiceLine il WITH (NOLOCK)
|
||||
WHERE il.OrderLineID = l.OrderLineID
|
||||
)
|
||||
)
|
||||
AND c.CurrencyCode = h.DocCurrencyCode
|
||||
THEN c.NetAmount
|
||||
ELSE 0
|
||||
@@ -131,7 +138,14 @@ LEFT JOIN (
|
||||
-- Paketlenen TRY toplam
|
||||
SUM(
|
||||
CASE
|
||||
WHEN ISNULL(l.IsClosed,0) = 1
|
||||
WHEN (
|
||||
ISNULL(l.IsClosed,0) = 1
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.trInvoiceLine il WITH (NOLOCK)
|
||||
WHERE il.OrderLineID = l.OrderLineID
|
||||
)
|
||||
)
|
||||
AND c.CurrencyCode = 'TRY'
|
||||
THEN c.NetAmount
|
||||
ELSE 0
|
||||
|
||||
@@ -216,7 +216,16 @@ SELECT
|
||||
L.DeliveryDate,
|
||||
L.PlannedDateOfLading,
|
||||
L.LineDescription,
|
||||
L.IsClosed,
|
||||
CASE
|
||||
WHEN ISNULL(L.IsClosed, 0) = 1
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM BAGGI_V3.dbo.trInvoiceLine il WITH (NOLOCK)
|
||||
WHERE il.OrderLineID = L.OrderLineID
|
||||
)
|
||||
THEN CAST(1 AS bit)
|
||||
ELSE CAST(0 AS bit)
|
||||
END AS IsClosed,
|
||||
L.CreatedUserName,
|
||||
L.CreatedDate,
|
||||
L.LastUpdatedUserName,
|
||||
|
||||
@@ -143,15 +143,29 @@ JOIN (
|
||||
) AS TotalTRY,
|
||||
SUM(
|
||||
CASE
|
||||
-- "Paketlenen" = satir kapaliysa VEYA satir irsaliyeye/faturaya baglandiysa.
|
||||
-- Not: IsClosed her zaman guncellenmiyor; trInvoiceLine.OrderLineID iliskiyi yakalar.
|
||||
WHEN ISNULL(l.IsClosed,0) = 1
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.trInvoiceLine il WITH (NOLOCK)
|
||||
WHERE il.OrderLineID = l.OrderLineID
|
||||
)
|
||||
THEN ISNULL(c.NetAmount,0)
|
||||
ELSE 0
|
||||
END
|
||||
) AS PackedAmount,
|
||||
SUM(
|
||||
CASE
|
||||
WHEN ISNULL(l.IsClosed,0) = 1
|
||||
AND ISNULL(c.CurrencyCode,'') = 'TRY'
|
||||
WHEN (
|
||||
ISNULL(l.IsClosed,0) = 1
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.trInvoiceLine il WITH (NOLOCK)
|
||||
WHERE il.OrderLineID = l.OrderLineID
|
||||
)
|
||||
)
|
||||
AND ISNULL(c.CurrencyCode,'') = 'TRY'
|
||||
THEN ISNULL(c.NetAmount,0)
|
||||
ELSE 0
|
||||
END
|
||||
|
||||
1702
svc/queries/production_product_costing.go
Normal file
1702
svc/queries/production_product_costing.go
Normal file
@@ -0,0 +1,1702 @@
|
||||
package queries
|
||||
|
||||
import (
|
||||
"bssapp-backend/utils"
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
func GetProductAnaAltGrupByUrunKodu(ctx context.Context, mssqlDB *sql.DB, urunKodu string) (urunAnaGrubu string, urunAltGrubu string, err error) {
|
||||
urunKodu = strings.TrimSpace(urunKodu)
|
||||
if mssqlDB == nil || urunKodu == "" {
|
||||
return "", "", nil
|
||||
}
|
||||
|
||||
// Nebim V3: ProductFilterWithDescription exposes ProductAtt01Desc (ana grup) and ProductAtt02Desc (alt grup).
|
||||
sqlText := `
|
||||
SELECT TOP 1
|
||||
ISNULL(ProductAtt01Desc, '') AS UrunAnaGrubu,
|
||||
ISNULL(ProductAtt02Desc, '') AS UrunAltGrubu
|
||||
FROM ProductFilterWithDescription('TR')
|
||||
WHERE IsBlocked = 0
|
||||
AND LTRIM(RTRIM(ProductCode)) = @p1
|
||||
ORDER BY ProductCode;
|
||||
`
|
||||
|
||||
row := mssqlDB.QueryRowContext(ctx, sqlText, urunKodu)
|
||||
if err := row.Scan(&urunAnaGrubu, &urunAltGrubu); err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return "", "", nil
|
||||
}
|
||||
return "", "", err
|
||||
}
|
||||
return urunAnaGrubu, urunAltGrubu, nil
|
||||
}
|
||||
|
||||
func GetProductionProductCostingAnaGrupOptions(ctx context.Context, mssqlDB *sql.DB, search string, limit int) (*sql.Rows, error) {
|
||||
search = strings.TrimSpace(search)
|
||||
if limit <= 0 {
|
||||
limit = 50
|
||||
}
|
||||
searchLike := "%" + search + "%"
|
||||
sqlText := `
|
||||
SELECT TOP (@p2)
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(P.ProductAtt01Desc)), ''), '') AS UrunAnaGrubu
|
||||
FROM ProductFilterWithDescription('TR') AS P
|
||||
WHERE P.IsBlocked = 0
|
||||
AND NULLIF(LTRIM(RTRIM(P.ProductAtt01Desc)), '') IS NOT NULL
|
||||
AND (@p1 = '' OR P.ProductAtt01Desc LIKE @p3)
|
||||
GROUP BY P.ProductAtt01Desc
|
||||
ORDER BY P.ProductAtt01Desc
|
||||
`
|
||||
return mssqlDB.QueryContext(ctx, sqlText, search, limit, searchLike)
|
||||
}
|
||||
|
||||
func GetProductionProductCostingAltGrupOptions(ctx context.Context, mssqlDB *sql.DB, urunAnaGrubu string, search string, limit int) (*sql.Rows, error) {
|
||||
urunAnaGrubu = strings.TrimSpace(urunAnaGrubu)
|
||||
search = strings.TrimSpace(search)
|
||||
if limit <= 0 {
|
||||
limit = 50
|
||||
}
|
||||
searchLike := "%" + search + "%"
|
||||
sqlText := `
|
||||
SELECT TOP (@p3)
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(P.ProductAtt02Desc)), ''), '') AS UrunAltGrubu
|
||||
FROM ProductFilterWithDescription('TR') AS P
|
||||
WHERE P.IsBlocked = 0
|
||||
AND NULLIF(LTRIM(RTRIM(P.ProductAtt02Desc)), '') IS NOT NULL
|
||||
AND (@p1 = '' OR LTRIM(RTRIM(P.ProductAtt01Desc)) = @p1)
|
||||
AND (@p2 = '' OR P.ProductAtt02Desc LIKE @p4)
|
||||
GROUP BY P.ProductAtt02Desc
|
||||
ORDER BY P.ProductAtt02Desc
|
||||
`
|
||||
return mssqlDB.QueryContext(ctx, sqlText, urunAnaGrubu, search, limit, searchLike)
|
||||
}
|
||||
|
||||
func GetProductionProductCostingAnaAltComboRows(ctx context.Context, mssqlDB *sql.DB, search string, limit int) (*sql.Rows, error) {
|
||||
search = strings.TrimSpace(search)
|
||||
if limit <= 0 {
|
||||
limit = 500
|
||||
}
|
||||
if limit > 5000 {
|
||||
limit = 5000
|
||||
}
|
||||
// For very short searches, avoid leading-wildcard LIKE which can be extremely expensive on MSSQL side.
|
||||
// Example: "ce" should match "CEKET%" cheaply vs "%ce%" scanning everything.
|
||||
searchLike := "%" + search + "%"
|
||||
if len([]rune(search)) > 0 && len([]rune(search)) < 3 {
|
||||
searchLike = search + "%"
|
||||
}
|
||||
sqlText := `
|
||||
SELECT TOP (@p2)
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(CONVERT(NVARCHAR(200), P.ProductAtt42Desc))), ''), '') AS UrunIlkGrubu,
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(CONVERT(NVARCHAR(200), P.ProductAtt01Desc))), ''), '') AS UrunAnaGrubu,
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(CONVERT(NVARCHAR(200), P.ProductAtt02Desc))), ''), '') AS UrunAltGrubu
|
||||
FROM ProductFilterWithDescription('TR') AS P
|
||||
WHERE P.IsBlocked = 0
|
||||
AND NULLIF(LTRIM(RTRIM(CONVERT(NVARCHAR(200), P.ProductAtt42Desc))), '') IS NOT NULL
|
||||
AND NULLIF(LTRIM(RTRIM(CONVERT(NVARCHAR(200), P.ProductAtt01Desc))), '') IS NOT NULL
|
||||
AND NULLIF(LTRIM(RTRIM(CONVERT(NVARCHAR(200), P.ProductAtt02Desc))), '') IS NOT NULL
|
||||
AND (
|
||||
@p1 = ''
|
||||
OR CONVERT(NVARCHAR(200), P.ProductAtt42Desc) LIKE @p3
|
||||
OR CONVERT(NVARCHAR(200), P.ProductAtt01Desc) LIKE @p3
|
||||
OR CONVERT(NVARCHAR(200), P.ProductAtt02Desc) LIKE @p3
|
||||
)
|
||||
GROUP BY
|
||||
CONVERT(NVARCHAR(200), P.ProductAtt42Desc),
|
||||
CONVERT(NVARCHAR(200), P.ProductAtt01Desc),
|
||||
CONVERT(NVARCHAR(200), P.ProductAtt02Desc)
|
||||
ORDER BY
|
||||
CONVERT(NVARCHAR(200), P.ProductAtt42Desc),
|
||||
CONVERT(NVARCHAR(200), P.ProductAtt02Desc),
|
||||
CONVERT(NVARCHAR(200), P.ProductAtt01Desc)
|
||||
`
|
||||
return mssqlDB.QueryContext(ctx, sqlText, search, limit, searchLike)
|
||||
}
|
||||
|
||||
func GetProductionProductCostingMTBolumOptions(ctx context.Context, uretimDB *sql.DB, search string, limit int) (*sql.Rows, error) {
|
||||
search = strings.TrimSpace(search)
|
||||
if limit <= 0 {
|
||||
limit = 50
|
||||
}
|
||||
searchLike := "%" + search + "%"
|
||||
sqlText := `
|
||||
SELECT TOP (@p2)
|
||||
ISNULL(B.nUrtMTBolumID, 0) AS nUrtMTBolumID,
|
||||
ISNULL(B.sAdi, '') AS sAdi
|
||||
FROM dbo.spUrtMTBolum B WITH (NOLOCK)
|
||||
WHERE ISNULL(B.bAktif, 0) = 1
|
||||
AND (@p1 = '' OR ISNULL(B.sAdi, '') LIKE @p3 OR CONVERT(VARCHAR(32), ISNULL(B.nUrtMTBolumID, 0)) LIKE @p3)
|
||||
ORDER BY B.nUrtMTBolumID
|
||||
`
|
||||
return uretimDB.QueryContext(ctx, sqlText, search, limit, searchLike)
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// Maliyet Parca Eslestirme (URETIM DB)
|
||||
// ============================================================
|
||||
|
||||
func ListProductionProductCostingParcaMappings(ctx context.Context, uretimDB *sql.DB, urunIlkGrubu string, urunAnaGrubu string, urunAltGrubu string, nUrtMTBolumID int, onlyActive *bool) (*sql.Rows, error) {
|
||||
urunIlkGrubu = strings.TrimSpace(urunIlkGrubu)
|
||||
urunAnaGrubu = strings.TrimSpace(urunAnaGrubu)
|
||||
urunAltGrubu = strings.TrimSpace(urunAltGrubu)
|
||||
sqlText := `
|
||||
SELECT
|
||||
M.id,
|
||||
ISNULL(M.UrunIlkGrubu, '') AS UrunIlkGrubu,
|
||||
ISNULL(M.UrunAnaGrubu, '') AS UrunAnaGrubu,
|
||||
ISNULL(M.UrunAltGrubu, '') AS UrunAltGrubu,
|
||||
ISNULL(M.nUrtMTBolumID, 0) AS nUrtMTBolumID,
|
||||
ISNULL(B.sAdi, '') AS MTBolumAdi,
|
||||
ISNULL(H.HammaddeTurleri, '') AS HammaddeTurleri,
|
||||
CAST(CASE WHEN ISNULL(M.bAktif, 0) = 1 THEN 1 ELSE 0 END AS bit) AS bAktif,
|
||||
CONVERT(VARCHAR(16), M.dteIslemTarihi, 120) AS dteIslemTarihi,
|
||||
ISNULL(M.sKullaniciAdi, '') AS sKullaniciAdi
|
||||
FROM dbo.mk_MaliyetParcaEslestirme M WITH (NOLOCK)
|
||||
LEFT JOIN dbo.spUrtMTBolum B WITH (NOLOCK)
|
||||
ON B.nUrtMTBolumID = M.nUrtMTBolumID
|
||||
OUTER APPLY (
|
||||
SELECT
|
||||
STUFF((
|
||||
SELECT ',' + LTRIM(RTRIM(CONVERT(VARCHAR(32), X.nHammaddeTuruNo)))
|
||||
FROM dbo.mk_MaliyetParcaEslestirme_HammaddeTuru X WITH (NOLOCK)
|
||||
WHERE X.mapping_id = M.id
|
||||
ORDER BY X.nHammaddeTuruNo
|
||||
FOR XML PATH(''), TYPE
|
||||
).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS HammaddeTurleri
|
||||
) H
|
||||
WHERE (@p1 = '' OR LTRIM(RTRIM(M.UrunIlkGrubu)) = @p1)
|
||||
AND (@p2 = '' OR LTRIM(RTRIM(M.UrunAnaGrubu)) = @p2)
|
||||
AND (@p3 = '' OR LTRIM(RTRIM(M.UrunAltGrubu)) = @p3)
|
||||
AND (@p4 <= 0 OR M.nUrtMTBolumID = @p4)
|
||||
AND (@p5 IS NULL OR ISNULL(M.bAktif, 0) = @p5)
|
||||
ORDER BY M.UrunAltGrubu, M.UrunAnaGrubu, M.nUrtMTBolumID
|
||||
`
|
||||
var activeParam any = nil
|
||||
if onlyActive != nil {
|
||||
if *onlyActive {
|
||||
activeParam = 1
|
||||
} else {
|
||||
activeParam = 0
|
||||
}
|
||||
}
|
||||
return uretimDB.QueryContext(ctx, sqlText, urunIlkGrubu, urunAnaGrubu, urunAltGrubu, nUrtMTBolumID, activeParam)
|
||||
}
|
||||
|
||||
func UpsertProductionProductCostingParcaMapping(ctx context.Context, uretimDB *sql.DB, urunIlkGrubu string, urunAnaGrubu string, urunAltGrubu string, nUrtMTBolumID int, nHammaddeTurleri []int, bAktif bool, user string) (mappingID int, err error) {
|
||||
urunIlkGrubu = strings.TrimSpace(urunIlkGrubu)
|
||||
urunAnaGrubu = strings.TrimSpace(urunAnaGrubu)
|
||||
urunAltGrubu = strings.TrimSpace(urunAltGrubu)
|
||||
user = strings.TrimSpace(user)
|
||||
activeVal := 0
|
||||
if bAktif {
|
||||
activeVal = 1
|
||||
}
|
||||
|
||||
tx, err := uretimDB.BeginTx(ctx, nil)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
_ = tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
// 1) Upsert header row and get mapping id
|
||||
sqlText := `
|
||||
DECLARE @id INT;
|
||||
|
||||
SELECT TOP 1 @id = id
|
||||
FROM dbo.mk_MaliyetParcaEslestirme WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE LTRIM(RTRIM(UrunIlkGrubu)) = @p1
|
||||
AND LTRIM(RTRIM(UrunAnaGrubu)) = @p2
|
||||
AND LTRIM(RTRIM(UrunAltGrubu)) = @p3
|
||||
AND nUrtMTBolumID = @p4;
|
||||
|
||||
IF @id IS NULL
|
||||
BEGIN
|
||||
INSERT INTO dbo.mk_MaliyetParcaEslestirme
|
||||
(UrunIlkGrubu, UrunAnaGrubu, UrunAltGrubu, nUrtMTBolumID, bAktif, sKullaniciAdi, dteIslemTarihi)
|
||||
VALUES
|
||||
(@p1, @p2, @p3, @p4, @p5, NULLIF(@p6, ''), GETDATE());
|
||||
SET @id = SCOPE_IDENTITY();
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.mk_MaliyetParcaEslestirme
|
||||
SET bAktif = @p5,
|
||||
sKullaniciAdiDeg = NULLIF(@p6, ''),
|
||||
dteIslemTarihiDeg = GETDATE()
|
||||
WHERE id = @id;
|
||||
END
|
||||
|
||||
SELECT @id;
|
||||
`
|
||||
if err = tx.QueryRowContext(ctx, sqlText, urunIlkGrubu, urunAnaGrubu, urunAltGrubu, nUrtMTBolumID, activeVal, user).Scan(&mappingID); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// 2) Replace child rows
|
||||
if _, err = tx.ExecContext(ctx, `DELETE FROM dbo.mk_MaliyetParcaEslestirme_HammaddeTuru WHERE mapping_id = @p1;`, mappingID); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
insertChild := `INSERT INTO dbo.mk_MaliyetParcaEslestirme_HammaddeTuru (mapping_id, nHammaddeTuruNo) VALUES (@p1, @p2);`
|
||||
seen := make(map[int]bool, len(nHammaddeTurleri))
|
||||
for _, n := range nHammaddeTurleri {
|
||||
if n <= 0 {
|
||||
continue
|
||||
}
|
||||
if seen[n] {
|
||||
continue
|
||||
}
|
||||
seen[n] = true
|
||||
if _, err = tx.ExecContext(ctx, insertChild, mappingID, n); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return mappingID, nil
|
||||
}
|
||||
|
||||
func SetProductionProductCostingParcaMappingActive(ctx context.Context, uretimDB *sql.DB, id int, bAktif bool, user string) error {
|
||||
user = strings.TrimSpace(user)
|
||||
activeVal := 0
|
||||
if bAktif {
|
||||
activeVal = 1
|
||||
}
|
||||
sqlText := `
|
||||
UPDATE dbo.mk_MaliyetParcaEslestirme
|
||||
SET bAktif = @p2,
|
||||
sKullaniciAdiDeg = NULLIF(@p3, ''),
|
||||
dteIslemTarihiDeg = GETDATE()
|
||||
WHERE id = @p1;
|
||||
`
|
||||
_, err := uretimDB.ExecContext(ctx, sqlText, id, activeVal, user)
|
||||
return err
|
||||
}
|
||||
|
||||
func DeleteProductionProductCostingParcaMapping(ctx context.Context, uretimDB *sql.DB, id int) error {
|
||||
tx, err := uretimDB.BeginTx(ctx, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
_ = tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
if _, err = tx.ExecContext(ctx, `DELETE FROM dbo.mk_MaliyetParcaEslestirme_HammaddeTuru WHERE mapping_id = @p1;`, id); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err = tx.ExecContext(ctx, `DELETE FROM dbo.mk_MaliyetParcaEslestirme WHERE id = @p1;`, id); err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func GetProductionNoCostProducts(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
fromDate string,
|
||||
search string,
|
||||
) (*sql.Rows, error) {
|
||||
fromDate = strings.TrimSpace(fromDate)
|
||||
if fromDate == "" {
|
||||
fromDate = "2025-06-01"
|
||||
}
|
||||
search = strings.TrimSpace(search)
|
||||
|
||||
sqlText := `
|
||||
SELECT
|
||||
CASE
|
||||
WHEN LEFT(LTRIM(RTRIM(R.sMModelKodu)), 1) IN ('N','X','S','O','I','K')
|
||||
THEN N'BAGGI URUN TARAFINDAN URETIME VERILEN'
|
||||
WHEN LEFT(LTRIM(RTRIM(R.sMModelKodu)), 1) IN ('P','F','M')
|
||||
THEN N'FASON ICIN URETILEN'
|
||||
ELSE N'Tanimsiz'
|
||||
END AS UretimSekli,
|
||||
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(SonIsEmri.nUrtSiparisNo, 0))) AS nUrtSiparisNo,
|
||||
CONVERT(VARCHAR(10), SonIsEmri.dteIslemTarihi, 23) AS dteIslemTarihi,
|
||||
ISNULL(SonIsEmri.FirmaKodu, '') AS FirmaKodu,
|
||||
ISNULL(SonIsEmri.FirmaAdi, '') AS FirmaAdi,
|
||||
ISNULL(SonIsEmri.sVeren, '') AS SonIsEmriVeren,
|
||||
ISNULL(SonIsEmri.lMMiktar_G, 0) AS lMMiktar_G,
|
||||
LTRIM(RTRIM(R.sMModelKodu)) AS sMModelKodu,
|
||||
ISNULL(R.sKodu, '') AS sKodu,
|
||||
ISNULL(R.sAdi, '') AS sAdi,
|
||||
ISNULL(R.sKullaniciAdi, '') AS sKullaniciAdi,
|
||||
ISNULL(R.sKullaniciAdiGunc, '') AS sKullaniciAdiGunc
|
||||
|
||||
FROM dbo.spUrtRecete R
|
||||
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1
|
||||
SD.nUrtSiparisID,
|
||||
SM.nUrtSiparisNo,
|
||||
SD.dteIslemTarihi,
|
||||
SD.lMMiktar_G,
|
||||
SM.sVeren,
|
||||
F.nFirmaID,
|
||||
F.sKodu AS FirmaKodu,
|
||||
F.sAciklama AS FirmaAdi
|
||||
FROM dbo.spUrtSiparisDet SD
|
||||
INNER JOIN dbo.spUrtSiparis SM
|
||||
ON SM.nUrtSiparisID = SD.nUrtSiparisID
|
||||
LEFT JOIN dbo.tbFirma F
|
||||
ON F.nFirmaID = SM.nFirmaID
|
||||
WHERE SD.nUrtReceteID = R.nUrtReceteID
|
||||
ORDER BY SD.dteIslemTarihi DESC, SD.nUrtSiparisID DESC
|
||||
) SonIsEmri
|
||||
|
||||
WHERE LTRIM(RTRIM(R.sMModelKodu)) <> ''
|
||||
AND LEN(LTRIM(RTRIM(R.sMModelKodu))) = 13
|
||||
AND R.dteIslemTarihi > @p1
|
||||
AND (
|
||||
@p2 = ''
|
||||
OR LTRIM(RTRIM(R.sMModelKodu)) LIKE '%' + @p2 + '%'
|
||||
OR ISNULL(SonIsEmri.FirmaKodu, '') LIKE '%' + @p2 + '%'
|
||||
OR ISNULL(SonIsEmri.FirmaAdi, '') LIKE '%' + @p2 + '%'
|
||||
OR ISNULL(SonIsEmri.sVeren, '') LIKE '%' + @p2 + '%'
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.spUrtOnMLMas M
|
||||
WHERE LTRIM(RTRIM(M.UrunKodu)) = LTRIM(RTRIM(R.sMModelKodu))
|
||||
)
|
||||
ORDER BY SonIsEmri.dteIslemTarihi DESC, LTRIM(RTRIM(R.sMModelKodu)) ASC
|
||||
`
|
||||
|
||||
return uretimDB.QueryContext(ctx, sqlText, fromDate, search)
|
||||
}
|
||||
|
||||
func GetProductionHasCostProducts(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
search string,
|
||||
offset int,
|
||||
limit int,
|
||||
) (*sql.Rows, error) {
|
||||
search = strings.TrimSpace(search)
|
||||
|
||||
sqlText := `
|
||||
WITH SonOnMaliyet AS (
|
||||
SELECT
|
||||
M.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY LTRIM(RTRIM(M.UrunKodu))
|
||||
ORDER BY
|
||||
M.Tarihi DESC,
|
||||
M.dteGuncellemeTarihi DESC,
|
||||
M.nOnMLNo DESC
|
||||
) AS rn
|
||||
FROM dbo.spUrtOnMLMas M
|
||||
WHERE LTRIM(RTRIM(M.UrunKodu)) <> ''
|
||||
),
|
||||
SonSiparis AS (
|
||||
SELECT
|
||||
LTRIM(RTRIM(sMModelKodu)) AS UrunKodu,
|
||||
MAX(dteIslemTarihi) AS SonSiparisTarihi
|
||||
FROM dbo.spUrtSiparisDet
|
||||
GROUP BY LTRIM(RTRIM(sMModelKodu))
|
||||
)
|
||||
SELECT
|
||||
CASE
|
||||
WHEN LEFT(LTRIM(RTRIM(OM.UrunKodu)), 1) IN ('N','X','S','O','I','K')
|
||||
THEN N'BAGGI URUN TARAFINDAN URETIME VERILEN'
|
||||
WHEN LEFT(LTRIM(RTRIM(OM.UrunKodu)), 1) IN ('P','F','M')
|
||||
THEN N'FASON ICIN URETILEN'
|
||||
ELSE N'Tanimsiz'
|
||||
END AS UretimSekli,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(OM.nOnMLNo, 0))) AS nOnMLNo,
|
||||
LTRIM(RTRIM(ISNULL(OM.UrunKodu, ''))) AS UrunKodu,
|
||||
ISNULL(OM.UrunAdi, '') AS UrunAdi,
|
||||
CONVERT(VARCHAR(10), OM.Tarihi, 23) AS Tarihi,
|
||||
CONVERT(VARCHAR(10), OM.dteKayitTarihi, 23) AS dteKayitTarihi,
|
||||
ISNULL(OM.sKullaniciAdi, '') AS sKullaniciAdi,
|
||||
ISNULL(OM.lTutarTL, 0) AS lTutarTL,
|
||||
ISNULL(OM.lTutarUSD, 0) AS lTutarUSD,
|
||||
ISNULL(OM.lTutarEURO, 0) AS lTutarEURO,
|
||||
CONVERT(VARCHAR(10), OM.dteGuncellemeTarihi, 23) AS dteGuncellemeTarihi,
|
||||
ISNULL(OM.sGuncellemeKullaniciAdi, '') AS sGuncellemeKullaniciAdi,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(OM.nUrtReceteID, 0))) AS nUrtReceteID,
|
||||
ISNULL(OM.sAciklama, '') AS sAciklama,
|
||||
ISNULL(CONVERT(VARCHAR(10), SS.SonSiparisTarihi, 23), '') AS SonSiparisTarihi,
|
||||
CASE
|
||||
WHEN ISNULL(OM.lTutarUSD, 0) = 0 THEN N'GUNCELLEME GEREKIYOR'
|
||||
WHEN SS.SonSiparisTarihi IS NULL THEN N'SIPARIS YOK'
|
||||
WHEN SS.SonSiparisTarihi > OM.Tarihi THEN N'GUNCELLEME GEREKIYOR'
|
||||
ELSE N'GUNCEL'
|
||||
END AS MaliyetDurumu
|
||||
FROM SonOnMaliyet OM
|
||||
LEFT JOIN SonSiparis SS
|
||||
ON SS.UrunKodu = LTRIM(RTRIM(OM.UrunKodu))
|
||||
WHERE OM.rn = 1
|
||||
AND (
|
||||
@p1 = ''
|
||||
OR RTRIM(CONVERT(VARCHAR(32), ISNULL(OM.nOnMLNo, 0))) LIKE '%' + @p1 + '%'
|
||||
OR LTRIM(RTRIM(OM.UrunKodu)) LIKE '%' + @p1 + '%'
|
||||
OR ISNULL(OM.UrunAdi, '') LIKE '%' + @p1 + '%'
|
||||
OR ISNULL(OM.sAciklama, '') LIKE '%' + @p1 + '%'
|
||||
)
|
||||
ORDER BY
|
||||
SS.SonSiparisTarihi DESC,
|
||||
OM.nOnMLNo DESC
|
||||
OFFSET @p2 ROWS
|
||||
FETCH NEXT @p3 ROWS ONLY
|
||||
`
|
||||
|
||||
return uretimDB.QueryContext(ctx, sqlText, search, offset, limit)
|
||||
}
|
||||
|
||||
func GetProductionHasCostHistoryByProductCode(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
productCode string,
|
||||
) (*sql.Rows, error) {
|
||||
productCode = strings.TrimSpace(productCode)
|
||||
|
||||
sqlText := `
|
||||
SELECT
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(M.nOnMLNo, 0))) AS nOnMLNo,
|
||||
LTRIM(RTRIM(ISNULL(M.UrunKodu, ''))) AS UrunKodu,
|
||||
ISNULL(M.UrunAdi, '') AS UrunAdi,
|
||||
CONVERT(VARCHAR(16), M.Tarihi, 120) AS Tarihi,
|
||||
ISNULL(M.sKullaniciAdi, '') AS sKullaniciAdi,
|
||||
ISNULL(M.lTutarUSD, 0) AS lTutarUSD,
|
||||
ISNULL(M.lTutarTL, 0) AS lTutarTL,
|
||||
ISNULL(M.lTutarEURO, 0) AS lTutarEURO,
|
||||
ISNULL(M.sDovizCinsi, '') AS sDovizCinsi,
|
||||
ISNULL(M.lTutarDoviz, 0) AS lTutarDoviz,
|
||||
CONVERT(VARCHAR(16), M.dteGuncellemeTarihi, 120) AS dteGuncellemeTarihi,
|
||||
ISNULL(M.sGuncellemeKullaniciAdi, '') AS sGuncellemeKullaniciAdi,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(M.nUrtReceteID, 0))) AS nUrtReceteID,
|
||||
ISNULL(M.sAciklama, '') AS sAciklama
|
||||
FROM dbo.spUrtOnMLMas M
|
||||
WHERE LTRIM(RTRIM(M.UrunKodu)) = @p1
|
||||
ORDER BY
|
||||
M.Tarihi DESC,
|
||||
M.dteGuncellemeTarihi DESC,
|
||||
M.nOnMLNo DESC
|
||||
`
|
||||
|
||||
return uretimDB.QueryContext(ctx, sqlText, productCode)
|
||||
}
|
||||
|
||||
func GetProductionHasCostDetailRowsByOnMLNo(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
nOnMLNo int,
|
||||
) (*sql.Rows, error) {
|
||||
sqlText := `
|
||||
SELECT
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(T.sAciklama3)), ''), N'TANIMSIZ') AS sAciklama3,
|
||||
SUM(ISNULL(D.lTutar, 0)) OVER (
|
||||
PARTITION BY ISNULL(NULLIF(LTRIM(RTRIM(T.sAciklama3)), ''), N'TANIMSIZ')
|
||||
) AS GroupTotalTutar,
|
||||
SUM(ISNULL(D.lMiktar, 0) * ISNULL(D.lDovizFiyati, 0)) OVER (
|
||||
PARTITION BY ISNULL(NULLIF(LTRIM(RTRIM(T.sAciklama3)), ''), N'TANIMSIZ')
|
||||
) AS GroupTotalUSDTutar,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(D.nOnMLNo, 0))) AS nOnMLNo,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(D.nOnMLDetNo, 0))) AS nOnMLDetNo,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(D.nHammaddeTuruNo, 0))) AS nHammaddeTuruNo,
|
||||
ISNULL(D.sKodu, '') AS sKodu,
|
||||
ISNULL(D.sAciklama, '') AS sAciklama,
|
||||
ISNULL(D.sRenk, '') AS sRenk,
|
||||
ISNULL(D.sBeden, '') AS sBeden,
|
||||
ISNULL(D.sAciklama2, '') AS sAciklama2,
|
||||
ISNULL(D.lMiktar, 0) AS lMiktar,
|
||||
ISNULL(D.lFiyat, 0) AS lFiyat,
|
||||
ISNULL(D.lTutar, 0) AS lTutar,
|
||||
ISNULL(D.sFiyatTipi, '') AS sFiyatTipi,
|
||||
ISNULL(D.sDovizCinsi, '') AS sDovizCinsi,
|
||||
ISNULL(D.lDovizKuru, 0) AS lDovizKuru,
|
||||
ISNULL(D.lDovizFiyati, 0) AS lDovizFiyati,
|
||||
D.fiyat_girilen AS fiyat_girilen,
|
||||
D.fiyat_doviz AS fiyat_doviz,
|
||||
CAST(CASE WHEN ISNULL(D.Maliyete_dahil, 0) = 1 THEN 1 ELSE 0 END AS bit) AS maliyete_dahil,
|
||||
D.cm_price_type_id AS cm_price_type_id,
|
||||
ISNULL(D.lMiktar, 0) * ISNULL(D.lDovizFiyati, 0) AS usdTutar,
|
||||
0.0 AS eurTutar,
|
||||
0.0 AS gbpTutar,
|
||||
ISNULL(D.sBirim, '') AS sBirim,
|
||||
ISNULL(T.sAciklama, '') AS sHammaddeTuruAdi,
|
||||
ISNULL(B.sAdi, '') AS sParcaAdi
|
||||
FROM dbo.spUrtOnMLMasDet D
|
||||
LEFT JOIN dbo.spUrtOnMLHammaddeTuru T
|
||||
ON T.nHammaddeTuruNo = D.nHammaddeTuruNo
|
||||
LEFT JOIN dbo.spUrtMTBolum B
|
||||
ON B.nUrtMTBolumID = D.nUrtMTBolumID
|
||||
WHERE D.nOnMLNo = @p1
|
||||
ORDER BY
|
||||
GroupTotalTutar DESC,
|
||||
sAciklama3 ASC,
|
||||
ISNULL(D.lTutar, 0) DESC,
|
||||
D.nOnMLDetNo ASC
|
||||
`
|
||||
|
||||
return uretimDB.QueryContext(ctx, sqlText, nOnMLNo)
|
||||
}
|
||||
|
||||
func GetProductionHasCostDetailHeaderByOnMLNo(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
nOnMLNo int,
|
||||
) (*sql.Row, error) {
|
||||
sqlText := `
|
||||
SELECT TOP 1
|
||||
ISNULL(UF.UretimiYapanFirma, '') AS UretimiYapanFirma,
|
||||
ISNULL(UF.SonIsEmriVeren, '') AS SonIsEmriVeren,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(M.nOnMLNo, 0))) AS nOnMLNo,
|
||||
LTRIM(RTRIM(ISNULL(M.UrunKodu, ''))) AS UrunKodu,
|
||||
ISNULL(M.UrunAdi, '') AS UrunAdi,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(M.uretim_sekli_id, 0))) AS uretim_sekli_id,
|
||||
ISNULL(US.aciklama, '') AS uretim_sekli,
|
||||
CONVERT(VARCHAR(16), M.dteKayitTarihi, 120) AS dteKayitTarihi,
|
||||
ISNULL(M.sKullaniciAdi, '') AS sKullaniciAdi,
|
||||
ISNULL(M.lTutarTL, 0) AS lTutarTL,
|
||||
ISNULL(M.lTutarUSD, 0) AS lTutarUSD,
|
||||
ISNULL(M.lTutarEURO, 0) AS lTutarEURO,
|
||||
0.0 AS lTutarGBP,
|
||||
ISNULL(M.sDovizCinsi, '') AS sDovizCinsi,
|
||||
ISNULL(M.lTutarDoviz, 0) AS lTutarDoviz,
|
||||
CONVERT(VARCHAR(16), M.dteGuncellemeTarihi, 120) AS dteGuncellemeTarihi,
|
||||
ISNULL(M.sGuncellemeKullaniciAdi, '') AS sGuncellemeKullaniciAdi,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(M.nUrtReceteID, 0))) AS nUrtReceteID
|
||||
FROM dbo.spUrtOnMLMas M
|
||||
LEFT JOIN dbo.mk_uretim_sekli US
|
||||
ON US.id = M.uretim_sekli_id
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1
|
||||
ISNULL(F.sAciklama, '') AS UretimiYapanFirma,
|
||||
ISNULL(SM.sVeren, '') AS SonIsEmriVeren
|
||||
FROM dbo.spUrtSiparisDet SD
|
||||
INNER JOIN dbo.spUrtSiparis SM
|
||||
ON SM.nUrtSiparisID = SD.nUrtSiparisID
|
||||
LEFT JOIN dbo.tbFirma F
|
||||
ON F.nFirmaID = SM.nFirmaID
|
||||
WHERE LTRIM(RTRIM(SD.sMModelKodu)) = LTRIM(RTRIM(M.UrunKodu))
|
||||
ORDER BY SD.dteIslemTarihi DESC, SD.nUrtSiparisID DESC
|
||||
) UF
|
||||
WHERE M.nOnMLNo = @p1
|
||||
ORDER BY M.nOnMLNo DESC
|
||||
`
|
||||
|
||||
return uretimDB.QueryRowContext(ctx, sqlText, nOnMLNo), nil
|
||||
}
|
||||
|
||||
func GetProductionNoCostDetailHeaderByRecipeCode(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
recipeCode string,
|
||||
productCode string,
|
||||
) (*sql.Row, error) {
|
||||
recipeCode = strings.TrimSpace(recipeCode)
|
||||
productCode = strings.TrimSpace(productCode)
|
||||
utils.SlogFromContext(ctx).With(
|
||||
"query", "production-product-costing.no-cost-detail-header",
|
||||
"recete_kodu", recipeCode,
|
||||
"urun_kodu", productCode,
|
||||
).Info("query dispatch")
|
||||
|
||||
sqlText := `
|
||||
WITH RecipeMatch AS (
|
||||
SELECT TOP 1
|
||||
R.nUrtReceteID,
|
||||
LTRIM(RTRIM(ISNULL(R.sMModelKodu, ''))) AS UrunKodu,
|
||||
ISNULL(R.sAdi, '') AS UrunAdi,
|
||||
CONVERT(VARCHAR(16), R.dteIslemTarihi, 120) AS dteKayitTarihi,
|
||||
ISNULL(R.sKullaniciAdi, '') AS sKullaniciAdi,
|
||||
ISNULL(R.sKullaniciAdiGunc, '') AS sGuncellemeKullaniciAdi,
|
||||
CASE
|
||||
WHEN LEFT(LTRIM(RTRIM(R.sMModelKodu)), 1) IN ('N','X','S','O','I','K')
|
||||
THEN N'BAGGI URUN TARAFINDAN URETIME VERILEN'
|
||||
WHEN LEFT(LTRIM(RTRIM(R.sMModelKodu)), 1) IN ('P','F','M')
|
||||
THEN N'FASON ICIN URETILEN'
|
||||
ELSE N'Tanimsiz'
|
||||
END AS UretimSekli
|
||||
FROM dbo.spUrtRecete R
|
||||
WHERE LTRIM(RTRIM(ISNULL(R.sKodu, ''))) = @p1
|
||||
AND (@p2 = '' OR LTRIM(RTRIM(ISNULL(R.sMModelKodu, ''))) = @p2)
|
||||
ORDER BY
|
||||
R.dteIslemTarihi DESC,
|
||||
R.nUrtReceteID DESC
|
||||
)
|
||||
SELECT TOP 1
|
||||
ISNULL(SonIsEmri.FirmaAdi, '') AS UretimiYapanFirma,
|
||||
ISNULL(SonIsEmri.SonIsEmriVeren, '') AS SonIsEmriVeren,
|
||||
'' AS nOnMLNo,
|
||||
RM.UrunKodu,
|
||||
RM.UrunAdi,
|
||||
'' AS UretimSekliID,
|
||||
RM.UretimSekli,
|
||||
ISNULL(SonIsEmri.dteIslemTarihi, RM.dteKayitTarihi) AS dteKayitTarihi,
|
||||
RM.sKullaniciAdi,
|
||||
0.0 AS lTutarTL,
|
||||
0.0 AS lTutarUSD,
|
||||
0.0 AS lTutarEURO,
|
||||
0.0 AS lTutarGBP,
|
||||
'USD' AS sDovizCinsi,
|
||||
0.0 AS lTutarDoviz,
|
||||
'' AS dteGuncellemeTarihi,
|
||||
RM.sGuncellemeKullaniciAdi,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(RM.nUrtReceteID, 0))) AS nUrtReceteID
|
||||
FROM RecipeMatch RM
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1
|
||||
ISNULL(F.sAciklama, '') AS FirmaAdi,
|
||||
ISNULL(SM.sVeren, '') AS SonIsEmriVeren,
|
||||
CONVERT(VARCHAR(16), SD.dteIslemTarihi, 120) AS dteIslemTarihi
|
||||
FROM dbo.spUrtSiparisDet SD
|
||||
INNER JOIN dbo.spUrtSiparis SM
|
||||
ON SM.nUrtSiparisID = SD.nUrtSiparisID
|
||||
LEFT JOIN dbo.tbFirma F
|
||||
ON F.nFirmaID = SM.nFirmaID
|
||||
WHERE SD.nUrtReceteID = RM.nUrtReceteID
|
||||
ORDER BY SD.dteIslemTarihi DESC, SD.nUrtSiparisID DESC
|
||||
) SonIsEmri
|
||||
`
|
||||
|
||||
return uretimDB.QueryRowContext(ctx, sqlText, recipeCode, productCode), nil
|
||||
}
|
||||
|
||||
func GetProductionNoCostDetailRowsByRecipeCode(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
recipeCode string,
|
||||
productCode string,
|
||||
) (*sql.Rows, error) {
|
||||
recipeCode = strings.TrimSpace(recipeCode)
|
||||
productCode = strings.TrimSpace(productCode)
|
||||
logger := utils.SlogFromContext(ctx).With(
|
||||
"query", "production-product-costing.no-cost-detail-rows",
|
||||
"recete_kodu", recipeCode,
|
||||
"urun_kodu", productCode,
|
||||
)
|
||||
logger.Info("query dispatch")
|
||||
|
||||
sqlText := `
|
||||
WITH RecipeMatch AS (
|
||||
SELECT TOP 1
|
||||
R.nUrtReceteID
|
||||
FROM dbo.spUrtRecete R
|
||||
WHERE LTRIM(RTRIM(ISNULL(R.sKodu, ''))) = @p1
|
||||
AND (@p2 = '' OR LTRIM(RTRIM(ISNULL(R.sMModelKodu, ''))) = @p2)
|
||||
ORDER BY
|
||||
R.dteIslemTarihi DESC,
|
||||
R.nUrtReceteID DESC
|
||||
),
|
||||
HammaddeTekil AS (
|
||||
SELECT
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(HT.sAciklama3)), ''), ISNULL(NULLIF(LTRIM(RTRIM(HT.sAciklama)), ''), N'TANIMSIZ')) AS sAciklama3,
|
||||
ISNULL(HT.nHammaddeTuruNo, 0) AS nHammaddeTuruNoSort,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(HT.nHammaddeTuruNo, 0))) AS nHammaddeTuruNo,
|
||||
-- Match URETIM's sp_pUrtOnMaliyetRecetedenKop behavior: use model code + color code instead of variant stock code.
|
||||
ISNULL(S.sModel, ISNULL(S.sKodu, '')) AS sKodu,
|
||||
ISNULL(S.sAciklama, '') AS sAciklama,
|
||||
ISNULL(S.sRenk, '') AS sRenk,
|
||||
ISNULL(HT.sAciklama, '') AS sHammaddeTuruAdi,
|
||||
ISNULL(S.sBirimCinsi1, '') AS sBirim,
|
||||
ISNULL(RMik.lHMiktar, 0) AS lMiktar,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY HT.nHammaddeTuruNo
|
||||
ORDER BY ISNULL(S.sModel, ISNULL(S.sKodu, ''))
|
||||
) AS rn,
|
||||
ROW_NUMBER() OVER (
|
||||
ORDER BY HT.nHammaddeTuruNo, ISNULL(S.sModel, ISNULL(S.sKodu, ''))
|
||||
) AS rowNo
|
||||
FROM RecipeMatch R
|
||||
INNER JOIN dbo.spUrtRecMBolumMik RMik
|
||||
ON RMik.nUrtReceteID = R.nUrtReceteID
|
||||
LEFT JOIN dbo.tbStok S
|
||||
ON S.nStokID = RMik.nHStokID
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1
|
||||
H.nHammaddeTuruNo,
|
||||
H.sAciklama,
|
||||
H.sAciklama3
|
||||
FROM dbo.spUrtOnMLHammaddeTuru H
|
||||
WHERE H.nUrtMBolumID = RMik.nUrtMBolumID
|
||||
ORDER BY
|
||||
CASE WHEN H.nUrtMTBolumID = RMik.nUrtMTBolumID THEN 0 ELSE 1 END,
|
||||
H.nHammaddeTuruNo
|
||||
) HT
|
||||
WHERE HT.nHammaddeTuruNo IS NOT NULL
|
||||
)
|
||||
SELECT
|
||||
HT.sAciklama3,
|
||||
0.0 AS GroupTotalTutar,
|
||||
0.0 AS GroupTotalUSDTutar,
|
||||
'' AS nOnMLNo,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(HT.rowNo, 0))) AS nOnMLDetNo,
|
||||
HT.nHammaddeTuruNo,
|
||||
HT.sKodu,
|
||||
HT.sAciklama,
|
||||
HT.sRenk AS sRenk,
|
||||
'' AS sBeden,
|
||||
'' AS sAciklama2,
|
||||
HT.lMiktar,
|
||||
0.0 AS lFiyat,
|
||||
0.0 AS lTutar,
|
||||
'' AS sFiyatTipi,
|
||||
'USD' AS sDovizCinsi,
|
||||
0.0 AS lDovizKuru,
|
||||
0.0 AS lDovizFiyati,
|
||||
NULL AS fiyat_girilen,
|
||||
'' AS fiyat_doviz,
|
||||
CAST(1 AS bit) AS maliyete_dahil,
|
||||
NULL AS cm_price_type_id,
|
||||
0.0 AS usdTutar,
|
||||
0.0 AS eurTutar,
|
||||
0.0 AS gbpTutar,
|
||||
HT.sBirim,
|
||||
HT.sHammaddeTuruAdi,
|
||||
HT.sHammaddeTuruAdi AS sParcaAdi
|
||||
FROM HammaddeTekil HT
|
||||
WHERE HT.rn = 1
|
||||
ORDER BY
|
||||
HT.nHammaddeTuruNoSort,
|
||||
HT.sKodu
|
||||
`
|
||||
|
||||
rows, err := uretimDB.QueryContext(ctx, sqlText, recipeCode, productCode)
|
||||
if err != nil {
|
||||
logger.Error("query error", "err", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return rows, nil
|
||||
}
|
||||
|
||||
func GetProductionTypes(ctx context.Context, uretimDB *sql.DB) (*sql.Rows, error) {
|
||||
sqlText := `SELECT id, aciklama FROM dbo.mk_uretim_sekli ORDER BY id`
|
||||
return uretimDB.QueryContext(ctx, sqlText)
|
||||
}
|
||||
|
||||
func GetProductionHasCostDetailHammaddeTypeOptions(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
search string,
|
||||
limit int,
|
||||
) (*sql.Rows, error) {
|
||||
search = strings.TrimSpace(search)
|
||||
if limit <= 0 {
|
||||
limit = 50
|
||||
}
|
||||
searchLike := "%" + search + "%"
|
||||
|
||||
sqlText := `
|
||||
SELECT TOP (@p2)
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(T.nHammaddeTuruNo, 0))) AS nHammaddeTuruNo,
|
||||
ISNULL(T.sAciklama, '') AS sHammaddeTuruAdi,
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(T.sAciklama3)), ''), N'TANIMSIZ') AS sAciklama3
|
||||
FROM dbo.spUrtOnMLHammaddeTuru T
|
||||
WHERE
|
||||
ISNULL(T.bAktif, 0) = 1
|
||||
AND (
|
||||
@p1 = ''
|
||||
OR RTRIM(CONVERT(VARCHAR(32), ISNULL(T.nHammaddeTuruNo, 0))) LIKE @p3
|
||||
OR ISNULL(T.sAciklama, '') LIKE @p3
|
||||
OR ISNULL(T.sAciklama3, '') LIKE @p3
|
||||
)
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN @p1 <> '' AND RTRIM(CONVERT(VARCHAR(32), ISNULL(T.nHammaddeTuruNo, 0))) = @p1 THEN 0
|
||||
WHEN @p1 <> '' AND ISNULL(T.sAciklama, '') = @p1 THEN 1
|
||||
ELSE 2
|
||||
END,
|
||||
T.nHammaddeTuruNo
|
||||
`
|
||||
|
||||
return uretimDB.QueryContext(ctx, sqlText, search, limit, searchLike)
|
||||
}
|
||||
|
||||
func buildSQLServerFullTextPrefixQuery(search string) string {
|
||||
terms := strings.Fields(strings.TrimSpace(search))
|
||||
parts := make([]string, 0, len(terms))
|
||||
|
||||
for _, term := range terms {
|
||||
cleaned := strings.Map(func(r rune) rune {
|
||||
if unicode.IsLetter(r) || unicode.IsDigit(r) {
|
||||
return r
|
||||
}
|
||||
return -1
|
||||
}, term)
|
||||
if len([]rune(cleaned)) < 2 {
|
||||
continue
|
||||
}
|
||||
parts = append(parts, fmt.Sprintf("\"%s*\"", cleaned))
|
||||
}
|
||||
|
||||
return strings.Join(parts, " AND ")
|
||||
}
|
||||
|
||||
func hasProductionHasCostDetailItemFullTextIndex(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
) bool {
|
||||
var exists int
|
||||
err := uretimDB.QueryRowContext(ctx, `
|
||||
SELECT CASE
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM sys.fulltext_indexes fi
|
||||
INNER JOIN sys.fulltext_index_columns fic
|
||||
ON fic.object_id = fi.object_id
|
||||
INNER JOIN sys.columns c
|
||||
ON c.object_id = fic.object_id
|
||||
AND c.column_id = fic.column_id
|
||||
WHERE fi.object_id = OBJECT_ID('dbo.tbStok')
|
||||
AND c.name = 'sAciklama'
|
||||
) THEN 1 ELSE 0
|
||||
END`).Scan(&exists)
|
||||
return err == nil && exists == 1
|
||||
}
|
||||
|
||||
func GetProductionHasCostDetailItemOptions(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
search string,
|
||||
limit int,
|
||||
) (*sql.Rows, error) {
|
||||
search = strings.TrimSpace(search)
|
||||
if limit <= 0 {
|
||||
limit = 50
|
||||
}
|
||||
if search == "" {
|
||||
return uretimDB.QueryContext(ctx, `
|
||||
SELECT TOP (0)
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(S.nStokID, 0))) AS nStokID,
|
||||
LTRIM(RTRIM(CONVERT(NVARCHAR(255), ISNULL(S.sKodu, '')))) AS sKodu,
|
||||
LTRIM(RTRIM(CONVERT(NVARCHAR(255), ISNULL(S.sAciklama, '')))) AS sAciklama,
|
||||
LTRIM(RTRIM(CONVERT(NVARCHAR(255), ISNULL(S.sModel, '')))) AS sModel,
|
||||
LTRIM(RTRIM(CONVERT(NVARCHAR(64), ISNULL(S.sBirimCinsi1, '')))) AS sBirim
|
||||
FROM dbo.tbStok S`)
|
||||
}
|
||||
|
||||
searchExact := search
|
||||
searchPrefix := search + "%"
|
||||
searchLike := "%" + search + "%"
|
||||
searchLen := len([]rune(search))
|
||||
numericStokID, numericErr := strconv.Atoi(search)
|
||||
hasNumericStokID := numericErr == nil
|
||||
fullTextSearch := buildSQLServerFullTextPrefixQuery(search)
|
||||
useFullText := searchLen >= 3 && fullTextSearch != "" && hasProductionHasCostDetailItemFullTextIndex(ctx, uretimDB)
|
||||
|
||||
baseSelect := `
|
||||
SELECT TOP (@p2)
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(S.nStokID, 0))) AS nStokID,
|
||||
LTRIM(RTRIM(CONVERT(NVARCHAR(255), ISNULL(S.sKodu, '')))) AS sKodu,
|
||||
LTRIM(RTRIM(CONVERT(NVARCHAR(255), ISNULL(S.sAciklama, '')))) AS sAciklama,
|
||||
LTRIM(RTRIM(CONVERT(NVARCHAR(255), ISNULL(S.sModel, '')))) AS sModel,
|
||||
LTRIM(RTRIM(CONVERT(NVARCHAR(64), ISNULL(S.sBirimCinsi1, '')))) AS sBirim
|
||||
FROM dbo.tbStok S
|
||||
WHERE
|
||||
(ISNULL(S.IsBlocked, 0) = 0)
|
||||
AND S.sModel LIKE '_.%%'
|
||||
AND (
|
||||
(@p5 = 1 AND S.nStokID = @p6)
|
||||
OR S.sKodu = @p1
|
||||
OR S.sKodu LIKE @p3
|
||||
OR %s
|
||||
)
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN S.sKodu = @p1 THEN 0
|
||||
WHEN (@p5 = 1 AND S.nStokID = @p6) THEN 1
|
||||
WHEN S.sKodu LIKE @p3 THEN 2
|
||||
ELSE 3
|
||||
END,
|
||||
S.sKodu
|
||||
OPTION (RECOMPILE)
|
||||
`
|
||||
|
||||
if useFullText {
|
||||
sqlText := fmt.Sprintf(baseSelect, `CONTAINS(S.sAciklama, @p4)`)
|
||||
return uretimDB.QueryContext(ctx, sqlText, searchExact, limit, searchPrefix, fullTextSearch, hasNumericStokID, numericStokID)
|
||||
}
|
||||
|
||||
sqlText := fmt.Sprintf(baseSelect, `(@p4 >= 3 AND S.sAciklama LIKE @p7)`)
|
||||
return uretimDB.QueryContext(ctx, sqlText, searchExact, limit, searchPrefix, searchLen, hasNumericStokID, numericStokID, searchLike)
|
||||
}
|
||||
|
||||
func GetProductionHasCostDetailColorOptions(
|
||||
ctx context.Context,
|
||||
mssqlDB *sql.DB,
|
||||
modelCode string,
|
||||
search string,
|
||||
limit int,
|
||||
) (*sql.Rows, error) {
|
||||
modelCode = strings.TrimSpace(modelCode)
|
||||
search = strings.TrimSpace(search)
|
||||
if limit <= 0 {
|
||||
limit = 50
|
||||
}
|
||||
searchLike := "%" + search + "%"
|
||||
|
||||
sqlText := `
|
||||
WITH ColorSource AS (
|
||||
SELECT DISTINCT
|
||||
LTRIM(RTRIM(CONVERT(NVARCHAR(64), ISNULL(T.sRenk, '')))) AS ColorCode
|
||||
FROM dbo.tbStok T
|
||||
WHERE ISNULL(T.IsBlocked, 0) = 0
|
||||
AND LTRIM(RTRIM(CONVERT(NVARCHAR(255), ISNULL(T.sModel, '')))) = @p1
|
||||
AND LTRIM(RTRIM(CONVERT(NVARCHAR(64), ISNULL(T.sRenk, '')))) <> ''
|
||||
)
|
||||
SELECT TOP (@p2)
|
||||
LTRIM(RTRIM(ISNULL(S.ColorCode, ''))) AS colorCode,
|
||||
ISNULL(C.ColorDescription, '') AS colorDescription
|
||||
FROM (
|
||||
SELECT ColorCode
|
||||
FROM ColorSource
|
||||
) S
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ColorDescription
|
||||
FROM dbo.cdColorDesc CD
|
||||
WHERE CD.LangCode = 'TR'
|
||||
AND LTRIM(RTRIM(ISNULL(CD.ColorCode, ''))) = S.ColorCode
|
||||
) C
|
||||
WHERE @p1 <> ''
|
||||
AND (
|
||||
@p3 = ''
|
||||
OR LTRIM(RTRIM(ISNULL(S.ColorCode, ''))) LIKE @p4
|
||||
OR ISNULL(C.ColorDescription, '') LIKE @p4
|
||||
)
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN @p3 <> '' AND LTRIM(RTRIM(ISNULL(S.ColorCode, ''))) = @p3 THEN 0
|
||||
WHEN @p3 <> '' AND ISNULL(C.ColorDescription, '') = @p3 THEN 1
|
||||
ELSE 2
|
||||
END,
|
||||
LTRIM(RTRIM(ISNULL(S.ColorCode, '')))
|
||||
`
|
||||
|
||||
return mssqlDB.QueryContext(ctx, sqlText, modelCode, limit, search, searchLike)
|
||||
}
|
||||
|
||||
func GetProductionHasCostDetailExchangeRatesByDate(
|
||||
ctx context.Context,
|
||||
mssqlDB *sql.DB,
|
||||
costDate string,
|
||||
) (*sql.Row, error) {
|
||||
costDate = strings.TrimSpace(costDate)
|
||||
|
||||
sqlText := `
|
||||
DECLARE @targetDate date = ISNULL(CONVERT(date, NULLIF(@p1, ''), 23), CONVERT(date, GETDATE()))
|
||||
|
||||
SELECT
|
||||
CONVERT(VARCHAR(10), @targetDate, 23) AS rateDate,
|
||||
ISNULL((
|
||||
SELECT TOP 1 Rate
|
||||
FROM dbo.AllExchangeRates
|
||||
WHERE CurrencyCode = 'USD'
|
||||
AND RelationCurrencyCode = 'TRY'
|
||||
AND ExchangeTypeCode = 6
|
||||
AND Rate > 0
|
||||
AND CONVERT(date, [Date]) <= @targetDate
|
||||
ORDER BY
|
||||
CASE WHEN CONVERT(date, [Date]) = @targetDate THEN 0 ELSE 1 END,
|
||||
[Date] DESC
|
||||
), 0) AS usdRate,
|
||||
ISNULL((
|
||||
SELECT TOP 1 Rate
|
||||
FROM dbo.AllExchangeRates
|
||||
WHERE CurrencyCode = 'EUR'
|
||||
AND RelationCurrencyCode = 'TRY'
|
||||
AND ExchangeTypeCode = 6
|
||||
AND Rate > 0
|
||||
AND CONVERT(date, [Date]) <= @targetDate
|
||||
ORDER BY
|
||||
CASE WHEN CONVERT(date, [Date]) = @targetDate THEN 0 ELSE 1 END,
|
||||
[Date] DESC
|
||||
), 0) AS eurRate,
|
||||
ISNULL((
|
||||
SELECT TOP 1 Rate
|
||||
FROM dbo.AllExchangeRates
|
||||
WHERE CurrencyCode = 'GBP'
|
||||
AND RelationCurrencyCode = 'TRY'
|
||||
AND ExchangeTypeCode = 6
|
||||
AND Rate > 0
|
||||
AND CONVERT(date, [Date]) <= @targetDate
|
||||
ORDER BY
|
||||
CASE WHEN CONVERT(date, [Date]) = @targetDate THEN 0 ELSE 1 END,
|
||||
[Date] DESC
|
||||
), 0) AS gbpRate
|
||||
`
|
||||
|
||||
return mssqlDB.QueryRowContext(ctx, sqlText, costDate), nil
|
||||
}
|
||||
|
||||
func GetProductionHasCostLatestPurchasePriceForItem(
|
||||
ctx context.Context,
|
||||
mssqlDB *sql.DB,
|
||||
sKodu string,
|
||||
colorCode string,
|
||||
itemDim1Code string,
|
||||
costDate string,
|
||||
) (*sql.Row, error) {
|
||||
sKodu = strings.TrimSpace(sKodu)
|
||||
colorCode = strings.TrimSpace(colorCode)
|
||||
itemDim1Code = strings.TrimSpace(itemDim1Code)
|
||||
costDate = strings.TrimSpace(costDate)
|
||||
|
||||
sqlText := `
|
||||
WITH BASE AS (
|
||||
SELECT
|
||||
A.InvoiceDate,
|
||||
A.InvoiceNumber,
|
||||
A.ProcessCode,
|
||||
A.CurrAccTypeCode,
|
||||
A.CurrAccCode,
|
||||
A.ItemTypeCode,
|
||||
A.ItemCode,
|
||||
A.ColorCode,
|
||||
A.ItemDim1Code,
|
||||
A.Qty1,
|
||||
A.Doc_Price,
|
||||
A.Doc_Amount,
|
||||
A.Doc_CurrencyCode
|
||||
FROM AllInvoicesWithAttributes A
|
||||
WHERE A.ProcessCode IN ('BP')
|
||||
AND A.ATAtt01 IN (1, 2)
|
||||
AND A.CompanyCode IN (1, 2, 5)
|
||||
AND A.IsCompleted = 1
|
||||
AND YEAR(A.InvoiceDate) >= 2022
|
||||
AND LTRIM(RTRIM(A.ItemCode)) = @p1
|
||||
AND (NULLIF(@p2, '') IS NULL OR CONVERT(date, A.InvoiceDate) < CONVERT(date, NULLIF(@p2, ''), 23))
|
||||
)
|
||||
SELECT TOP 1
|
||||
'MAN' AS priceType,
|
||||
CONVERT(VARCHAR(16), B.InvoiceDate, 120) AS Tarih,
|
||||
ISNULL(B.InvoiceNumber, '') AS FaturaKodu,
|
||||
LTRIM(RTRIM(ISNULL(B.ItemCode, ''))) AS MasrafKodu,
|
||||
ISNULL(ID.ItemDescription, '') AS MasrafDetay,
|
||||
ISNULL(B.ColorCode, '') AS ColorCode,
|
||||
ISNULL(COL.ColorDescription, '') AS ColorDescription,
|
||||
ISNULL(B.ItemDim1Code, '') AS ItemDim1Code,
|
||||
ISNULL(DIM1.ItemDim1Description, '') AS ItemDim1Description,
|
||||
ISNULL(B.Doc_Price, 0) AS EvrakFiyat,
|
||||
ISNULL(B.Doc_CurrencyCode, '') AS EvrakDoviz
|
||||
FROM BASE B
|
||||
LEFT JOIN cdItem CI
|
||||
ON CI.ItemTypeCode = B.ItemTypeCode
|
||||
AND CI.ItemCode = B.ItemCode
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ItemDescription
|
||||
FROM cdItemDesc
|
||||
WHERE ItemTypeCode = B.ItemTypeCode
|
||||
AND ItemCode = B.ItemCode
|
||||
AND LangCode = 'TR'
|
||||
) ID
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ItemDim1Description
|
||||
FROM cdItemDim1Desc
|
||||
WHERE ItemDim1Code = B.ItemDim1Code
|
||||
AND LangCode = 'TR'
|
||||
) DIM1
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ColorDescription
|
||||
FROM cdColorDesc
|
||||
WHERE ColorCode = B.ColorCode
|
||||
AND LangCode = 'TR'
|
||||
) COL
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN @p3 <> '' AND LTRIM(RTRIM(ISNULL(B.ColorCode, ''))) = @p3 THEN 0
|
||||
WHEN @p3 = '' THEN 0
|
||||
ELSE 1
|
||||
END,
|
||||
CASE
|
||||
WHEN @p4 <> '' AND LTRIM(RTRIM(ISNULL(B.ItemDim1Code, ''))) = @p4 THEN 0
|
||||
WHEN @p4 = '' THEN 0
|
||||
ELSE 1
|
||||
END,
|
||||
B.InvoiceDate DESC,
|
||||
B.InvoiceNumber DESC
|
||||
`
|
||||
|
||||
return mssqlDB.QueryRowContext(ctx, sqlText, sKodu, costDate, colorCode, itemDim1Code), nil
|
||||
}
|
||||
|
||||
func GetProductionHasCostPurchaseHistoryByExpenseCode(
|
||||
ctx context.Context,
|
||||
mssqlDB *sql.DB,
|
||||
sKodu string,
|
||||
costDate string,
|
||||
limit int,
|
||||
) (*sql.Rows, error) {
|
||||
sKodu = strings.TrimSpace(sKodu)
|
||||
costDate = strings.TrimSpace(costDate)
|
||||
if limit <= 0 {
|
||||
limit = 250
|
||||
}
|
||||
|
||||
sqlText := `
|
||||
WITH BASE AS (
|
||||
SELECT
|
||||
A.InvoiceDate,
|
||||
A.InvoiceNumber,
|
||||
A.ProcessCode,
|
||||
A.CurrAccTypeCode,
|
||||
A.CurrAccCode,
|
||||
A.ItemTypeCode,
|
||||
A.ItemCode,
|
||||
A.ColorCode,
|
||||
A.ItemDim1Code,
|
||||
A.Qty1,
|
||||
A.Doc_Price,
|
||||
A.Doc_Amount,
|
||||
A.Doc_CurrencyCode
|
||||
FROM AllInvoicesWithAttributes A
|
||||
WHERE A.ProcessCode IN ('BP')
|
||||
AND A.ATAtt01 IN (1, 2)
|
||||
AND A.CompanyCode IN (1, 2, 5)
|
||||
AND A.IsCompleted = 1
|
||||
AND YEAR(A.InvoiceDate) >= 2022
|
||||
AND LTRIM(RTRIM(A.ItemCode)) = @p1
|
||||
AND (ISNULL(A.Doc_Price, 0) > 0 OR ISNULL(A.Doc_Amount, 0) > 0)
|
||||
AND (NULLIF(@p2, '') IS NULL OR CONVERT(date, A.InvoiceDate) < CONVERT(date, NULLIF(@p2, ''), 23))
|
||||
)
|
||||
SELECT TOP (@p3)
|
||||
'purchase' AS sourceType,
|
||||
'MAN' AS priceType,
|
||||
CONVERT(VARCHAR(16), B.InvoiceDate, 120) AS Tarih,
|
||||
ISNULL(B.InvoiceNumber, '') AS FaturaKodu,
|
||||
ISNULL(B.CurrAccCode, '') AS FirmaKodu,
|
||||
ISNULL(CAD.CurrAccDescription, '') AS FirmaAciklama,
|
||||
LTRIM(RTRIM(ISNULL(B.ItemCode, ''))) AS MasrafKodu,
|
||||
ISNULL(ID.ItemDescription, '') AS MasrafDetay,
|
||||
ISNULL(B.ColorCode, '') AS ColorCode,
|
||||
ISNULL(COL.ColorDescription, '') AS ColorDescription,
|
||||
ISNULL(B.ItemDim1Code, '') AS ItemDim1Code,
|
||||
ISNULL(DIM1.ItemDim1Description, '') AS ItemDim1Description,
|
||||
ISNULL(B.Qty1, 0) AS Miktar,
|
||||
CASE
|
||||
WHEN B.ProcessCode = 'EP' THEN ''
|
||||
ELSE ISNULL(CI.UnitOfMeasureCode1, '')
|
||||
END AS BIRIM,
|
||||
ISNULL(B.Doc_Price, 0) AS EvrakFiyat,
|
||||
ISNULL(B.Doc_Amount, 0) AS EvrakTutar,
|
||||
ISNULL(B.Doc_CurrencyCode, '') AS EvrakDoviz
|
||||
FROM BASE B
|
||||
LEFT JOIN cdItem CI
|
||||
ON CI.ItemTypeCode = B.ItemTypeCode
|
||||
AND CI.ItemCode = B.ItemCode
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ItemDescription
|
||||
FROM cdItemDesc
|
||||
WHERE ItemTypeCode = B.ItemTypeCode
|
||||
AND ItemCode = B.ItemCode
|
||||
AND LangCode = 'TR'
|
||||
) ID
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ItemDim1Description
|
||||
FROM cdItemDim1Desc
|
||||
WHERE ItemDim1Code = B.ItemDim1Code
|
||||
AND LangCode = 'TR'
|
||||
) DIM1
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ColorDescription
|
||||
FROM cdColorDesc
|
||||
WHERE ColorCode = B.ColorCode
|
||||
AND LangCode = 'TR'
|
||||
) COL
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 CurrAccDescription
|
||||
FROM cdCurrAccDesc
|
||||
WHERE CurrAccTypeCode = B.CurrAccTypeCode
|
||||
AND CurrAccCode = B.CurrAccCode
|
||||
AND LangCode = 'TR'
|
||||
) CAD
|
||||
ORDER BY
|
||||
B.InvoiceDate DESC,
|
||||
B.InvoiceNumber DESC
|
||||
`
|
||||
|
||||
return mssqlDB.QueryContext(ctx, sqlText, sKodu, costDate, limit)
|
||||
}
|
||||
|
||||
func GetProductionHasCostRecipeHistoryByExpenseCode(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
currentOnMLNo int,
|
||||
sKodu string,
|
||||
colorCode string,
|
||||
costDate string,
|
||||
limit int,
|
||||
) (*sql.Rows, error) {
|
||||
sKodu = strings.TrimSpace(sKodu)
|
||||
colorCode = strings.TrimSpace(colorCode)
|
||||
costDate = strings.TrimSpace(costDate)
|
||||
if limit <= 0 {
|
||||
limit = 250
|
||||
}
|
||||
|
||||
sqlText := `
|
||||
SELECT TOP (@p5)
|
||||
'recipe' AS sourceType,
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(D.sFiyatTipi)), ''), 'SAF') AS priceType,
|
||||
CONVERT(VARCHAR(16), COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi), 120) AS dteIslemTarihi,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(D.nOnMLNo, 0))) AS nOnMLNo,
|
||||
ISNULL(UF.FirmaKodu, '') AS FirmaKodu,
|
||||
ISNULL(UF.FirmaAciklama, '') AS FirmaAciklama,
|
||||
ISNULL(D.sKodu, '') AS sKodu,
|
||||
ISNULL(D.sAciklama, '') AS sAciklama,
|
||||
ISNULL(D.sRenk, '') AS sRenk,
|
||||
ISNULL(D.lMiktar, 0) AS lMiktar,
|
||||
ISNULL(D.sBirim, '') AS sBirim,
|
||||
CASE
|
||||
WHEN ISNULL(D.fiyat_girilen, 0) > 0 THEN ISNULL(D.fiyat_girilen, 0)
|
||||
ELSE ISNULL(D.lDovizFiyati, 0)
|
||||
END AS lDovizFiyati,
|
||||
CASE
|
||||
WHEN ISNULL(D.lDovizTutari, 0) > 0 THEN ISNULL(D.lDovizTutari, 0)
|
||||
WHEN ISNULL(D.fiyat_girilen, 0) > 0 THEN ISNULL(D.fiyat_girilen, 0) * ISNULL(D.lMiktar, 0)
|
||||
ELSE ISNULL(D.lDovizFiyati, 0) * ISNULL(D.lMiktar, 0)
|
||||
END AS lDovizTutari,
|
||||
CASE
|
||||
WHEN LTRIM(RTRIM(ISNULL(D.fiyat_doviz, ''))) <> '' THEN LTRIM(RTRIM(D.fiyat_doviz))
|
||||
WHEN LTRIM(RTRIM(ISNULL(D.sDovizCinsi, ''))) <> '' THEN LTRIM(RTRIM(D.sDovizCinsi))
|
||||
WHEN LTRIM(RTRIM(ISNULL(M.sDovizCinsi, ''))) <> '' THEN LTRIM(RTRIM(M.sDovizCinsi))
|
||||
ELSE 'USD'
|
||||
END AS USD,
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(T.sAciklama3)), ''), N'DUMMY') AS DUMMY
|
||||
FROM dbo.spUrtOnMLMasDet D
|
||||
INNER JOIN dbo.spUrtOnMLMas M
|
||||
ON M.nOnMLNo = D.nOnMLNo
|
||||
LEFT JOIN dbo.spUrtOnMLHammaddeTuru T
|
||||
ON T.nHammaddeTuruNo = D.nHammaddeTuruNo
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1
|
||||
ISNULL(F.sKodu, '') AS FirmaKodu,
|
||||
ISNULL(F.sAciklama, '') AS FirmaAciklama
|
||||
FROM dbo.spUrtSiparisDet SD
|
||||
INNER JOIN dbo.spUrtSiparis SM
|
||||
ON SM.nUrtSiparisID = SD.nUrtSiparisID
|
||||
LEFT JOIN dbo.tbFirma F
|
||||
ON F.nFirmaID = SM.nFirmaID
|
||||
WHERE (
|
||||
(ISNULL(M.nUrtReceteID, 0) > 0 AND SD.nUrtReceteID = M.nUrtReceteID)
|
||||
OR (ISNULL(M.nUrtReceteID, 0) <= 0 AND LTRIM(RTRIM(ISNULL(SD.sMModelKodu, ''))) = LTRIM(RTRIM(ISNULL(M.UrunKodu, ''))))
|
||||
)
|
||||
AND SD.dteIslemTarihi <= COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi)
|
||||
ORDER BY SD.dteIslemTarihi DESC, SD.nUrtSiparisID DESC
|
||||
) UF
|
||||
WHERE LTRIM(RTRIM(D.sKodu)) = @p1
|
||||
AND (@p2 <= 0 OR D.nOnMLNo <> @p2)
|
||||
AND (
|
||||
ISNULL(D.fiyat_girilen, 0) > 0
|
||||
OR ISNULL(D.lDovizFiyati, 0) > 0
|
||||
OR ISNULL(D.lDovizTutari, 0) > 0
|
||||
)
|
||||
AND (
|
||||
NULLIF(@p3, '') IS NULL
|
||||
OR CONVERT(date, COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi)) < CONVERT(date, NULLIF(@p3, ''), 23)
|
||||
)
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN @p4 <> '' AND LTRIM(RTRIM(ISNULL(D.sRenk, ''))) = @p4 THEN 0
|
||||
WHEN @p4 = '' THEN 0
|
||||
ELSE 1
|
||||
END,
|
||||
COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi) DESC,
|
||||
D.nOnMLNo DESC,
|
||||
D.nOnMLDetNo DESC
|
||||
`
|
||||
|
||||
return uretimDB.QueryContext(ctx, sqlText, sKodu, currentOnMLNo, costDate, colorCode, limit)
|
||||
}
|
||||
|
||||
func BuildProductionHasCostSimilarCodePrefix(sKodu string) string {
|
||||
normalizedCode := strings.ToUpper(strings.TrimSpace(sKodu))
|
||||
if normalizedCode == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
runes := []rune(normalizedCode)
|
||||
if len(runes) <= 4 {
|
||||
return normalizedCode
|
||||
}
|
||||
if len(runes) >= 5 && len(runes) > 1 && runes[1] == '.' {
|
||||
return string(runes[:5])
|
||||
}
|
||||
|
||||
return string(runes[:4])
|
||||
}
|
||||
|
||||
func GetProductionHasCostPurchaseHistoryByCodePrefix(
|
||||
ctx context.Context,
|
||||
mssqlDB *sql.DB,
|
||||
sKoduPrefix string,
|
||||
costDate string,
|
||||
limit int,
|
||||
) (*sql.Rows, error) {
|
||||
sKoduPrefix = strings.TrimSpace(sKoduPrefix)
|
||||
costDate = strings.TrimSpace(costDate)
|
||||
if limit <= 0 {
|
||||
limit = 250
|
||||
}
|
||||
|
||||
sqlText := `
|
||||
WITH BASE AS (
|
||||
SELECT
|
||||
A.InvoiceDate,
|
||||
A.InvoiceNumber,
|
||||
A.ProcessCode,
|
||||
A.CurrAccTypeCode,
|
||||
A.CurrAccCode,
|
||||
A.ItemTypeCode,
|
||||
A.ItemCode,
|
||||
A.ColorCode,
|
||||
A.ItemDim1Code,
|
||||
A.Qty1,
|
||||
A.Doc_Price,
|
||||
A.Doc_Amount,
|
||||
A.Doc_CurrencyCode
|
||||
FROM AllInvoicesWithAttributes A
|
||||
WHERE A.ProcessCode IN ('BP')
|
||||
AND A.ATAtt01 IN (1, 2)
|
||||
AND A.CompanyCode IN (1, 2, 5)
|
||||
AND A.IsCompleted = 1
|
||||
AND YEAR(A.InvoiceDate) >= 2022
|
||||
AND NULLIF(@p1, '') IS NOT NULL
|
||||
AND LTRIM(RTRIM(A.ItemCode)) LIKE @p1 + '%'
|
||||
AND (ISNULL(A.Doc_Price, 0) > 0 OR ISNULL(A.Doc_Amount, 0) > 0)
|
||||
AND (NULLIF(@p2, '') IS NULL OR CONVERT(date, A.InvoiceDate) < CONVERT(date, NULLIF(@p2, ''), 23))
|
||||
)
|
||||
SELECT TOP (@p3)
|
||||
'purchase' AS sourceType,
|
||||
'BNZ' AS priceType,
|
||||
CONVERT(VARCHAR(16), B.InvoiceDate, 120) AS Tarih,
|
||||
ISNULL(B.InvoiceNumber, '') AS FaturaKodu,
|
||||
ISNULL(B.CurrAccCode, '') AS FirmaKodu,
|
||||
ISNULL(CAD.CurrAccDescription, '') AS FirmaAciklama,
|
||||
LTRIM(RTRIM(ISNULL(B.ItemCode, ''))) AS MasrafKodu,
|
||||
ISNULL(ID.ItemDescription, '') AS MasrafDetay,
|
||||
ISNULL(B.ColorCode, '') AS ColorCode,
|
||||
ISNULL(COL.ColorDescription, '') AS ColorDescription,
|
||||
ISNULL(B.ItemDim1Code, '') AS ItemDim1Code,
|
||||
ISNULL(DIM1.ItemDim1Description, '') AS ItemDim1Description,
|
||||
ISNULL(B.Qty1, 0) AS Miktar,
|
||||
CASE
|
||||
WHEN B.ProcessCode = 'EP' THEN ''
|
||||
ELSE ISNULL(CI.UnitOfMeasureCode1, '')
|
||||
END AS BIRIM,
|
||||
ISNULL(B.Doc_Price, 0) AS EvrakFiyat,
|
||||
ISNULL(B.Doc_Amount, 0) AS EvrakTutar,
|
||||
ISNULL(B.Doc_CurrencyCode, '') AS EvrakDoviz
|
||||
FROM BASE B
|
||||
LEFT JOIN cdItem CI
|
||||
ON CI.ItemTypeCode = B.ItemTypeCode
|
||||
AND CI.ItemCode = B.ItemCode
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ItemDescription
|
||||
FROM cdItemDesc
|
||||
WHERE ItemTypeCode = B.ItemTypeCode
|
||||
AND ItemCode = B.ItemCode
|
||||
AND LangCode = 'TR'
|
||||
) ID
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ItemDim1Description
|
||||
FROM cdItemDim1Desc
|
||||
WHERE ItemDim1Code = B.ItemDim1Code
|
||||
AND LangCode = 'TR'
|
||||
) DIM1
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ColorDescription
|
||||
FROM cdColorDesc
|
||||
WHERE ColorCode = B.ColorCode
|
||||
AND LangCode = 'TR'
|
||||
) COL
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 CurrAccDescription
|
||||
FROM cdCurrAccDesc
|
||||
WHERE CurrAccTypeCode = B.CurrAccTypeCode
|
||||
AND CurrAccCode = B.CurrAccCode
|
||||
AND LangCode = 'TR'
|
||||
) CAD
|
||||
ORDER BY
|
||||
B.InvoiceDate DESC,
|
||||
B.InvoiceNumber DESC
|
||||
`
|
||||
|
||||
return mssqlDB.QueryContext(ctx, sqlText, sKoduPrefix, costDate, limit)
|
||||
}
|
||||
|
||||
func GetProductionHasCostOnMLHistoryByCodePrefix(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
sKoduPrefix string,
|
||||
costDate string,
|
||||
limit int,
|
||||
) (*sql.Rows, error) {
|
||||
sKoduPrefix = strings.TrimSpace(sKoduPrefix)
|
||||
costDate = strings.TrimSpace(costDate)
|
||||
if limit <= 0 {
|
||||
limit = 250
|
||||
}
|
||||
|
||||
sqlText := `
|
||||
SELECT TOP (@p3)
|
||||
'recipe' AS sourceType,
|
||||
'BNZ' AS priceType,
|
||||
CONVERT(VARCHAR(16), COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi), 120) AS dteIslemTarihi,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(D.nOnMLNo, 0))) AS nOnMLNo,
|
||||
ISNULL(UF.FirmaKodu, '') AS FirmaKodu,
|
||||
ISNULL(UF.FirmaAciklama, '') AS FirmaAciklama,
|
||||
ISNULL(D.sKodu, '') AS sKodu,
|
||||
ISNULL(D.sAciklama, '') AS sAciklama,
|
||||
ISNULL(D.sRenk, '') AS sRenk,
|
||||
ISNULL(D.lMiktar, 0) AS lMiktar,
|
||||
ISNULL(D.sBirim, '') AS sBirim,
|
||||
CASE
|
||||
WHEN ISNULL(D.fiyat_girilen, 0) > 0 THEN ISNULL(D.fiyat_girilen, 0)
|
||||
ELSE ISNULL(D.lDovizFiyati, 0)
|
||||
END AS lDovizFiyati,
|
||||
CASE
|
||||
WHEN ISNULL(D.lDovizTutari, 0) > 0 THEN ISNULL(D.lDovizTutari, 0)
|
||||
WHEN ISNULL(D.fiyat_girilen, 0) > 0 THEN ISNULL(D.fiyat_girilen, 0) * ISNULL(D.lMiktar, 0)
|
||||
ELSE ISNULL(D.lDovizFiyati, 0) * ISNULL(D.lMiktar, 0)
|
||||
END AS lDovizTutari,
|
||||
CASE
|
||||
WHEN LTRIM(RTRIM(ISNULL(D.fiyat_doviz, ''))) <> '' THEN LTRIM(RTRIM(D.fiyat_doviz))
|
||||
WHEN LTRIM(RTRIM(ISNULL(D.sDovizCinsi, ''))) <> '' THEN LTRIM(RTRIM(D.sDovizCinsi))
|
||||
WHEN LTRIM(RTRIM(ISNULL(M.sDovizCinsi, ''))) <> '' THEN LTRIM(RTRIM(M.sDovizCinsi))
|
||||
ELSE 'USD'
|
||||
END AS USD,
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(D.sAciklama3)), ''), N'DUMMY') AS DUMMY
|
||||
FROM dbo.spUrtOnMLMasDet D
|
||||
INNER JOIN dbo.spUrtOnMLMas M
|
||||
ON M.nOnMLNo = D.nOnMLNo
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1
|
||||
ISNULL(F.sKodu, '') AS FirmaKodu,
|
||||
ISNULL(F.sAciklama, '') AS FirmaAciklama
|
||||
FROM dbo.spUrtSiparisDet SD
|
||||
INNER JOIN dbo.spUrtSiparis SM
|
||||
ON SM.nUrtSiparisID = SD.nUrtSiparisID
|
||||
LEFT JOIN dbo.tbFirma F
|
||||
ON F.nFirmaID = SM.nFirmaID
|
||||
WHERE (
|
||||
(ISNULL(M.nUrtReceteID, 0) > 0 AND SD.nUrtReceteID = M.nUrtReceteID)
|
||||
OR (ISNULL(M.nUrtReceteID, 0) <= 0 AND LTRIM(RTRIM(ISNULL(SD.sMModelKodu, ''))) = LTRIM(RTRIM(ISNULL(M.UrunKodu, ''))))
|
||||
)
|
||||
AND SD.dteIslemTarihi <= COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi)
|
||||
ORDER BY SD.dteIslemTarihi DESC, SD.nUrtSiparisID DESC
|
||||
) UF
|
||||
WHERE NULLIF(@p1, '') IS NOT NULL
|
||||
AND LTRIM(RTRIM(ISNULL(D.sKodu, ''))) LIKE @p1 + '%'
|
||||
AND (
|
||||
ISNULL(D.fiyat_girilen, 0) > 0
|
||||
OR ISNULL(D.lDovizFiyati, 0) > 0
|
||||
OR ISNULL(D.lDovizTutari, 0) > 0
|
||||
)
|
||||
AND (
|
||||
NULLIF(@p2, '') IS NULL
|
||||
OR CONVERT(date, COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi)) < CONVERT(date, NULLIF(@p2, ''), 23)
|
||||
)
|
||||
ORDER BY
|
||||
COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi) DESC,
|
||||
D.nOnMLNo DESC,
|
||||
D.nOnMLDetNo DESC
|
||||
`
|
||||
|
||||
return uretimDB.QueryContext(ctx, sqlText, sKoduPrefix, costDate, limit)
|
||||
}
|
||||
|
||||
func GetProductionHasCostOnMLHistoryByHammaddeTuruNo(
|
||||
ctx context.Context,
|
||||
uretimDB *sql.DB,
|
||||
nHammaddeTuruNo string,
|
||||
costDate string,
|
||||
limit int,
|
||||
) (*sql.Rows, error) {
|
||||
nHammaddeTuruNo = strings.TrimSpace(nHammaddeTuruNo)
|
||||
costDate = strings.TrimSpace(costDate)
|
||||
if limit <= 0 {
|
||||
limit = 250
|
||||
}
|
||||
|
||||
sqlText := `
|
||||
SELECT TOP (@p3)
|
||||
'recipe' AS sourceType,
|
||||
'BNZ' AS priceType,
|
||||
CONVERT(VARCHAR(16), COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi), 120) AS dteIslemTarihi,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(D.nOnMLNo, 0))) AS nOnMLNo,
|
||||
ISNULL(UF.FirmaKodu, '') AS FirmaKodu,
|
||||
ISNULL(UF.FirmaAciklama, '') AS FirmaAciklama,
|
||||
ISNULL(D.sKodu, '') AS sKodu,
|
||||
ISNULL(D.sAciklama, '') AS sAciklama,
|
||||
ISNULL(D.sRenk, '') AS sRenk,
|
||||
ISNULL(D.lMiktar, 0) AS lMiktar,
|
||||
ISNULL(D.sBirim, '') AS sBirim,
|
||||
CASE
|
||||
WHEN ISNULL(D.fiyat_girilen, 0) > 0 THEN ISNULL(D.fiyat_girilen, 0)
|
||||
ELSE ISNULL(D.lDovizFiyati, 0)
|
||||
END AS lDovizFiyati,
|
||||
CASE
|
||||
WHEN ISNULL(D.lDovizTutari, 0) > 0 THEN ISNULL(D.lDovizTutari, 0)
|
||||
WHEN ISNULL(D.fiyat_girilen, 0) > 0 THEN ISNULL(D.fiyat_girilen, 0) * ISNULL(D.lMiktar, 0)
|
||||
ELSE ISNULL(D.lDovizFiyati, 0) * ISNULL(D.lMiktar, 0)
|
||||
END AS lDovizTutari,
|
||||
CASE
|
||||
WHEN LTRIM(RTRIM(ISNULL(D.fiyat_doviz, ''))) <> '' THEN LTRIM(RTRIM(D.fiyat_doviz))
|
||||
WHEN LTRIM(RTRIM(ISNULL(D.sDovizCinsi, ''))) <> '' THEN LTRIM(RTRIM(D.sDovizCinsi))
|
||||
WHEN LTRIM(RTRIM(ISNULL(M.sDovizCinsi, ''))) <> '' THEN LTRIM(RTRIM(M.sDovizCinsi))
|
||||
ELSE 'USD'
|
||||
END AS USD,
|
||||
ISNULL(NULLIF(LTRIM(RTRIM(D.sAciklama3)), ''), N'DUMMY') AS DUMMY
|
||||
FROM dbo.spUrtOnMLMasDet D
|
||||
INNER JOIN dbo.spUrtOnMLMas M
|
||||
ON M.nOnMLNo = D.nOnMLNo
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1
|
||||
ISNULL(F.sKodu, '') AS FirmaKodu,
|
||||
ISNULL(F.sAciklama, '') AS FirmaAciklama
|
||||
FROM dbo.spUrtSiparisDet SD
|
||||
INNER JOIN dbo.spUrtSiparis SM
|
||||
ON SM.nUrtSiparisID = SD.nUrtSiparisID
|
||||
LEFT JOIN dbo.tbFirma F
|
||||
ON F.nFirmaID = SM.nFirmaID
|
||||
WHERE (
|
||||
(ISNULL(M.nUrtReceteID, 0) > 0 AND SD.nUrtReceteID = M.nUrtReceteID)
|
||||
OR (ISNULL(M.nUrtReceteID, 0) <= 0 AND LTRIM(RTRIM(ISNULL(SD.sMModelKodu, ''))) = LTRIM(RTRIM(ISNULL(M.UrunKodu, ''))))
|
||||
)
|
||||
AND SD.dteIslemTarihi <= COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi)
|
||||
ORDER BY SD.dteIslemTarihi DESC, SD.nUrtSiparisID DESC
|
||||
) UF
|
||||
WHERE D.nHammaddeTuruNo = @p1
|
||||
AND ISNULL(D.fiyat_girilen, 0) > 0
|
||||
AND (
|
||||
NULLIF(@p2, '') IS NULL
|
||||
OR CONVERT(date, COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi)) < CONVERT(date, NULLIF(@p2, ''), 23)
|
||||
)
|
||||
ORDER BY
|
||||
COALESCE(D.dteIslemTarihiDeg, D.dteIslemTarihi, M.Tarihi, M.dteKayitTarihi) DESC,
|
||||
D.nOnMLNo DESC,
|
||||
D.nOnMLDetNo DESC
|
||||
`
|
||||
|
||||
return uretimDB.QueryContext(ctx, sqlText, nHammaddeTuruNo, costDate, limit)
|
||||
}
|
||||
|
||||
func GetProductionHasCostSimilarItemHistory(
|
||||
ctx context.Context,
|
||||
mssqlDB *sql.DB,
|
||||
uretimDB *sql.DB,
|
||||
nHammaddeTuruNo string,
|
||||
costDate string,
|
||||
limit int,
|
||||
) ([]any, error) {
|
||||
if limit <= 0 {
|
||||
limit = 50
|
||||
}
|
||||
|
||||
// 1. Satinalma (V3) tarafini sorgula - Simdilik V3 tarafi icin hammadde turu eslestirmesi belirsiz oldugundan pasif
|
||||
/*
|
||||
v3Sql := `
|
||||
SELECT TOP (@p2)
|
||||
'purchase' AS sourceType,
|
||||
'BNZ' AS priceType,
|
||||
CONVERT(VARCHAR(16), A.InvoiceDate, 120) AS Tarih,
|
||||
ISNULL(A.InvoiceNumber, '') AS FaturaKodu,
|
||||
LTRIM(RTRIM(ISNULL(A.ItemCode, ''))) AS MasrafKodu,
|
||||
ISNULL(ID.ItemDescription, '') AS MasrafDetay,
|
||||
ISNULL(A.ColorCode, '') AS ColorCode,
|
||||
ISNULL(A.Qty1, 0) AS Miktar,
|
||||
ISNULL(CI.UnitOfMeasureCode1, '') AS BIRIM,
|
||||
ISNULL(A.Doc_Price, 0) AS EvrakFiyat,
|
||||
ISNULL(A.Doc_CurrencyCode, '') AS EvrakDoviz
|
||||
FROM AllInvoicesWithAttributes A
|
||||
LEFT JOIN cdItem CI ON CI.ItemTypeCode = A.ItemTypeCode AND CI.ItemCode = A.ItemCode
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 ItemDescription FROM cdItemDesc
|
||||
WHERE ItemTypeCode = A.ItemTypeCode AND ItemCode = A.ItemCode AND LangCode = 'TR'
|
||||
) ID
|
||||
WHERE A.ProcessCode IN ('BP')
|
||||
AND A.ATAtt01 IN (1, 2)
|
||||
AND A.CompanyCode IN (1, 2, 5)
|
||||
AND A.IsCompleted = 1
|
||||
AND YEAR(A.InvoiceDate) >= 2023
|
||||
AND (NULLIF(@p1, '') IS NULL OR CONVERT(date, A.InvoiceDate) < CONVERT(date, NULLIF(@p1, ''), 23))
|
||||
AND EXISTS (
|
||||
-- Hammadde turu eslestirmesi (V3 tarafindaki karsiligi varsa)
|
||||
SELECT 1 FROM cdItem WHERE ItemCode = A.ItemCode
|
||||
)
|
||||
ORDER BY A.InvoiceDate DESC
|
||||
`
|
||||
*/
|
||||
|
||||
// 2. Uretim (Recete) tarafini sorgula
|
||||
uretimSql := `
|
||||
SELECT TOP (@p3)
|
||||
'recipe' AS sourceType,
|
||||
'BNZ' AS priceType,
|
||||
CONVERT(VARCHAR(16), ISNULL(M.Tarihi, M.dteKayitTarihi), 120) AS dteIslemTarihi,
|
||||
RTRIM(CONVERT(VARCHAR(32), ISNULL(D.nOnMLNo, 0))) AS nOnMLNo,
|
||||
ISNULL(D.sKodu, '') AS sKodu,
|
||||
ISNULL(D.sAciklama, '') AS sAciklama,
|
||||
ISNULL(D.sRenk, '') AS sRenk,
|
||||
ISNULL(D.lMiktar, 0) AS lMiktar,
|
||||
ISNULL(D.sBirim, '') AS sBirim,
|
||||
ISNULL(D.lDovizFiyati, 0) AS lDovizFiyati,
|
||||
CASE
|
||||
WHEN LTRIM(RTRIM(ISNULL(D.fiyat_doviz, ''))) <> '' THEN LTRIM(RTRIM(D.fiyat_doviz))
|
||||
WHEN LTRIM(RTRIM(ISNULL(M.sDovizCinsi, ''))) <> '' THEN LTRIM(RTRIM(M.sDovizCinsi))
|
||||
ELSE 'USD'
|
||||
END AS USD
|
||||
FROM dbo.spUrtOnMLMasDet D
|
||||
INNER JOIN dbo.spUrtOnMLMas M ON M.nOnMLNo = D.nOnMLNo
|
||||
WHERE D.nHammaddeTuruNo = @p1
|
||||
AND (NULLIF(@p2, '') IS NULL OR CONVERT(date, ISNULL(M.Tarihi, M.dteKayitTarihi)) < CONVERT(date, NULLIF(@p2, ''), 23))
|
||||
ORDER BY ISNULL(M.Tarihi, M.dteKayitTarihi) DESC
|
||||
`
|
||||
|
||||
// Not: nHammaddeTuruNo parametresine gore sadece Reçete tarafı şu an doğrudan filtrelenebiliyor.
|
||||
// V3 tarafı için ItemTypeCode veya özel bir grup kodu gerekebilir.
|
||||
// Kullanıcının talebi üzerine Reçete (URETIM) odaklı sorguyu önceliklendiriyoruz.
|
||||
|
||||
rows, err := uretimDB.QueryContext(ctx, uretimSql, nHammaddeTuruNo, costDate, limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var results []any
|
||||
for rows.Next() {
|
||||
// Basit bir map veya struct ile dondurebiliriz
|
||||
var row struct {
|
||||
SourceType string `json:"sourceType"`
|
||||
PriceType string `json:"priceType"`
|
||||
Tarih string `json:"Tarih"`
|
||||
EvrakKodu string `json:"EvrakKodu"`
|
||||
Kod string `json:"Kod"`
|
||||
Aciklama string `json:"Aciklama"`
|
||||
Renk string `json:"Renk"`
|
||||
Miktar float64 `json:"Miktar"`
|
||||
Birim string `json:"Birim"`
|
||||
Fiyat float64 `json:"Fiyat"`
|
||||
Doviz string `json:"Doviz"`
|
||||
}
|
||||
if err := rows.Scan(
|
||||
&row.SourceType, &row.PriceType, &row.Tarih, &row.EvrakKodu,
|
||||
&row.Kod, &row.Aciklama, &row.Renk, &row.Miktar, &row.Birim,
|
||||
&row.Fiyat, &row.Doviz,
|
||||
); err == nil {
|
||||
results = append(results, row)
|
||||
}
|
||||
}
|
||||
|
||||
return results, nil
|
||||
}
|
||||
Reference in New Issue
Block a user