// скрипт для импорта прайс-листа от Пульс-Ярославль. используется процедурой 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 
    Mappings :string;
    cds :tclientdataset;
    missstrings:integer;
    isfound :boolean;
    i :integer;
    strval :string;
    ipos :integer;
begin
  //createhint(filename+' :'+asstring(fileexists(filename)));

  if uppercase(extractfileext(filename))='.ZIP'
  then begin
    filename := extractfilepath(filename) + ZipExtractAll(filename,extractfilepath(filename));
  end;

  if uppercase(extractfileext(filename))='.TXT'
  then begin
    cds := tclientdataset.create(selfscript);
    ReadTXT(CDS,Filename,';',false,'',ctnone,false,1,false,1);
    
    cds.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.fields[0].asstring;
          fieldbyname('name_goods').asstring := cds.fields[2].asstring;
          fieldbyname('price').asstring := cds.fields[4].asstring;
          fieldbyname('name_producer').asstring := cds.fields[5].asstring;
          fieldbyname('amount').asstring := cds.fields[6].asstring;
          fieldbyname('isliveneed').asstring := cds.fields[11].asstring;
          fieldbyname('price_first').asstring := cds.fields[13].asstring;
          fieldbyname('barcode').asstring := cds.fields[14].asstring;
          fieldbyname('place_cap').asstring := cds.fields[15].asstring;
          fieldbyname('min_amount').asstring := cds.fields[15].asstring;
          
          if cds.fieldcount>16
          then begin
            strval := cds.fields[16].asstring;
            ipos := pos(' ',strval);
            if (ipos = 11) or (ipos = 9) then strval := copy(strval,1,ipos-1);
            fieldbyname('shelf_life').asstring := strval;
          end;
          
           
          //fieldbyname('price_registry').asstring := cds.fieldbyname('regpr').asstring;
          
          //fieldbyname('nds').asstring := cds.fieldbyname('tax').asstring;
          //fieldbyname('isliveneed').asstring := cds.fieldbyname('ЖНВЛС').asstring;
          //fieldbyname('barcode').asstring := cds.fieldbyname('ean13').asstring;


          post;
        end;


        cds.next;
      end;


  end
  else RaiseException('Данное расширение не предусмотрено скриптом импорта');
end.
