// скрипт для импорта прайс-листа Роста. используется процедурой 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


var // предопределенные скриптом переменные
    Filename :string; // Файл импорта
    SelfLoader :TPriceLoader; // вызывающий объект



    // собственные объекты
var Table :tclientdataset;
    DBF :TDBF;
    tmpDir :string;
    tmpfile :string;
    Mappings :string;
    strval :string;
    i :integer;
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 := tmpdir + ZipExtractAll(tmpfile,tmpdir);
    end;

    try
      if uppercase(extractfileext(tmpfile))='.DBF'
      then begin
         DBF := TDBF.create(selfscript);
         try
           CheckDBFCP(tmpfile,$26);
           dbf.languageid :=  $26; //$26; $65 // - 866; $C9; - 1251
           DBF.tablename := tmpfile;
           createhinti(DBF.languagestr+':'+inttostr(dbf.codepage));
           dbf.open;
           createhinti(DBF.languagestr+':'+inttostr(dbf.codepage));
           readdataset(table,dbf);
         finally
           DBF.free; DBF := nil;
         end;
      end
      else if uppercase(extractfileext(tmpfile))='.XLS'
      then
        ReadXLS(table,tmpfile); //,UseOLE :Boolean = false; UseFirstRowAsFieldNames :Boolean = true; MissRows :integer = 0;UseOLDMethodForOLE :boolean = false)

      if not table.active or table.isempty  then exit;

      if uppercase(table.fields[0].fieldname)='TITEM_CODE'
      then begin

        Mappings :=
                  'PI_ITEM_CODE=CODE_GOODS;'+
                  'TITEM_CODE=CODE;'+
                  'PI_NAME_IN_PRICE=NAME_GOODS;'+
                  'PRODUCER=NAME_PRODUCER;'+
                  'EXPDATE=SHELF_LIFE;'+
                  //'COUNTRY=NAME_COUNTRY;'+

                  'ProducerPrice=PRICE_FIRST;'+
                  'KI_PRICERUB=PRICE_REGISTRY;'+
                  'PRICE1=PRICE;'+
                  'ON_STOCK=AMOUNT;'
                  ;



         SElfLoader.InitFieldsToDefault;
         SelfLoader.InitImportCDS;
         TableAppend(selfloader.importcds,table,false,Mappings);

         selfloader.importcds.first;
         while not selfloader.importcds.eof do
         begin
           strval := selfloader.importcds.fieldbyname('name_producer').asstring;

           i := pos(' / ',strval);
           if i<>0
           then begin
             selfloader.importcds.edit;
             selfloader.importcds.fieldbyname('name_producer').asstring := trim(copy(strval,1,i-1));
             selfloader.importcds.fieldbyname('name_country').asstring := trim(copy(strval,i+3,length(strval)));
             selfloader.importcds.post;
           end;


           selfloader.importcds.next;
         end;

      end
      else if uppercase(table.fields[0].fieldname)='CODEPST'
      then  begin
        Mappings :=
                  'CODEPST=CODE_GOODS;'+
                  'TOVAR=NAME_GOODS;'+
                  'FACTORY=NAME_PRODUCER;'+
                  //'COUNTRY=NAME_COUNTRY;'+
                  'DATEV=SHELF_LIFE;'+

                  'PRICE=PRICE;';
                  //'QUANTITY=AMOUNT;'+
                  //'MINZAKAZ=MIN_AMOUNT;';



         SElfLoader.InitFieldsToDefault;
         SelfLoader.InitImportCDS;
         TableAppend(selfloader.importcds,table,false,Mappings);
        //dataset.close; // чтобы не продолжился импорт
      end
      else begin
        Mappings :=
                  'ID=CODE_GOODS;'+
                  //'PART=CODE;'+
                  'NAME=NAME_GOODS;'+
                  'PRODUCER=NAME_PRODUCER;'+
                  'COUNTRY=NAME_COUNTRY;'+
                  'GDATE=SHELF_LIFE;'+

                  'PRICE=PRICE;'+
                  'QUANTITY=AMOUNT;'+
                  'MINZAKAZ=MIN_AMOUNT;';



         SElfLoader.InitFieldsToDefault;
         SelfLoader.InitImportCDS;
         TableAppend(selfloader.importcds,table,false,Mappings);
        //dataset.close; // чтобы не продолжился импорт
      end;
    finally
      table.close;
      cleardir(tmpdir);
      deletedir(tmpdir);
    end;

  finally
    //mappings.free;
    table.free
  end;


end.
