<?php
include_once('config.php');
@ob_start();
@session_start();
$hedef = $_SESSION["hedef"];
$kaynak = $_SESSION["kaynak"];

if ($_POST['fbaslik'] == 1) {
    // Başlangıç zamanı
    $startTime = microtime(true);

    $response = '';
    $totalRowsAffected = 0;

    // Veritabanı bağlantısı kontrolü
    $sqlTruncate = [
        "TRUNCATE TABLE [$hedef].[dbo].[FaturaBaslik];",
        "TRUNCATE TABLE [$hedef].[dbo].[FaturaHareket];"
    ];

    foreach ($sqlTruncate as $truncateQuery) {
        $stmt = sqlsrv_query($conn1, $truncateQuery);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "Veri temizleme sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }
    }

    $sqlQueries = [
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[FaturaBaslik] ON;",
            "label" => "FaturaBaslik IDENTITY_INSERT ON"
        ],
        [
            "query" => "INSERT INTO [$hedef].[dbo].[FaturaBaslik] (
    [Id], [Durum], [KasaId], [BelgeTipi], [KDVDahil], [Tarih],
    [SubeId], [CariId], [BelgeNo], [Kur], [Aciklama], [KullaniciId],
    [Iskonto1], [Iskonto2], [OzelKod1], [OzelKod2], [OlusturmaTarihi],
    [Kapali], [OzelKod3], [OzelKod4], [GenelKod1], [GenelKod2],
    [CariAdresId], [GonderimSekli]
)
SELECT 
    [Id], [Durum], [KasaId], [BelgeTipi], [KDVDahil], [Tarih],
    [SubeId], [CariId], [BelgeNo], [Kur], [Aciklama], [KullaniciId],
    [Iskonto1], [Iskonto2], [OzelKod1], [OzelKod2], [OlusturmaTarihi],
    [Kapali], [OzelKod3], [OzelKod4], [GenelKod1], [GenelKod2],
    [CariAdresId], [GonderimSekli]
FROM [$kaynak].[dbo].[FaturaBaslik];",
            "label" => "FaturaBaslik Veri Aktarımı"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[FaturaBaslik] OFF;",
            "label" => "FaturaBaslik IDENTITY_INSERT OFF"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[FaturaHareket] ON;",
            "label" => "FaturaHareket IDENTITY_INSERT ON"
        ],
        [
            "query" => "INSERT INTO [$hedef].[dbo].[FaturaHareket] (
                [Id], [Durum], [BaslikId], [BirimId], [BarkodId], [StokAdi], [Fiyat], [ParaBirimi],
                [Kur], [Miktar], [KDV], [OTV], [Iskonto1], [Iskonto2], [Iskonto3], [Iskonto4],
                [Termin], [Opsiyon], [Personel], [TransferMiktari], [SevkDeposu], [Prim], [SatisSekli],
                [ProtokolId], [Not1], [Not2], [Not3], [Not4], [Kod1], [Kod2], [Kod3], [Kod4],
				 [MuafiyetKodu], [Tevkifat]
            )
            SELECT 
                [Id], [Durum], [BaslikId], [BirimId], [BarkodId], [StokAdi], [Fiyat], [ParaBirimi],
                [Kur], [Miktar], [KDV], [OTV], [Iskonto1], [Iskonto2], [Iskonto3], [Iskonto4],
                [Termin], [Opsiyon], [Personel], [TransferMiktari], [SevkDeposu], [Prim], [SatisSekli],
                [ProtokolId], [Not1], [Not2], [Not3], [Not4], [Kod1], [Kod2], [Kod3], [Kod4],
				  0 AS [MuafiyetKodu], 0 AS [Tevkifat]
            FROM [$kaynak].[dbo].[FaturaHareket];",
            "label" => "FaturaHareket Veri Aktarımı"
        ]
    
    ];

    foreach ($sqlQueries as $index => $queryData) {
        $query = $queryData['query'];
        $label = $queryData['label'];

        $response .= "$label çalıştırılıyor...<br>";
        $queryStartTime = microtime(true);

        $stmt = sqlsrv_query($conn1, $query);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "$label sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }

        $rowsAffected = sqlsrv_rows_affected($stmt);
        $totalRowsAffected += $rowsAffected;
        $queryEndTime = microtime(true);
        $queryDuration = $queryEndTime - $queryStartTime;

        $response .= "$label başarıyla tamamlandı. Etkilenen satır sayısı: $rowsAffected. Süre: " . number_format($queryDuration, 2) . " saniye.<br>";
    }

    // Bitiş zamanı
    $endTime = microtime(true);
    $totalDuration = $endTime - $startTime;

    $response .= 'Tüm sorgular başarıyla tamamlandı!<br>';
    $response .= 'Toplam süre: ' . number_format($totalDuration, 2) . ' saniye.<br>';
    $response .= 'Toplam Aktarılan satır sayısı: ' . $totalRowsAffected . '<br>';

    echo $response;
}
?>
<?php
if ($_POST['odeme'] == 1) {
    // Başlangıç zamanı
    $startTime = microtime(true);

    $response = '';
    $totalRowsAffected = 0;

    // Veritabanı bağlantısı kontrolü
    $sqlTruncate = [
        "TRUNCATE TABLE [$hedef].[dbo].[OdemeBaslik];",
        "TRUNCATE TABLE [$hedef].[dbo].[OdemeHareket];"
    ];

    foreach ($sqlTruncate as $truncateQuery) {
        $stmt = sqlsrv_query($conn1, $truncateQuery);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "Veri temizleme sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }
    }

    $sqlQueries = [
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[OdemeBaslik] ON;",
            "label" => "OdemeBaslik IDENTITY_INSERT ON"
        ],
        [
            "query" => "INSERT INTO [$hedef].[dbo].[OdemeBaslik] (
    [Id], [Durum], [KasaId], [KullaniciId], [BelgeTipi], [BelgeNo],
    [Tarih], [CariId], [Kur], [OzelKod1], [OzelKod2], [OlusturmaTarihi],
    [GenelKod1], [GenelKod2], [Aciklama]
)
SELECT 
    [Id], [Durum], [KasaId], [KullaniciId], [BelgeTipi], [BelgeNo],
    [Tarih], [CariId], [Kur], [OzelKod1], [OzelKod2], [OlusturmaTarihi],
    [GenelKod1], [GenelKod2], [Aciklama]
FROM [$kaynak].[dbo].[OdemeBaslik]
WHERE [Id] NOT IN (SELECT [Id] FROM [$hedef].[dbo].[OdemeBaslik])
;",
            "label" => "OdemeBaslik Veri Aktarımı"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[OdemeBaslik] OFF;",
            "label" => "OdemeBaslik IDENTITY_INSERT OFF"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[OdemeHareket] ON;",
            "label" => "OdemeHareket IDENTITY_INSERT ON"
        ],
        [
            "query" => "
INSERT INTO [$hedef].[dbo].[OdemeHareket] (
      [Id]
    , [Durum]
    , [BaslikId]
    , [OdemeTipi]
    , [BelgeId]
    , [Vade]
    , [ParaBirimi]
    , [Kur]
    , [Tutar]
    , [Aciklama]
    , [Komisyon]
)
SELECT 
      [Id]
    , [Durum]
    , [BaslikId]
    , [OdemeTipi]
    , [BelgeId]
    , [Vade]
    , [ParaBirimi]
    , [Kur]
    , [Tutar]
    , [Aciklama]
    , [Komisyon]
FROM [$kaynak].[dbo].[OdemeHareket]
WHERE NOT EXISTS (
    SELECT 1 
    FROM [$hedef].[dbo].[OdemeHareket] AS target
    WHERE target.[Id] = [$kaynak].[dbo].[OdemeHareket].[Id]
);",
            "label" => "OdemeHareket Veri Aktarımı"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[OdemeHareket] OFF;",
            "label" => "OdemeHareket IDENTITY_INSERT OFF"
        ]
    ];

    foreach ($sqlQueries as $index => $queryData) {
        $query = $queryData['query'];
        $label = $queryData['label'];

        $response .= "$label çalıştırılıyor...<br>";
        $queryStartTime = microtime(true);

        $stmt = sqlsrv_query($conn1, $query);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "$label sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }

        $rowsAffected = sqlsrv_rows_affected($stmt);
        $totalRowsAffected += $rowsAffected;
        $queryEndTime = microtime(true);
        $queryDuration = $queryEndTime - $queryStartTime;

        $response .= "$label başarıyla tamamlandı. Etkilenen satır sayısı: $rowsAffected. Süre: " . number_format($queryDuration, 2) . " saniye.<br>";
    }

    // Bitiş zamanı
    $endTime = microtime(true);
    $totalDuration = $endTime - $startTime;

   $response .= 'Toplam süre: ' . number_format($totalDuration, 2) . ' saniye.<br>';
    $response .= 'Toplam Aktarılan satır sayısı: ' . $totalRowsAffected . '<br>';
    $response .= '<span style="color: green; font-weight: bold;">Tüm sorgular başarıyla tamamlandı!<br></span>';
    echo $response;
}
?>

