// Экспорт заявок поставщику ОлГор (Для МК Компани - Архангельск).


var
  Name_ORG_Main :string = ''; // Имя нашей организации. Если id_org_main опеределен, то возьмется из справочника.
                              // Иначе - будет использовано значение переменной, указанное здесь

var // предопределенные переменные

  Dataset :TDataset; // передаваемый в скрипт состав заявки класса Tdataset (используется потомок - класс TClientDataset, обращение к нему может быть произведено с явным преобразованием к классу TClientDataset)
  VarExportEMail :string; // email экспорта, указанный в настройках прайс-листа
  VarName_Storage :variant; // имя заказывающего склада/филиала
  VarID_Storage :variant; // ID заказывающего склада/филиала
  varname_org :variant; // имя поставщика
  varid_orgs :variant; // ID поставщика
  VarDate_Doc :variant; // дата документа
  VarTime_Doc :variant; // время создания документа
  VarNumber_Doc :variant; // номер документа
  VarID :variant; // ID документа в базе данных
  VarPreq_Sum :variant; // сумма заявки
  VarRows_count :variant; // число строк в заявке
  VarExportReport :string; // имя файла печатной формы заявки в формате PDF. пусто, если файл не сформирован
  VarExportOutPreqOriginalPrices :boolean; // флаг, нужно ли экспортировать цену оригинальную из прайс-листа. иначе - цену, указанную в заявке


const
   MessageSubject = 'Электронная заявка SolPrice';

var
    MailMessage :Variant;
    ExportFilename :string;
    Bodystr :string;

    FileStr :string;
    strval :string;

function GetPrice :double;
begin
  if VarExportOutPreqOriginalPrices
  then result := Dataset.fieldbyname('price_pr').asfloat
  else result := Dataset.fieldbyname('price').asfloat;
end;

function my_coalesce_str(str1,str2 :string; str3 :string = ''; str4 :string = '') :string;
begin
  result := str1;
  if result = ''
  then result := str2;
  if result = ''
  then result := str3;
  if result = ''
  then result := str4;
end;



procedure AddStr(var DestStr: string; SourceStr :string);
begin
  if DestStr >'' then DestStr := DestStr + #13#10;

  DestStr := DestStr + SourceStr;
end;

procedure CheckParams;
begin
   if asint64(varid_storage)=0
   then begin
     varid_storage := id_storage_current;
   end;
   if (asint64(varid_storage)<>0) and (asstring(varname_storage)='')
   then begin
     varname_storage := asstring(dbQueryvalue('select name from orgs where id = :id ',[varid_storage]));
   end;
   if asint64(varid_storage)<>0
   then begin
     id_org_main := coalesce_int64( asint64( DBQueryvalue('select id_parent_org from orgs where id = :id',[VARID_STORAGE]))
                                    ,asint64(id_org_main));
   end;

   name_org_main := coalesce_string(
                           asstring( DBQueryvalue('select name from orgs where id = :id',[id_org_main]))
                                    ,name_org_main);
end;

//ftp://ИмяПользователя:Пароль@АдресУзла:порт/Путь            имя файла здесь не указывается /ИмяФайла;ТипРесурса
procedure ParseFTPSTring2(Source :string; var IP,Port,Filepath,{Filename,}Username,Password :string);
var strvalue :string;
    intval :integer;
    intval1 :integer;
begin
  IP :='';
  Port  := '21';
  Filepath := '';
  //Filename := '';
  Username := '';
  Password := '';


  source := trim(source);
  if source='' then exit;

  if uppercase(copy(source,1,6))<>'FTP://' then exit;

  delete(source,1,6);


  intval := pos(';',source);
  if intval>0 then delete(source,intval,length(source));


  intval := pos('@',source);
  if intval>0
  then begin
    strvalue := copy(source,1,intval-1);
    intval1 := pos(':',strvalue);
    if intval1 = 0 then username := strvalue
    else begin
      username := copy(strvalue,1,intval1-1);
      password := copy(strvalue,intval1+1,length(strvalue));
    end;


    delete(source,1,intval);
  end;

  intval := pos('/',source);
  if intval=0 then exit;

  filepath := copy(source,intval+1,length(source));
  {
  filename := copy(source,intval+1,length(source));
  intval1 := pos('/',filename);
  while intval1>0
  do begin
    filepath := filepath+copy(filename,1,intval1);
    filename := copy(filename,intval1+1,length(filename));
    intval1 := pos('/',filename);
  end;}

  strvalue := copy(source,1,intval-1);
  intval1 := pos(':',strvalue);
  if intval1>0
  then begin
    ip := copy(strvalue,1,intval1-1);
    port := copy(strvalue,intval1+1,length(strvalue));
  end
  else
    ip := strvalue;
