// Экспорт заявок в ФораФарм.


var // предопределенные переменные

  Dataset :TDataset;
  VarExportEMail :string;
  VarName_Storage :variant;
  VarID_Storage :variant;
  varname_org :variant;
  varid_orgs :variant;
  VarDate_Doc :variant;
  varTime_Doc :variant;
  VarNumber_Doc :variant;

  VarID :variant;
  VarPreq_Sum :variant;
  VarRows_count :variant;
  VarExportReport :string;
  VarExportOutPreqOriginalPrices :boolean; // флаг, нужно ли экспортировать цену оригинальную из прайс-листа. иначе - цену, указанную в заявке


const
   MessageSubject = 'Электронная заявка SolPrice';


var
    MailMessage :Variant;
    ExportFilename :string;
    Bodystr :string;

    //FileStr :string;
    strval :string;
    strval1 :string;

    DOC :variant;
    Node,RootNode,NodeHeader,NodeDetail :Variant;




procedure AddStr(var DestStr: string; SourceStr :string);
begin
  if DestStr >'' then DestStr := DestStr + #13#10;

  DestStr := DestStr + SourceStr;
end;

function ifthen_1(BoolVal :boolean; trueval,falseval :string) :string;
begin
  if boolval
  then result := trueval
  else result := falseval
end;


function GetPrice :double;
begin
  if VarExportOutPreqOriginalPrices
  then result := Dataset.fieldbyname('price_pr').asfloat
  else result := Dataset.fieldbyname('price').asfloat;
end;

procedure CheckParams;
begin
   if asint64(varid_storage)=0
   then begin
     varid_storage := id_storage_current;
   end;
   if (asint64(varid_storage)<>0) and (varname_storage='')
   then begin
     varname_storage := 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]))
                                    ,id_org_main);
   end;
end;


begin
   CheckParams;


   //filestr := '';

    Doc := CreateOleObject('MSXML2.DOMDocument');
    Doc.Async := false;
    Doc.setProperty('SelectionLanguage', 'XPath');
    Doc.AppendChild(Doc.CreateProcessingInstruction('xml', 'version=''1.0'' encoding=''windows-1251'''));

    RootNode := Doc.appendchild(Doc.CreateElement('ORDER'));

    NodeHeader := RootNode.appendchild(Doc.CreateElement('HEADER'));

    //NodeHeader.Attributes.SetNamedItem(Doc.CreateAttribute('NUMBER_DOC')).Value := asstring(varnumber_doc);

    NodeHeader.AppendChild(Doc.CreateElement('DATE_DOC')).Text := asstring(vardate_doc);
    NodeHeader.AppendChild(Doc.CreateElement('ID_DOC')).Text := asstring(VARID);


   bodystr := '';

   strval := asstring(dbQueryvalue('select name from orgs where id = :id ',[id_org_main]));

    NodeHeader.AppendChild(Doc.CreateElement('NAME_ORG')).Text := strval;


   strval := strval+';'+asstring(varid)+';';

   strval := strval+ formatdatetime('dd.mm.yyyy hh:nn', vardate_doc + vartime_doc);


   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);


   NodeHeader.AppendChild(Doc.CreateElement('ID_STORAGE')).Text := asstring(VARID_STORAGE);
   NodeHeader.AppendChild(Doc.CreateElement('NAME_STORAGE')).Text := asstring(VARNAME_STORAGE);

   strval := asstring(varname_storage);
   strval1 := '';

   if asinteger(varid_storage)<>0
   then begin
     if strval>'' then strval := strval + ',';
     strval1 := asstring( dbQueryvalue('select address from orgs where id = :id ',[varid_storage]));
     strval:= strval + strval1;
   end;


   NodeHeader.AppendChild(Doc.CreateElement('ADDRESS')).Text := asstring(strval1);

   NodeDetail := RootNode.appendchild(Doc.CreateElement('BODY'));


   strval := strval + ';';
   //AddStr(FileStr,strval);
   addstr(BodyStr,strval);

   dataset.first;
   while not dataset.eof do
   begin
     {
     addstr(FileStr,
            coalesce_string( dataset.fieldbyname('price_code').asstring, dataset.fieldbyname('price_code_goods').asstring)+';'+
            dataset.fieldbyname('quantity').asstring+';'+
            coalesce_string(dataset.fieldbyname('name_goods_pr').asstring,dataset.fieldbyname('name').asstring)+';'+
            bvCurrToStrF(dataset.fieldbyname('price').asfloat, ',','','',2)+';'
           );
     }

     Node := NodeDetail.AppendChild(Doc.createElement('ROW'));
     Node.AppendChild(Doc.CreateElement('CODE')).Text :=
        coalesce_string( dataset.fieldbyname('price_code').asstring, dataset.fieldbyname('price_code_goods').asstring);
     Node.AppendChild(Doc.CreateElement('QTY')).Text :=
        dataset.fieldbyname('quantity').asstring;
     Node.AppendChild(Doc.CreateElement('PRICE')).Text :=
        bvCurrToStrF(GetPrice, '.','','',2);


     dataset.next;
   end;

    ExportFilename :=  gettempdir + formatfloat('000000000',varid)+ 'order.xml';   //getuniquefilename(gettempdir+'
    DOC.Save(ExportFilename);

    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);

    if (VarExportReport>'')
       and fileexists(VarExportReport)
    then
      MailMessage.AddAttachment(VarExportReport);


    MailMessage.Save;

    //deletefile(exportfilename);


end.
