// скрипт для импорта прайс-листа Протек-18. используется процедурой 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 :TTable;
    tmpDir :string;
    tmpfile :string;
    Mappings :string;
    CDS :Tclientdataset;
    List :tstringlist;
    BodyIndex :integer;
begin
  table := ttable.create(selfscript);
  try
    tmpdir := includetrailingpathdelimiter(gettempdir+'tmpscriptimport-'+formatdatetime('dd-mm-yyyy-hh-nn-ss',now));
    forcedirectories(tmpdir);

      tmpfile := tmpdir + 'tmpprice'+uppercase(extractfileext(filename));

      copyfile(filename,tmpfile);
      try

       if uppercase(extractfileext(filename))='.DBF'
       then begin

        table.tablename := tmpfile;

        table.tabletype := ttFoxpro;

        //SetTableLangDriver(table,'DBWINUS0');
        //SetTableLangDriver(Table,'db866ru0');
        //CheckDBFCP(Table.TableName,87); //866DOS - 38

        table.open;

        if table.findfield('IDENT')<>nil
        then begin

          table.close;
          CheckDBFCP(Table.TableName,87); //866DOS - 38
          table.open;

          Mappings :=
                    'IDENT=CODE_GOODS;'+
                    'NAME=NAME_GOODS;'+
                    'MANUF=NAME_PRODUCER;'+
                    'COUNTRY=NAME_COUNTRY;'+
                    'PRICE=PRICE;'+
                    'PRICER=PRICE_REGISTRY;'+
                    'PRICEPR=PRICE_FIRST;'+
                    'QTY=AMOUNT;'+
                    'DATEEXP=SHELF_LIFE;'+
                    //'EAN13=BARCODE;'+

                    'PACK=PLACE_CAP;'+
                    'NDS=NDS;'+
                    'LIFE=ISLIVENEED';
        end
        {
        else
        if table.findfield('MANUFAC')<>nil
        then begin

          Mappings :=
                    'CODE=CODE_GOODS;'+
                    'NAME=NAME_GOODS;'+
                    'MANUFAC=NAME_PRODUCER;'+
  //                  'COUNTRY=NAME_COUNTRY;'+
                    'PRICE=PRICE;'+
  //                  'PRICER=PRICE_REGISTRY;'+
  //                  'PRICEPR=PRICE_FIRST;'+
                    'BALANCE=AMOUNT;'+
                    'EXPDATE=SHELF_LIFE;'+
                    'MINORDER=MIN_AMOUNT';
                    //'EAN13=BARCODE;'+

  //                  'PACK=PLACE_CAP;'+
  //                  'NDS=NDS;'+
  //                  'LIFE=ISLIVENEED';
        end
        }
        else
          Mappings :=
                    'CODEPST=CODE_GOODS;'+
                    'NAME=NAME_GOODS;'+
                    'FIRM=NAME_PRODUCER;'+
                    'COUNTRY=NAME_COUNTRY;'+
                    'PRICE2=PRICE;'+
                    'PRICEGR=PRICE_REGISTRY;'+
                    'PRICEN=PRICE_FIRST;'+
                    'QNT=AMOUNT;'+
                    'GDATE=SHELF_LIFE;'+
                    'EAN13=BARCODE;'+

                    'QNTPACK=PLACE_CAP;'+
                    'NDS=NDS;'+
                    'GNVLS=ISLIVENEED';


        SElfLoader.InitFieldsToDefault;
        SelfLoader.InitImportCDS;
        TableAppend(selfloader.importcds,table,false,Mappings);
        //dataset.close; // чтобы не продолжился импорт
       end
       else
       if uppercase(extractfileext(filename))='.XLS'
       then  begin

          cds := tclientdataset.create(selfscript);

          readxls(cds, filename,false,true);


           Mappings :=
                      'Код=CODE_GOODS;'+
                      'Наименование=NAME_GOODS;'+
                      'Производитель=NAME_PRODUCER;'+
                      'Цена с НДС_0_=PRICE;'+
                      'Упаковка=PLACE_CAP;'+
                      'Срок годности=SHELF_LIFE;'+
                      'Мин_Упаковка=MIN_AMOUNT';

          SElfLoader.InitFieldsToDefault;
          SelfLoader.InitImportCDS;
          TableAppend(selfloader.importcds,cds,false,Mappings);


       end
       else
       if uppercase(extractfileext(filename))='.TXT'
       then begin
        cds := tclientdataset.create(selfscript);
        List := tstringlist.create;
        try
          list.loadfromfile(filename);
          if (list.count>0)
              and (list[0] = 'Code|Name|Pack|Manufactor|Country|Amount|Reest|Proizv|Cost|Expire')
          then begin

            ReadTXTList(cds,list,'|');

            Mappings :=
                        'CODE=CODE_GOODS;'+
                        'NAME=NAME_GOODS;'+
                        'MANUFACTOR=NAME_PRODUCER;'+
                        'COUNTRY=NAME_COUNTRY;'+
                        'AMOUNT=Amount;'+
                        'REESTR=PRICE_REGISTRY;'+
                        'PROIZV=PRICE_FIRST;'+
                        'COST=PRICE;'+
                        'Упаковка=PLACE_CAP;'+
                        'EXPIRE=SHELF_LIFE;'+
                        'PACK=MIN_AMOUNT';

            SElfLoader.InitFieldsToDefault;
            SelfLoader.InitImportCDS;

            TableAppend(selfloader.importcds,cds,false,Mappings);

          end;
        finally
          list.free;
        end
       end
       else
       if uppercase(extractfileext(filename))='.SST'
       then begin
        cds := tclientdataset.create(selfscript);
        List := tstringlist.create;
        try
          list.loadfromfile(filename);
          BodyIndex := list.indexof('[BODY]');

          if (list.count>0) and (BodyIndex>=0)
          then begin

            ReadTXTList(cds,list,';',False,'',ctNone,false,1,false,BodyIndex+1);



            SElfLoader.InitFieldsToDefault;
            SelfLoader.InitImportCDS;

            cds.first;
            while not cds.eof do
            begin
              with selfloader.importcds do
              begin
                append;
                Fieldbyname('code_goods').asstring := cds.fields[0].asstring;
                Fieldbyname('name_goods').asstring := cds.fields[1].asstring;
                fieldbyname('name_producer').asstring := cds.fields[2].asstring;
                fieldbyname('place_cap').asstring := cds.fields[3].asstring;
                fieldbyname('amount').asstring := cds.fields[4].asstring;
                fieldbyname('price').asstring := cds.fields[5].asstring;
                fieldbyname('shelf_life').asstring := cds.fields[6].asstring;

                post;
              end;
              cds.next;
            end;

          end;
        finally
          list.free;
        end;
       end;
     finally
       cleardir(tmpdir);
       deletedir(tmpdir);
     end;

  finally
    //mappings.free;
    table.free
  end;


end.