end;


var IP,Port,Filepath,Username,Password :string;

    CDS :TClientDataset;

begin
   CheckParams;

   filestr := '';
   bodystr := '';

   cds := tclientdataset.create(selfscript);
   cds.fielddefs.add('Код',ftstring,20,false);
   cds.fielddefs.add('Наименование',ftstring,250,false);
   cds.fielddefs.add('Производитель',ftstring,250,false);
   cds.fielddefs.add('Цена с НДС',ftCurrency,0,false);
   cds.fielddefs.add('Кол-во',ftFloat,0,false);
   cds.fielddefs.add('Срок годн.',ftDate,0,false);
   cds.fielddefs.add('Заказ',ftFloat,0,false);
   //cds.fielddefs.add('Фасовка',ftFloat,0,false);
   cds.createdataset;
   cds.logchanges := false;




   //AddStr(filestr,'[Header]');
   addstr(bodystr,'Заявка');
   strval := 'Заказчик: '+ asstring(name_org_main);
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);
   strval := 'Код заказчика: '+ coalesce_string(asstring(getexternalorgcode(id_org_main,varid_orgs)),
                              asstring(getexternalorgcode(0,varid_orgs))
                             );;
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);
   strval := 'Грузополучатель: '+ coalesce_string(asstring(varname_storage),name_org_main);
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);
   strval := 'Код грузополучателя: '+asstring(varid_storage)+' : '
            + coalesce_string(asstring(getexternalorgcode(asint64(varid_storage),varid_orgs)),
                              asstring(getexternalorgcode(id_org_main,varid_orgs)),
                              asstring(getexternalorgcode(0,varid_orgs))
                             );;
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);
   strval := 'Поставщик: '+ asstring(varname_org);
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);
   strval := 'Дата: '+asstring(vardate_doc+vartime_doc);
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);
   strval := 'Номер: '+asstring(varnumber_doc);
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);
   strval := 'Сумма: '+bvCurrToStrF(asfloat(varpreq_sum), '.','','',2);
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);
   strval := 'Строк: '+asstring(varrows_count);
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);

   //AddStr(Filestr,'[Body]');

   //addstr(Filestr,'Количество;Цена;Наименование;Производитель;Страна;Код по прайс-листу;Комментарии;');

   dataset.first;
   while not dataset.eof do
   begin
     cds.append;
     cds.fieldbyname('Код').asstring :=
            my_coalesce_str(
                          dataset.fieldbyname('price_code').asstring,
                          dataset.fieldbyname('price_code_goods').asstring,
                          dataset.fieldbyname('price_barcode').asstring,
                          dataset.fieldbyname('price_seria').asstring);

     cds.fieldbyname('Наименование').asstring :=
            my_coalesce_str(dataset.fieldbyname('name_goods_pr').asstring,
                            dataset.fieldbyname('name').asstring);

     cds.fieldbyname('Производитель').asstring :=
            my_coalesce_str(dataset.fieldbyname('name_producers_pr').asstring,
                            dataset.fieldbyname('name_producer').asstring);

     cds.fieldbyname('Кол-во').asFloat :=
           dataset.fieldbyname('quantity').asfloat;

     cds.fieldbyname('Цена с НДС').asFloat :=
           GetPrice;

     if dataset.fieldbyname('shelf_life').asdatetime<>0
     then cds.fieldbyname('Срок годн.').asdatetime := dataset.fieldbyname('shelf_life').asdatetime;

     cds.post;


     dataset.next;
   end;


    ExportFilename :=  gettempdir + 'Заявка '+asstring(varid)+'.xls';   //getuniquefilename(gettempdir+'
    TableCopyD(exportfilename,cds);

    begin


      MailMessage := CreateOleObject('mailprocessor.mpmailmessage');

      if not MailMessage.srv.connected
      then MailMessage.SRV.ConnectWP('Пользователь','1');

      if not MailMessage.srv.connected
      then begin
        CreateHintE('Не могу присоединиться.');
        exit;
      end;

      MailMessage.ID := 0;
      MailMessage.Recipients :=  varexportemail;


      MailMessage.Subject := MessageSubject;

      MailMessage.Body := BodyStr;

      MailMessage.AddAttachment(ExportFilename);
      MailMessage.Save;

    end;

    deletefile(exportfilename);

end.
