// скрипт для импорта прайс-листа от Пульс. используется процедурой Loader.LoadFromFileWithScript
// на вход подается открытый Dataset, который нужно заполнить в соответствии с полями:

{
          add('code',ftstring,50);
          add('code_goods',ftstring,50);
          add('name_goods',ftstring,300);
          add('code_producer',ftstring,50);
          add('name_producer',ftstring,300);
          add('code_country',ftstring,50);
          add('name_country',ftstring,300);
          add('price',ftstring,50);
          add('price_without_nds',ftstring,50);
          add('price_first',ftstring,50);
          add('price_first_with_nds',ftstring,50);
          add('nds',ftstring,50);
          add('shelf_life',ftstring,50);
          add('ex_rate',ftstring,50);
          add('price_rtl',ftstring,50);
          add('amount',ftstring,50);
          add('id_valuta',ftstring,50);
          add('min_amount',ftstring,50);
          add('units',ftstring,50);
          add('place_cap',ftstring,50);
          add('isliveneed',ftstring,50);
          add('price_registry',ftstring,50);
          add('barcode',ftstring,50);
}

// если вернуть закрытый датасет, то операция не будет продолжена, и предполагается, что скрипт самостоятельно разобрался с прайсом.
// для самостоятельности скрипту передается ID - идентификатор прайса, который сейчас заливается.
// но в целом задача скрипта - транспортировать данные из файла Filename в Dataset

const
   CodePage =  'db866ru0'; // кодовая страница, в какую нужно преобразовать файл. Если не указать, то преобразования не будет
                       // варианты: 'db866ru0', 'DBWINUS0'


var // предопределенные скриптом переменные
    Filename :string; // Файл импорта
    SelfLoader :TPriceLoader; // вызывающий объект



    // собственные объекты
var Table :TTable;
    tmpDir :string;
    tmpfile :string;
    Mappings :string;
    cds :tclientdataset;
    missstrings:integer;
    isfound :boolean;
    i :integer;
    //Session1 :TSession;
