// скрипт для импорта прайс-листа Фармцентр. используется процедурой 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
    //unpackcmd =' "c:\program files\winrar\unrar.exe"  e -y "%s" "%s"';
    unpackcmd =' "c:\program files\7-zip\7z.exe"  e -y "%s" -o"%s"';

var // предопределенные скриптом переменные
    Filename :string; // Файл импорта
    SelfLoader :TPriceLoader; // вызывающий объект



    // собственные объекты
var Table :tclientdataset;
    tmpDir :string;
    tmpfile :string;
    Mappings :string;
    strval :string;
begin
  table := tclientdataset.create(selfscript);
  try
    tmpdir := includetrailingpathdelimiter(gettempdir+'tmpscriptimport-'+formatdatetime('dd-mm-yyyy-hh-nn-ss',now));
    forcedirectories(tmpdir);


    tmpfile := tmpdir + extractfilename(FileName);

    copyfile(filename,tmpfile);

    if uppercase(Extractfileext(tmpfile)) = '.ZIP'
    then begin
      tmpfile :=   ZipExtractAll(tmpfile,tmpdir);
      tmpfile := tmpdir + tmpfile;
    end
    else
    if uppercase(Extractfileext(tmpfile)) = '.RAR'
    then begin
      FileExecuteWait(format(unpackcmd,[tmpfile,tmpdir]), esNormal);
      tmpfile := tmpdir +  'прайс.xls';
    end;

    try
      if not readxls(table,tmpfile)
      then RaiseException('Не могу прочесть файл: '+tmpfile);


      table.open;

      Mappings := 'ID_GOODS=CODE_GOODS;'+
                  'Наименован=NAME_GOODS;'+
                  'Производит=NAME_PRODUCER;'+
                  'Страна_про=NAME_COUNTRY;'+
                  'Код_произв=CODE_PRODUCER;'+
                  'Прод_Цена=PRICE;'+
                  //'AMOUNT=AMOUNT;'+
                  //'REESTR=PRICE_REGISTRY;'+
                  //'PRICEPR=PRICE_FIRST;'+
                  'Срок_хран_=SHELF_LIFE;'+
                  //'EAN13=BARCODE;'+

                  //'QNTPACK=PLACE_CAP;'+
                  //'NDS=NDS;'+
                  'GNVLS=ISLIVENEED';


      SElfLoader.InitFieldsToDefault;
      SelfLoader.InitImportCDS;
      TableAppend(selfloader.importcds,table,false,Mappings);
      //dataset.close; // чтобы не продолжился импорт
    finally
      table.close;
      cleardir(tmpdir);
      deletedir(tmpdir);
    end;

  finally
    //mappings.free;
    table.free
  end;


end.
