// Экспорт прайс-листа на sarbc.ru, используется MailProcessor

var
    MailMessage :Variant;
    //Agents :Variant;


const hourofexport = 10; // время (час), во сколько данный экспорт должен произойти (если вызов не через меню)
      UseFromMenu = true; // скрипт используется из меню
      price_recipient =   'apteka_upload@sarbc.ru' ; // адрес получателя писем
      price_subject = 'прайс-лист'; // тема письма

      UseCode1AsTheme = true; // использовать альт.код1 из справочника контрагентов в метке темы. если пусто, то альт.код
      UseCodeAsTheme = true; // использовать альт.код в метке темы. если пусто, то наименование

      //DiscountPercent = 0; // скидка или надбавка от прайсовой цены

      //StorageList = ''; // склады, через запятую. Если без фильтра, то оставить пустым

      //UsePartial = false; // false - передать все остатки (непроданные), true - передать часть прайса, в зависммости от UsePartialByLastDAte
      //UsePartialByLastDate = false; // Если UsePartial = true, то: false = по самым дорогим ценам, true - по самому последнему приходу




var //query :TQuery;
    s :string;
    Stream :tMemoryStream;
    CurrNN :string;
    //List :TstringList;
    iStor :integer;
    strval :string;

    CDSStorages :tclientdataset;
    CDS :tclientdataset;

    QueryText :string;

begin
  //if (dayofweek(date()) = 2) and (hourof(now())=10)
  //if (dayofweek(date()) = 5) and (hourof(now())=12)

  if useFromMenu or (hourof(now())=hourofexport)
  then // Экспорт прайс-листа
  with TMyWait.create1('Идет сбор данных для прайс-листа в САРБИСИ',selfscript) do
  try
    //List := tstringlist.create;
    //Query := TQuery.create(nil);
    cdsStorages := TClientdataset.create(selfscript);
    try
      cds := tclientdataset.create(selfscript);
      //stringtolist(StorageList,List,';,');

      DBReadQuery(CDSSTorages,'select distinct id_orgs from prices_headers',[null]);

      progressbarmax := cdsstorages.recordcount;


      cdsstorages.first;
      while not cdsstorages.eof do
      begin

        Querytext := 'select b.name_original,b.name_producer_original, b.name_country_original,b.price_discount as price '+
          ' from prices_headers a '+
          ' join prices_rows b on a.id = b.id_prices_headers'+
          ' where 1=1 ';

        Querytext := QueryTExt + 'and a.id_orgs = '+inttostr(cdsstorages.fieldbyname('id_orgs').asinteger);

        Querytext := QueryText + ' order by b.name_original';


        DBReadQuery(CDS,QueryTExt,[null]);

        cds.first;
        s := 'Наименование'+#9+'Производитель'+#9+'Страна'+#9+'Цена'+ #13#10;

        //CurrNN := '---------------------------';

        while not cds.eof do
        begin
          //if not UsePartial or ( CurrNN <> Query.fieldbyname('nn').asstring)
          //then
          begin
              S := S +cds.fieldbyname('name_original').asstring + #9 + cds.fieldbyname('name_producer_original').asstring + #9 + cds.fieldbyname('name_country_original').asstring + #9 + cds.fieldbyname('price').asstring + #13#10;
              //CurrNN := Query.fieldbyname('nn').asstring;
          end;

          cds.next;
        end;


       // s := ansitoutf8(s);


        //STream := TMemoryStream.create;
        try
          //Stream.write(S,length(S));

          StringToFile(gettempdir+'price.txt' ,s);

          //ZipAddFS(const ZipName :string; SourceStream: TStream; const FileName :string; const BaseDirectory :string = '')
          deletefile(gettempdir+'price.zip');

          ZipAdd(gettempdir+'price.zip', gettempdir+'price.txt',gettempdir);
          //ZipAdd(const ZipName :string; SourceFileName :string; const BaseDirectory :string = '' )

          //ZipAddFS(gettempdir+'price.zip', Stream, 'price.txt');
          //ZipAdd(gettempdir+'price.zip',gettempdir+'price.txt', gettempdir );
        finally
          //Stream.free
        end;



        //Agents := CreateOleObject('mailprocessor.addressbook');
        MailMessage := CreateOleObject('mailprocessor.mpmailmessage');

        MailMessage.SRV.ConnectWP('Пользователь','1');
        if not MailMessage.srv.connected
        then begin
          CreateHintE('Не могу присоединиться.');
          exit;
        end;

        MailMessage.ID := 0;
        MailMessage.Recipient :=  price_recipient;

        strval := PRice_subject;


        //if List.count>0
        //then
        begin
           strval := '';

           if UseCode1asTheme
           then
             strval := asstring(dbQueryValue('select code1 from orgs where id = :id',[cdsstorages.fieldbyname('id_orgs').asinteger]));

           if strval=''
           then begin
             if useCodeastheme
             then
               strval := asstring(dbQueryValue('select code from orgs where id = :id',[cdsstorages.fieldbyname('id_orgs').asinteger]));

             if strval = ''
             then
               strval := asstring(dbQueryValue('select name from orgs where id = :id',[cdsstorages.fieldbyname('id_orgs').asinteger]));

           end;

           strval :=  Price_subject + ': '+strval;
        end;
        //else strval := price_subject;

        MailMessage.Subject := strval;

        MailMessage.AddAttachment(gettempdir+'price.zip');
        MailMessage.Save;

        cdsstorages.next;

        incprogress;
      end;


  //Application.Terminate;


    finally
      cds.free;
      cdsstorages.free;
    end

  finally
    free
  end;


end.