<?php
if ($_POST['kasa'] == 1) {
    // Başlangıç zamanı
    $startTime = microtime(true);

    $response = '';
    $totalRowsAffected = 0;

    // Veritabanı bağlantısı kontrolü
    $sqlTruncate = [
        "TRUNCATE TABLE [$hedef].[dbo].[KasaBaslik];",
        "TRUNCATE TABLE [$hedef].[dbo].[KasaHareket];"
    ];

    foreach ($sqlTruncate as $truncateQuery) {
        $stmt = sqlsrv_query($conn1, $truncateQuery);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "Veri temizleme sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }
    }

    $sqlQueries = [
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[KasaBaslik] ON;",
            "label" => "KasaBaslik IDENTITY_INSERT ON"
        ],
        [
            "query" => "INSERT INTO [$hedef].[dbo].[KasaBaslik] ([Id], [Durum], [BelgeTipi], [Tarih], [BelgeNo], [KullaniciId], [KaynakKasaId], [HedefKasaId], [OlusturmaTarihi])
SELECT [Id], [Durum], [BelgeTipi], [Tarih], [BelgeNo], [KullaniciId], [KaynakKasaId], [HedefKasaId], [OlusturmaTarihi]
FROM [$kaynak].[dbo].[KasaBaslik]
;",
            "label" => "KasaBaslik Veri Aktarımı"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[KasaBaslik] OFF;",
            "label" => "KasaBaslik IDENTITY_INSERT OFF"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[KasaHareket] ON;",
            "label" => "KasaHareket IDENTITY_INSERT ON"
        ],
        [
            "query" => "INSERT INTO [$hedef].[dbo].[KasaHareket] ([Id], [Durum], [BaslikId], [IslemTipi], [ParaBirimi], [Tutar], [Aciklama], [OdemeTipi], [BelgeId])
SELECT [Id], [Durum], [BaslikId], [IslemTipi], [ParaBirimi], [Tutar], [Aciklama], [OdemeTipi], [BelgeId]
FROM [$kaynak].[dbo].[KasaHareket];",
            "label" => "KasaHareket Veri Aktarımı"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[KasaHareket] OFF;",
            "label" => "KasaHareket IDENTITY_INSERT OFF"
        ]
    ];

    foreach ($sqlQueries as $index => $queryData) {
        $query = $queryData['query'];
        $label = $queryData['label'];

        $response .= "$label çalıştırılıyor...<br>";
        $queryStartTime = microtime(true);

        $stmt = sqlsrv_query($conn1, $query);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "$label sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }

        $rowsAffected = sqlsrv_rows_affected($stmt);
        $totalRowsAffected += $rowsAffected;
        $queryEndTime = microtime(true);
        $queryDuration = $queryEndTime - $queryStartTime;

        $response .= "$label başarıyla tamamlandı. Etkilenen satır sayısı: $rowsAffected. Süre: " . number_format($queryDuration, 2) . " saniye.<br>";
    }

    // Bitiş zamanı
    $endTime = microtime(true);
    $totalDuration = $endTime - $startTime;

    

    $response .= 'Toplam süre: ' . number_format($totalDuration, 2) . ' saniye.<br>';
    $response .= 'Toplam Aktarılan satır sayısı: ' . $totalRowsAffected . '<br>';
    $response .= '<span style="color: green; font-weight: bold;">Tüm sorgular başarıyla tamamlandı!<br></span>';
    echo $response;
}
?>
<?php
if ($_POST['ozelkod'] == 1) {
    // Başlangıç zamanı
    $startTime = microtime(true);

    $response = '';
    $totalRowsAffected = 0;

    // Veritabanı bağlantısı kontrolü
    $sqlTruncate = [
        "TRUNCATE TABLE [$hedef].[dbo].[OzelKodlar];"
        //"DELETE FROM [$hedef].[dbo].[OzelKodlar];"
    ];

    foreach ($sqlTruncate as $truncateQuery) {
        $stmt = sqlsrv_query($conn1, $truncateQuery);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "Veri temizleme sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }
    }

    $sqlQueries = [
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[OzelKodlar] ON;",
            "label" => "OzelKodlar IDENTITY_INSERT ON"
        ],
        [
            "query" => "INSERT INTO [$hedef].[dbo].[OzelKodlar] ([Id], [Durum], [Tip], [KodNo], [Kod])
SELECT [Id], [Durum], [Tip], [KodNo], [Kod]
FROM [$kaynak].[dbo].[OzelKodlar];",
            "label" => "OzelKodlar Veri Aktarımı"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[OzelKodlar] OFF;",
            "label" => "OzelKodlar IDENTITY_INSERT OFF"
        ],
    ];

    foreach ($sqlQueries as $index => $queryData) {
        $query = $queryData['query'];
        $label = $queryData['label'];

        $response .= "$label çalıştırılıyor...<br>";
        $queryStartTime = microtime(true);

        $stmt = sqlsrv_query($conn1, $query);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "$label sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }

        $rowsAffected = sqlsrv_rows_affected($stmt);
        $totalRowsAffected += $rowsAffected;
        $queryEndTime = microtime(true);
        $queryDuration = $queryEndTime - $queryStartTime;

        $response .= "$label başarıyla tamamlandı. Etkilenen satır sayısı: $rowsAffected. Süre: " . number_format($queryDuration, 2) . " saniye.<br>";
    }

    // Bitiş zamanı
    $endTime = microtime(true);
    $totalDuration = $endTime - $startTime;

    $response .= 'Toplam süre: ' . number_format($totalDuration, 2) . ' saniye.<br>';
    $response .= 'Toplam Aktarılan satır sayısı: ' . $totalRowsAffected . '<br>';
    $response .= '<span style="color: green; font-weight: bold;">Tüm sorgular başarıyla tamamlandı!<br></span>';
    echo $response;
}

