// Экспорт заявок в БСС (Архангельск)


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 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;

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;

function GetAddress(ID :variant) :string;
begin
  if (id=null) or (id=0) then result := ''
  else
    result := asstring( dbQueryvalue('select address from orgs where id = :id ',[ID]));
end;

begin
   CheckParams;

   filestr := '';
   bodystr := '';


   addstr(bodystr,'Заявка');

   strval := 'Код заказчика: '
            + 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 := 'Адрес: '
            + coalesce_string(GetAddress(VARID_Storage),
                              GetAddress(varID_orgs),
                              GetAddress(id_org_main),
                              varName_Storage
                             );;
   AddStr(FileStr,strval);
   addstr(BodyStr,strval);

   strval := 'Заказ № '+coalesce_string(asstring(varnumber_doc),asstring(varid));
   AddStr(FileStr,strval);
   addstr(BodyStr,strval);
   strval := 'Дата: '+stringreplace(asstring(vardate_doc),dateseparator,'/');
   AddStr(FileStr,strval);
   addstr(BodyStr,strval);

   dataset.first;
   while not dataset.eof do
   begin
     addstr(Filestr,
            my_coalesce_str(
                          dataset.fieldbyname('price_code').asstring,
                          dataset.fieldbyname('price_code_goods').asstring,
                          dataset.fieldbyname('price_barcode').asstring,
                          dataset.fieldbyname('price_seria').asstring)+';'+
            my_coalesce_str(dataset.fieldbyname('name_goods_pr').asstring,
                            dataset.fieldbyname('name').asstring)+';'+
            //my_coalesce_str(dataset.fieldbyname('name_producers_pr').asstring,
            //                dataset.fieldbyname('name_producer').asstring)+';'+
            //my_coalesce_str(dataset.fieldbyname('name_countries_pr').asstring,
            //                dataset.fieldbyname('name_country').asstring)+';'+
            //dataset.fieldbyname('comments').asstring
           dataset.fieldbyname('quantity').asstring+';'+
            bvCurrToStrF(GetPrice, '.','','',2)
           );

     dataset.next;
   end;


    ExportFilename :=  gettempdir + 'order.txt';   //getuniquefilename(gettempdir+'
    StringToFile(ExportFilename,FileStr);

    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;

    //deletefile(exportfilename);


end.
