Name('Načtení transakcí z CSV Servis24')
Designed('BankMan');
Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com','http://www.winduo.cz')
Descr('Načte transakce uložené přes výpis transakcí v Servis 24 České spořitelny, a.s.')

WNSType(1);

ModifyMode(True);

Ucet:String='1641251349/0800';
Doklad:String[10]='B+';

THPath:String=GetIni('Paths','Servis24');
THFileName:String=GetFileName(THPath+'TH??????.);
if(Length(THFileName)=0)
  Exit;
THPath=FilePath(THFileName);
SetIni('Paths','Servis24',THPath);

DeclareRec('Program');
DeclareRec('Banka');

THFile:TextFile;
Open(THFile,THFileName);
Radek:String;
WorkStr:String='"Položka","Valuta zaúčt.","Var.symb.2","Částka v měně účtu","Měna účtu","Bankovní spojení","Dat.zprac.","Var.symb.1",';
WorkStr=WorkStr+'"Částka v měně transakce","Měna transakce","Název protiúčtu/Ref.číslo","Konst.symb.","Spec.symb.","Storno","Zpráva pro příjemce"'
WorkStr2:String;

Radek=ReadLn(THFile);

if(not CompareStr(WorkStr,Radek))
  begin
    Error('Neznámá struktura souboru'+#13+THFileName);
  end;

MenaM:Integer;
CastkaM:Real;
Mena:Integer;
PV:Char;
ProgMena:Integer=CCCToNum(Program.KodMeny);
ActRadek:LongInt;
Veta:LongInt;

TempBanka:Banka

Record BankaKey
  Length:Byte;
  Datum :Word;
  Radek :LongInt;
end;

MakeTempFile(TempBanka,BankaKey,False);

NewWNS('SporVyp.WNS');
SetHead('Datum\tPopis\tČástka\tP/V\tVSymb\tProtiúčet\tČástka\tMěna\tKSymb\tSSymb\tPoznámka');
SetColumn(0,ta_Left,10);
SetColumn(1,ta_Left,35);
SetColumn(2,ta_Right,12);
SetColumn(3,ta_Center,3);
SetColumn(4,ta_Left,10);
SetColumn(5,ta_Left,22);
SetColumn(6,ta_Right,12);
SetColumn(7,ta_Left,3);
SetColumn(8,ta_Left,4);
SetColumn(9,ta_Left,10);
SetColumn(10,ta_Left,44);

While(not EOF(THFile))
  begin
    Radek=ReadLn(THFile);
    ClearRec(Banka);
    Banka.Ucet=Ucet
    Banka.Popis=PickString(Radek);
    WorkStr=PickString(Radek);
    WorkStr2='.'+ToChar('/',WorkStr);
    WorkStr=FromChar('/',WorkStr);
    WorkStr2='.'+ToChar('/',WorkStr)+WorkStr2;
    WorkStr=FromChar('/',WorkStr);
    WorkStr2=WorkStr+WorkStr2;
    Banka.Datum=ValDate(WorkStr2);
    Banka.Obdobi=Val(Month(Banka.Datum,2)+Year(Banka.Datum,2));
    Banka.VSymb=PickNum(Radek);
    CastkaM=PickNum(Radek);
    MenaM=CCCToNum(PickString(Radek));
    Banka.ProtiUcet=PickString(Radek); {Var.symb 2}
    PickString(Radek); {Datum 2}
    PickString(Radek); {Var.symb 2}
    Banka.Castka=PickNum(Radek);
    if(Banka.Castka<>0)
      begin
        Inc(ActRadek);
        Mena=CCCToNum(PickString(Radek));
        if(Mena<>ProgMena)
          begin
            Banka.CastkaM=Banka.Castka;
            Banka.Castka=0;
            Banka.Mena=Mena;
          end else
        if(MenaM<>Mena)
          begin
            Banka.CastkaM=CastkaM;
            Banka.Mena=MenaM;
          end;
        PickString(Radek); {Nazev protiuctu/referencni cislo}
        Banka.KSymb=PickNum(Radek);
        Banka.SSymb=PickNum(Radek);
        if(not GetBoolean(PickString(Radek)))
          begin
            if(Banka.Castka<0)
              begin
                Banka.Castka=-Banka.Castka;
                Banka.Vydaj=True;
              end;
            Banka.Poznamka=PickString(Radek);
            TempBanka=Banka;
            BankaKey.Length=SizeOf(BankaKey)-1;
            BankaKey.Datum=Swap(Banka.Datum);
            BankaKey.Radek=SwapL(-ActRadek);
            AddKey(BankaKey,AddRec(TempBanka));
          end;
      end;
  end;

ClearKey(BankaKey);
While(NextKey(BankaKey,Veta))
  begin
    ReadRec(TempBanka,Veta);
    Banka=TempBanka;
    if(Banka.Vydaj)
      PV='V'
    else
      PV='P';
    AddLine(StrDate(Banka.Datum),Banka.Popis,StrFinanc(Banka.Castka,2),PV,Banka.VSymb,Banka.ProtiUcet,StrFinanc(Banka.CastkaM,2,,True),NumToCCC(Banka.Mena),Banka.KSymb,Banka.SSymb,Banka.Poznamka);
    Banka.Doklad=ResolveIdent(Banka,Doklad);
    Banka.Cislo=GetNewIdent();
    AddRec(Banka);
  end;

END