?>
<?php
if ($_POST['kartanlasma'] == 1) {
    // Başlangıç zamanı
    $startTime = microtime(true);

    $response = '';
    $totalRowsAffected = 0;

    // Veritabanı bağlantısı kontrolü
    $sqlTruncate = [
        "TRUNCATE TABLE [$hedef].[dbo].[KartAnlasmaBaslik];",
        "TRUNCATE TABLE [$hedef].[dbo].[KartAnlasmaHareket];"
     
    ];

    foreach ($sqlTruncate as $truncateQuery) {
        $stmt = sqlsrv_query($conn1, $truncateQuery);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "Veri temizleme sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }
    }

    $sqlQueries = [
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[KartAnlasmaBaslik] ON;",
            "label" => "KartAnlasmaBaslik IDENTITY_INSERT ON"
        ],
        [
            "query" => "INSERT INTO [CodeDB_1].[dbo].[KartAnlasmaBaslik] ([Id], [Durum], [BankaPosId], [AnlasmaNo], [Baslangic], [Bitis], [KomisyonTipi])
SELECT [Id], [Durum], [BankaPosId], [AnlasmaNo], [Baslangic], [Bitis], [KomisyonTipi]
FROM [CodeDB_2].[dbo].[KartAnlasmaBaslik];",
            "label" => "KartAnlasmaBaslik Veri Aktarımı"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[KartAnlasmaBaslik] OFF;",
            "label" => "KartAnlasmaBaslik IDENTITY_INSERT OFF"
        ],
		       [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[KartAnlasmaHareket] ON;",
            "label" => "KartAnlasmaHareket IDENTITY_INSERT ON"
        ],
        [
            "query" => "INSERT INTO [CodeDB_1].[dbo].[KartAnlasmaHareket] ([Id], [Durum], [BaslikId], [Aciklama], [Taksit], [Komisyon], [Puan], [Bloke], [TahsilatAraligi], [TahsilatTaksitSayisi])
SELECT [Id], [Durum], [BaslikId], [Aciklama], [Taksit], [Komisyon], [Puan], [Bloke], [TahsilatAraligi], [TahsilatTaksitSayisi]
FROM [CodeDB_2].[dbo].[KartAnlasmaHareket];",
            "label" => "KartAnlasmaHareket Veri Aktarımı"
        ],
        [
            "query" => "SET IDENTITY_INSERT [$hedef].[dbo].[KartAnlasmaHareket] OFF;",
            "label" => "KartAnlasmaHareket IDENTITY_INSERT OFF"
        ],
    ];

    foreach ($sqlQueries as $index => $queryData) {
        $query = $queryData['query'];
        $label = $queryData['label'];

        $response .= "$label çalıştırılıyor...<br>";
        $queryStartTime = microtime(true);

        $stmt = sqlsrv_query($conn1, $query);
        if ($stmt === false) {
            $errors = sqlsrv_errors();
            $errorMessage = "$label sırasında SQL hatası oluştu: ";
            foreach ($errors as $error) {
                $errorMessage .= 'SQLSTATE: ' . $error['SQLSTATE'] . ', Kod: ' . $error['code'] . ', Mesaj: ' . $error['message'] . '; ';
            }
            $response .= $errorMessage . '<br>';
            continue; // Hata durumunda diğer sorguları çalıştırmaya devam et
        }

        $rowsAffected = sqlsrv_rows_affected($stmt);
        $totalRowsAffected += $rowsAffected;
        $queryEndTime = microtime(true);
        $queryDuration = $queryEndTime - $queryStartTime;

        $response .= "$label başarıyla tamamlandı. Etkilenen satır sayısı: $rowsAffected. Süre: " . number_format($queryDuration, 2) . " saniye.<br>";
    }

    // Bitiş zamanı
    $endTime = microtime(true);
    $totalDuration = $endTime - $startTime;

    $response .= 'Toplam süre: ' . number_format($totalDuration, 2) . ' saniye.<br>';
    $response .= 'Toplam Aktarılan satır sayısı: ' . $totalRowsAffected . '<br>';
    $response .= '<span style="color: green; font-weight: bold;">Tüm sorgular başarıyla tamamlandı!<br></span>';
    echo $response;
}

?>
