Var
  depoID: Integer;
  
procedure fNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
Var
  S: String;
Begin
  if GetOpenFileName(S, '', 'Excel Dosyaları(xls)|*.xls|Excel Dosyaları(xlsx)|*.xlsx|Tüm Dosyalar(*.*)|*.*') Then
    self.fName.Text:= S;
End;

procedure depoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
Var
  IDS: String;
begin 
  IDS:= SelectRecord(
     'SELECT ID, KARTNO, KOD, ACIKLAMA FROM TBLDEPOLAR WHERE DELETED = 0', 
     'KOD;ACIKLAMA', 
	 'Depo Kodu; Açıklama', 
	 'KARTNO', 
	 'Depo Kodu / Açıklama', 
	 'KOD;ACIKLAMA', 
	 False);
  if IDS <> '' Then
  Begin
    depoID:= strToInt(IDS);
    Self.depo.Text:= GetDBValue('SELECT KOD FROM TBLDEPOLAR WHERE KARTNO = ' + IDS);
  End;  
End;

procedure fFormShow(Sender: TObject);
Begin
  self.sifirla.checked:= false;
End;

procedure iptalClick(Sender: TObject);
begin
  Self.Close;
end;

procedure exec;
Var
  SL: TStringList;
  Ex: TPXExcelIO;
  Y: Integer;
  SK, BR, MK: String;
Begin
  SL:= TStringList.Create;
  
  SL.Add('Declare @DEPOID INT, @SIFIRLA INT');
  SL.Add('SET @DEPOID = ' + IntToStr(depoID));
  
  if self.sifirla.checked Then
    SL.Add('SET @SIFIRLA = 1')
  else
    SL.Add('SET @SIFIRLA = 0');
	
  SL.Add('DECLARE @SAYIM Table(STOKKODU VARCHAR(64), STOKID INT, BIRIMID INT, CARPAN DECIMAL(18,4), DEPO DECIMAL(18,4), SAYIM DECIMAL(18,4), FARK DECIMAL(18,4))');
  
  Ex:= TPXExcelIO.Create;
  
  Ex.Open(self.fName.Text);
  
  Y:= 2;
  While True Do
  Begin
    SK:= Ex.GetText(1, Y); // Stok Kodu
	if Trim(SK) = '' Then break;
	
	BR:= Ex.GetText(2, Y); // Birim Adı
	MK:= Ex.GetText(3, Y); // Miktar
	
  SL.Add('INSERT INTO @SAYIM(STOKKODU, BIRIMID, SAYIM) SELECT ' + QuotedStr(SK) + ', ' + 
     ' (SELECT KARTNO FROM TBLBIRIMLEREX WHERE BIRIMADI = ' + QuotedStr(BR) + ' AND STOKID = (SELECT KARTNO FROM TBLSTOKLAR WHERE STOKKODU = ' + QuotedStr(SK) + ')), ' + MK);
	
	Y:= Y + 1;
  End;

  SL.Add('UPDATE @SAYIM SET');
  SL.Add('  CARPAN = (SELECT CARPAN FROM TBLBIRIMLEREX WHERE KARTNO = [@SAYIM].BIRIMID),');
  SL.Add('  STOKID = (SELECT TOP 1 KARTNO FROM TBLSTOKLAR WHERE STOKKODU = [@SAYIM].STOKKODU)');
  SL.Add('IF @SIFIRLA = 1');
  SL.Add('  INSERT INTO @SAYIM(STOKKODU, BIRIMID)');
  SL.Add('    SELECT STOKKODU, ANABIRIM FROM DEPOSTOKDURUMU SY');
  SL.Add('	LEFT OUTER JOIN TBLSTOKLAR S WITH(INDEX=TBLSTOKLAR_KARTNO) ON S.KARTNO = SY.STOKID');
  SL.Add('    WHERE ISNULL(S.DELETED, 0) = 0 AND SY.DEPOID = @DEPOID AND SY.STOKID NOT IN(SELECT STOKID FROM @SAYIM)');
  SL.Add('UPDATE @SAYIM SET');
  SL.Add('  CARPAN = (SELECT CARPAN FROM TBLBIRIMLEREX WHERE KARTNO = [@SAYIM].BIRIMID),');
  SL.Add('  STOKID = (SELECT TOP 1 KARTNO FROM TBLSTOKLAR WHERE STOKKODU = [@SAYIM].STOKKODU AND ISNULL(DELETED, 0) = 0)');
  SL.Add('UPDATE @SAYIM SET');
  SL.Add('  DEPO = ISNULL((SELECT DEPO FROM DEPOSTOKDURUMU WHERE DEPOID = @DEPOID AND STOKID = [@SAYIM].STOKID), 0) *');
  SL.Add('         (SELECT CARPAN FROM TBLBIRIMLEREX WHERE KARTNO = (SELECT ANABIRIM FROM TBLSTOKLAR WHERE KARTNO = [@SAYIM].STOKID))');
  SL.Add('UPDATE @SAYIM SET DEPO = DEPO / CARPAN');
  SL.Add('UPDATE @SAYIM SET FARK = ISNULL(SAYIM, 0) - ISNULL(DEPO, 0)');
  SL.Add('INSERT INTO TBLSAYIM(BIRIMID, DEPOID, MIKTAR, TARIH, RENKID, BEDENID, DESENID) SELECT BIRIMID, @DEPOID, FARK, GETDATE(), 0, 0, 0 FROM @SAYIM WHERE FARK <> 0');
  
  SL.Add('UPDATE TBLSTOKLAR SET');
  SL.Add('  GIREN = (Select SUM(GIREN) From STOKDURUMU WHERE STOKKARTNO = TBLSTOKLAR.KARTNO),');
  SL.Add('  CIKAN = (Select SUM(CIKAN) From STOKDURUMU WHERE STOKKARTNO = TBLSTOKLAR.KARTNO)');
  
  // SL.SaveToFile('D:\Sayim.SQL');  
  
  ExecSQL(SL.Text);
  
  FreeAndNil(Ex);  
  FreeAndNil(SL);
End;

procedure TamamClick(Sender: TObject);
Begin
  if (depoID > 0) and (self.fName.Text <> '') Then
    exec;
	
  self.Close;
End;

Begin
  self.fName.Properties.OnButtonClick:= @fNamePropertiesButtonClick;
  self.depo.Properties.OnButtonClick:= @depoPropertiesButtonClick;
End.
