SET TERM ^ ;

CREATE OR ALTER procedure U_2209_FISC_REP_8_OUT (
    DOR_ID D_INT64,
    CHARS_IN_LINE_BIG D_INTEGER,
    CHARS_IN_LINE_MEDIUM D_INTEGER,
    CHARS_IN_LINE_SMALL D_INTEGER,
    LOCAL_KASS_ID D_INT64,
    LOCAL_SCLAD_ID D_INT64,
    LOCAL_USER_ID D_INT64,
    CUR_DEP_ID D_INT64)
returns (
    RES_STR D_STR_16384)
as
declare variable DOC_DATE D_DATE;
declare variable DOC_NUM D_STR_25;
declare variable DATE_OUT D_DATE;
declare variable U_NAME D_STR_250;
declare variable T_NAME D_STR_2048;
declare variable F_NAME D_STR_250;
declare variable QTY_KREDIT D_NUM_15_3;
declare variable KREDIT D_NUM_15_2;
declare variable DISCOUNT D_NUM_15_2;
declare variable TOVAR_ID D_INT64;
declare variable BARCODE_READ D_STR_50;
declare variable MOD_T_NAME D_STR_2048;
declare variable SCLAD_KREDIT_ID D_INT64;
declare variable KASSA_ID D_INT64;
declare variable DOR_KREDIT D_NUM_15_2;
declare variable DOR_DEBET D_NUM_15_2;
declare variable DOLG D_NUM_15_2;
declare variable S_NAME D_STR_250;
declare variable S_PHONE D_STR_250;
declare variable ADDON_STR D_BLOB;
declare variable BARCODE D_STR_25;
declare variable COUNTS D_INT64;
declare variable PRINTING_WARNINGS D_BOOLEAN;
declare variable PRINTING_DS_INFO D_BOOLEAN;
declare variable PRINTING_VDS_INFO D_BOOLEAN;
declare variable PRINTING_BONUS_REST D_BOOLEAN;
declare variable WARN_GROUP_ID D_INT64;
declare variable WARN_TEXT D_STR_16384;
declare variable CONTR_ID integer;
declare variable SCHEME_NAME D_STR_250;
declare variable LAST_DISCOUNT_BY_SCRIPT D_NUM_15_2;
declare variable DISCOUNT_EXTERNL_ID D_INT64;
declare variable DISCOUNT_EXTERNL_NAME D_STR_250;
declare variable BONUS_REST D_NUM_15_2;
declare variable CLIENT_NAME D_STR_2048;
declare variable EXT_INFO D_STR_2048;
begin
  /*DOR_ID = 1001182; */

  /*CHARS_IN_LINE_BIG = 24; */
  /*CHARS_IN_LINE_MEDIUM = 48; */
  /*CHARS_IN_LINE_SMALL = 57; */

  /*
  SIZE_LINE: 1 - маленький шрифт (small); 2 - стандартный (medium); 3 - большой (big) - для каждого шрифта нужно свою ширину ставить
  ALIGNMENT: 0 – по левому краю; 1 – по центру; 2 – по правому краю
  */

  /*
  [1], [2], [3] - признак в начале строки от размере символов
  [C] (английская) - признак, что тут нужно отрезать (RES_STR = '[C] '; suspend;)
  [B] (английская) - признак, что тут нужно печатать ШК (RES_STR = '[B]270000000001'; suspend;)
  */

  /*---------------------------------------------------------------------------------------------- */
  /*раздел настройки печати. Выставить 0 возле того, что НЕ надо печатать, и 1 - что НАДО печатать */
  printing_warnings = 0;    /*печатать предупреждения */
  printing_ds_info  = 0;    /*печатать название ДС клиента (если есть) и последнюю скидку клиента */
  printing_vds_info = 0;    /*печатать название ВДС заказа (если есть) */
  printing_bonus_rest = 0;  /*печатать остаток бонусов */
  /*----------------------------------------------------------------------------------------------- */

  select d.doc_date,
         d.doc_num,
         cast(dor.date_out as date),
         u.description,
         dor.sclad_kredit_id,
         dor.kredit,
         cf.NAME,
         dor.debet,
         dor.kredit - dor.debet,
         s.name,
         s.sclad_phone,
         dor.barcode,
         d.contragent_id,
         dor.discount_extrnl_id
  from docs_order dor
    left join docs d on d.doc_id = dor.doc_id
    left join users u on u.user_id = dor.creater_id
    left join sclads s on s.id = dor.sclad_kredit_id
    left join contragents cf on cf.contr_id = d.contragent_id
  where dor.id = :DOR_ID
  into :DOC_DATE, :DOC_NUM, :DATE_OUT, :U_NAME, :SCLAD_KREDIT_ID, :DOR_KREDIT, :CLIENT_NAME, :DOR_DEBET, :DOLG, :S_NAME, :S_PHONE, :BARCODE,
       :contr_id, :discount_externl_id;

  RES_STR = ' '; suspend; /* отступаем строку */
  RES_STR = ' '; suspend; /* отступаем строку */

  for select RES from SP_FISC_PRINT_STRING('Заказ №' || :DOC_NUM, :CHARS_IN_LINE_BIG, 3, 1) into RES_STR do suspend;

  RES_STR = ' '; suspend; /* отступаем строку */

  for select RES from SP_FISC_PRINT_STRING('Заказчик:', :CHARS_IN_LINE_BIG, 3, 1) into RES_STR do suspend;
  for select RES from SP_FISC_PRINT_STRING(:client_name, :CHARS_IN_LINE_BIG, 3, 1) into RES_STR do suspend;



  RES_STR = ' '; suspend; /* отступаем строку */

  RES_STR = '[B]' || :BARCODE; suspend;

  for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Дата приема', :doc_date, :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;
  for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Дата выдачи', :DATE_OUT, :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;
  for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Приемщик', :U_NAME, :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;
  for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Склад', :S_NAME, :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;

  if (coalesce(S_PHONE,'') <> '') then
    for select RES from SP_FISC_PRINT_STRING_AND_VALUE('тел. склада', :S_PHONE, :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;

  RES_STR = ' '; suspend; /* отступаем строку */

  select count(*)
    from doc_order_services dos
   where dos.doc_order_id = :DOR_ID and dos.status_id <> 7
   into :counts;

  if (counts>0) then
    for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Услуги:', '', :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;


  if (LOCAL_KASS_ID is null) then
  begin
    kassa_id = null;

    select first 1 ks.kassa_id
    from kassa_sclads ks
    where ks.sclad_id = :SCLAD_KREDIT_ID and ks.is_default = 1
    into :kassa_id;
  end
  else
  begin
    kassa_id = LOCAL_KASS_ID;
  end

  for
    select t.name as t_name,
           f.name as f_name,
           dos.qty_kredit,
           dos.kredit,
           dos.discount,
           dos.tovar_id,
           dos.barcode_read,
           sp.addon_str,
           dos.ext_info
    from doc_order_services dos
      left join tovars_tbl t on t.tovar_id = dos.tovar_id
      left join tree f on f.folder_id = t.folder_id
      left join U_GET_ADDON_FOR_DOS(dos.id) sp on 1=1
    where dos.doc_order_id = :DOR_ID and dos.status_id <> 7
    into :t_name, :f_name, :qty_kredit, :kredit, :discount, :tovar_id, :barcode_read, :addon_str, :ext_info
  do
  begin
    if (kassa_id is not null) then
      select result from sp_get_fisc_tovar_name(:tovar_id, :kassa_id, 0, :t_name, :barcode_read) into :MOD_T_NAME;
    else
      MOD_T_NAME = t_name;

    for select RES from SP_FISC_PRINT_STRING_AND_VALUE(:MOD_T_NAME || ' ' || :qty_kredit || 'шт', :kredit || 'р', :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;

    if (coalesce(ext_info, '') <> '') then
        for select RES from SP_FISC_PRINT_STRING('Описание: ' || :ext_info, :CHARS_IN_LINE_SMALL, 1, 0) into RES_STR do suspend;

    for select RES from SP_FISC_PRINT_STRING(:addon_str, :CHARS_IN_LINE_SMALL, 1, 1) into RES_STR do suspend;
  end

    select count(*)
    from doc_order_lines dol
   where dol.doc_order_id = :DOR_ID
   into :counts;

  if (counts>0) then
    for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Товары:', '', :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;


  for
    select t.name as t_name,
           f.name as f_name,
           dol.qty_kredit,
           dol.kredit,
           dol.discount,
           dol.tovar_id,
           dol.barcode
    from doc_order_lines dol
      left join tovars_tbl t on t.tovar_id = dol.tovar_id
      left join tree f on f.folder_id = t.folder_id
    where dol.doc_order_id = :DOR_ID
    into :t_name, :f_name, :qty_kredit, :kredit, :discount, :tovar_id, :barcode_read
  do
  begin
    if (kassa_id is not null) then
      select result from sp_get_fisc_tovar_name(:tovar_id, :kassa_id, 0, :t_name, :barcode_read) into :MOD_T_NAME;
    else
      MOD_T_NAME = t_name;

    for select RES from SP_FISC_PRINT_STRING_AND_VALUE(:MOD_T_NAME || ' ' || :qty_kredit || 'шт', :kredit || 'р', :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;
  end

  for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Итого:', :DOR_KREDIT, :CHARS_IN_LINE_BIG, 3) into RES_STR do suspend;
  for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Оплачено:', :DOR_DEBET, :CHARS_IN_LINE_BIG, 3) into RES_STR do suspend;
  for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Долг:', :DOLG, :CHARS_IN_LINE_BIG, 3) into RES_STR do suspend;

  RES_STR = ' '; suspend; /* отступаем строку */

  if (printing_warnings = 1) then /*если печатать предупреждения */
  begin
    for select RES from SP_FISC_PRINT_STRING('ИСПОЛНИТЕЛЬ ПРЕДУПРЕЖДАЕТ ЗАКАЗЧИКА:', :CHARS_IN_LINE_MEDIUM, 2, 0) into RES_STR do suspend;
    for
    select distinct
    coalesce(twg2.id, twg.id)
    from doc_order_services dos
    left join tovars_tbl ts on ts.tovar_id = dos.tovar_id
    left join tree te on te.folder_id = ts.folder_id
    left join tree_warn_groups twg on twg.id = te.warn_group_id
    left join doc_order_services dos2 on dos2.id=dos.parent_dos_id
    left join tovars_tbl ts2 on ts2.tovar_id = dos2.tovar_id
    left join tree te2 on te2.folder_id = ts2.folder_id
    left join tree_warn_groups twg2 on twg2.id = te2.warn_group_id
    where dos.doc_order_id=:DOR_ID and dos.status_id<>7
    into :warn_group_id do
    begin
    for
      select tw.order_num || '. ' || tw.text
      from TREE_WARNINGS tw
      where GROUP_ID=:warn_group_id
      order by ORDER_NUM
      into :WARN_TEXT
    do
    begin
      WARN_TEXT = replace(WARN_TEXT, '<b>', '');
      WARN_TEXT = replace(WARN_TEXT, '</b>', '');
      WARN_TEXT = replace(WARN_TEXT, '<i>', '');
      WARN_TEXT = replace(WARN_TEXT, '</i>', '');
      WARN_TEXT = replace(WARN_TEXT, '<u>', '');
      WARN_TEXT = replace(WARN_TEXT, '</u>', '');
      for select RES from SP_FISC_PRINT_STRING(:WARN_TEXT, :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
    end
    end
    RES_STR = ' '; suspend; /* отступаем строку */
  end


 /* for select RES from SP_FISC_PRINT_STRING('Исполнитель предупреждает заказчика:', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend; */
--  for select RES from SP_FISC_PRINT_STRING('1. Вследствие некачественного изготовления изделий, при их обработке могут появляться скрытые дефекты, ответственность за них возлагается на Продавца и Изготовителя изделия (ГК РФ ст.1095, 1096, 1098).', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('2. Изделия без маркировки или с неправильной маркировкой принимаются без гарантии к качеству стирки и чистки, и только с согласия Клиента. За возможные последствия чистки таких вещей (срыв красителя, усадка, раздублирование ткани и подкладочного материала и т.д) все претензии предъявляются изготовителю либо продавцу вещи (ст. 1095, 1096 ГК РФ).', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('3. Исполнитель снимает с себя ответственность за повреждение деталей несъемной фурнитуры и отделки.', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('4. Изделия с пятнами принимаются без гарантии полного пятновыведения.', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('5. Изделия из искусственной кожи подвержены следующим факторам "старения": потеря эластичности, блеск, образование трещин, белесые пятна, проявление замшевидности, увеличение жесткости. При обработке таких изделий эти дефекты могут усугубиться, усиливается вероятность полного отслоения пленочного покрытия от основы.', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('6. Изделия, в состав которых входит полиуретан (ПУ), либо поливинилхлорид (ПВХ), либо резина, принимаются в обработку только с согласия клиента и без претензий к качеству чистки и товарному виду изделия т.к. после обработки такие изделия становятся жесткими, ломкими, появляется волнистость и усадка.', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('7. Для изделий, в состав которых входит синтепон или любой другой объёмный утеплителем, при любом методе обработки возможна потеря объемности утеплителя и его деформация.', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('8. Претензия к качеству услуги должны быть предъявлены строго в момент получения заказа (ГК РФ ст.720 п.З. ПВО ст.18).', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('9. Исполнитель осуществляет сбор и доставку вещей до приемного пункта. Приемка с детальным осмотром сданных вещей  осуществляется приемщиком непосредственно в приемном пункте. По результатам проверки могут быть обнаружены дополнительные дефекты, повреждения или детали, что потребует отдельного согласования с заказчиком перед началом обработки. Исполнитель не несет ответственность за дефекты и повреждения, выявленные при проведении приемки. Стоимость работ по итогам приемки может быть скорректирована. Бланк строгой отчетности предоставляется при доставке заказа.', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('10. В глажку, стирку, химчистку и ремонт принимаются вещи с заявленной стоимостью не дороже 30 000 рублей. Сдавая вещь в обработку, Заказчик признает, что стоимость вещи составляет не более 30 000 рублей.', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('11. Время ожидания клиента на адресе не более 15 минут. В случае отмены заказа/доставки менее чем за 1 час до приезда специалиста, повторная стоимость выезда специалиста по адресу составляет 390 рублей.', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  RES_STR = ' '; suspend; /* отступаем строку */
--  for select RES from SP_FISC_PRINT_STRING('С условиями выполнения заказа', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('ознакомлен и согласен', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  RES_STR = ' '; suspend; /* отступаем строку */
--  for select RES from SP_FISC_PRINT_STRING('_______________', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('подпись клиента', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  RES_STR = ' '; suspend; /* отступаем строку */
--  for select RES from SP_FISC_PRINT_STRING('Согласен на получение уведомлений по смс', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('о готовности заказов и смс-рекламы', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  RES_STR = ' '; suspend; /* отступаем строку */
--  for select RES from SP_FISC_PRINT_STRING('_______________', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  for select RES from SP_FISC_PRINT_STRING('подпись клиента', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
--  RES_STR = ' '; suspend; /* отступаем строку */


  if (printing_ds_info = 1) then
  begin
    select ds.name, c.last_discount_by_script
    from contragents c
    left join discont_schemes ds on c.scheme_id = ds.id
    where c.contr_id = :contr_id
    into :scheme_name, :last_discount_by_script;

    for select RES from SP_FISC_PRINT_STRING_AND_VALUE('ДС клиента:', :scheme_name, :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;
    for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Последняя скидка клиента:', :last_discount_by_script, :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;
  end

  if (printing_vds_info = 1) then
  begin
    select de.name
    from discount_externl de
    where de.id = :discount_externl_id
    into :DISCOUNT_EXTERNL_NAME;

    for select RES from SP_FISC_PRINT_STRING_AND_VALUE('ВДС в заказе:', :DISCOUNT_EXTERNL_NAME, :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;
  end

  if (printing_bonus_rest = 1) then
  begin
    select sp.rest
    from calc_client_bonus_rest(:contr_id) sp
    into :bonus_rest;

    for select RES from SP_FISC_PRINT_STRING_AND_VALUE('Остаток бонусов клиента:', :bonus_rest, :CHARS_IN_LINE_MEDIUM, 2) into RES_STR do suspend;
  end

  RES_STR = ' '; suspend; /* отступаем строку */
  RES_STR = ' '; suspend; /* отступаем строку */
  for select RES from SP_FISC_PRINT_STRING('Заказ получил, претензий не имею', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
  RES_STR = ' '; suspend; /* отступаем строку */
  for select RES from SP_FISC_PRINT_STRING('_______________', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;
  for select RES from SP_FISC_PRINT_STRING('подпись клиента', :CHARS_IN_LINE_MEDIUM, 2, 1) into RES_STR do suspend;


  RES_STR = ' '; suspend; /* отступаем строку */
  RES_STR = ' '; suspend; /* отступаем строку */
  RES_STR = ' '; suspend; /* отступаем строку */
end^

SET TERM ; ^