begin
  table := ttable.create(selfscript);
  try
    tmpdir := includetrailingpathdelimiter(gettempdir+'tmpscriptimport-'+formatdatetime('dd-mm-yyyy-hh-nn-ss',now));
    forcedirectories(tmpdir);
    try

      if uppercase(extractfileext(filename))='.ZIP'
      then begin
        filename := tmpdir + ZipExtractAll(filename,tmpdir);
      end;

      if uppercase(extractfileext(filename))='.DBF'
      then begin
        tmpfile := tmpdir + 'tmpprice.dbf';

        copyfile(filename,tmpfile);
        //session1 := tsession.create(selfscript);
        try
          //session1.sessionname := 'tmpsess'+inttostr(randomrange(0,65000));
          //Session1.Active := true;
          //table.sessionname := session1.sessionname;
          table.tablename := tmpfile;


          if codepage>'' then SetTableLangDriver(Table,CodePage);

          table.open;


          Mappings := 'CODE=CODE_GOODS;'+
                      'KOD_TOV=CODE_GOODS;'+
                      'CODEPST=CODE_GOODS;'+
                      'TITLE=NAME_GOODS;'+
                      'TOVAR=NAME_GOODS;'+
                      'NAME=NAME_GOODS;'+
                      'MANUF=NAME_PRODUCER;'+
                      'IZGOT=NAME_PRODUCER;'+
                      'FIRM=NAME_PRODUCER;'+
                      'COUNTRY=NAME_COUNTRY;'+
                      'CNTR=NAME_COUNTRY;'+
                      'PRICE=PRICE;'+
                      'PRICE1=PRICE;'+
                      'REGPR=PRICE_REGISTRY;'+
                      'IZGPR=PRICE_FIRST;'+
                      'AVIAIL=AMOUNT;'+
                      'KOLVO=AMOUNT;'+
                      'QNT=AMOUNT;'+
                      'EXPIRED=SHELF_LIFE;'+
                      'SROKGODN=SHELF_LIFE;'+
                      'GDATE=SHELF_LIFE;'+
                      'PACK=PLACE_CAP;'+
                      'QNT_PACK=PLACE_CAP;'+
                      'TAX=NDS;'+
                      'NDS=NDS;'+
                      'GNVLS=ISLIVENEED;'+
                      'EAN13=BARCODE;'+
                      'MIN_PART=MIN_AMOUNT;'+
                      'QNTPST=MIN_AMOUNT;'
                      ;


          SElfLoader.InitFieldsToDefault;
          SelfLoader.InitImportCDS;


          TableAppend(selfloader.importcds,table,false,Mappings);
          //dataset.close; // чтобы не продолжился импорт
        finally
          table.close;
          //session1.free;
        end;
      end
      else if uppercase(extractfileext(filename))='.XLS'
      then begin
        cds := tclientdataset.create(selfscript);
        readxls(cds, filename,false,false,-1);

        missstrings := 0;
        cds.first;

        isFound := false;

        while not cds.eof
        do begin
         for i := 0 to cds.fieldcount-1 do
         if (cds.fields[i].asstring='Наименование')
         then begin
           isfound := true;
           break;
         end;

          if not isfound
          then begin
            inc(MissStrings);
            cds.next;
          end
          else break
        end;

        if missstrings>= cds.recordcount
        then RaiseException('Не найдены нужные поля в таблице');

        // считаем, сколько строк пропустить

        readxls(cds, filename,false,true,MissStrings);

        {
        Mappings := 'Код=CODE_GOODS;'+
                    'Наименование=NAME_GOODS;'+
                    'Производитель=NAME_PRODUCER;'+
                    //'COUNTRY=NAME_COUNTRY;'+
                    'Цена с НДС_ руб=PRICE;'+
                    'Остаток=AMOUNT;'+
                    'ЖНВЛС=ISLIVENEED;'+
                    'Цена изготовителя_ руб=PRICE_FIRST;';
        }



        SElfLoader.InitFieldsToDefault;
        SelfLoader.InitImportCDS;
        //TableAppend(selfloader.importcds,cds,false,Mappings);

          cds.first;
          while not cds.eof do
          begin
            with selfloader.importcds do
            begin
              append;
              fieldbyname('code_goods').asstring := cds.fieldbyname('Код').asstring;
              fieldbyname('name_goods').asstring := cds.fieldbyname('Наименование').asstring;
              fieldbyname('name_producer').asstring := cds.fieldbyname('Производитель').asstring;
              //fieldbyname('name_country').asstring := cds.fieldbyname('country').asstring;
              fieldbyname('price').asstring := cds.fieldbyname('Цена с НДС_ руб').asstring;
              //fieldbyname('price_registry').asstring := cds.fieldbyname('regpr').asstring;
              fieldbyname('price_first').asstring := cds.fieldbyname('Цена изготовителя_ руб').asstring;
              //fieldbyname('shelf_life').asstring := cds.fieldbyname('expired').asstring;
              //fieldbyname('place_cap').asstring := cds.fieldbyname('pack').asstring;
              //fieldbyname('nds').asstring := cds.fieldbyname('tax').asstring;
              fieldbyname('isliveneed').asstring := cds.fieldbyname('ЖНВЛС').asstring;
              //fieldbyname('barcode').asstring := cds.fieldbyname('ean13').asstring;

              if (trim(cds.fieldbyname('Остаток').asstring) <> '')
                 and (trim(cds.fieldbyname('Остаток').asstring) <> '+')
              then
                fieldbyname('amount').asstring := cds.fieldbyname('Остаток').asstring;

              post;
            end;


            cds.next;
          end;


      end
      else RaiseException('Данное расширение не предусмотрено скриптом импорта');
    finally
      cleardir(tmpdir);
      deletedir(tmpdir);
    end;

  finally
    //mappings.free;
    table.free
  end;


end.
