// order-print.jsx — друкований бланк кадрового наказу (A4), верстка 1:1 за фірмовим // зразком ТОВ «УКРБУДПРОЄКТ» (наказ ГІП): шапка з логотипом + контакти, зелена лінія, // реєстраційний рядок, «НАКАЗ №» по центру, НАКАЗУЮ з нумерованими пунктами, // підпис директорки + печатка, підвал з ТМ. Блок ознайомлення — на продовженні. // Тіло редаговане (contentEditable). Авто-перенос на 2-гу сторінку за переповнення. function OrderHeader({ co }) { return (
{co.shortName}
тел. {co.phone}
{co.email} · {co.web}
{co.fullName} · Код ЄДРПОУ {co.edrpou} · {co.address}
); } function OrderFooter({ co, page, total }) { return (
{co.tmText}
{co.tmCert}
🇺🇦 Слава Україні · Героям слава
стор. {page} з {total}
); } function OrderPrintDoc({ order, onClose }) { React.useEffect(() => { const onKey = (e) => e.key === "Escape" && onClose(); window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [onClose]); const co = window.COMPANY || {}; const p = window.getTeam(order.personId) || { name: (order.f && order.f.name) || "" }; const T = window.ORDER_TYPES[order.type] || {}; const body = window.buildOrderBody(order); const titleText = (order.titleText) || (T.title ? T.title.charAt(0).toUpperCase() + T.title.slice(1) : "Наказ"); const fioNom = window.declineFio(p.name, "nom"); const dDot = (iso) => window.dateDots(iso); // Авто-перенос: вимірюємо контент 1-ї сторінки; якщо переповнює — ознайомлення на стор. 2 const flowRef = React.useRef(null); const [twoPages, setTwoPages] = React.useState(false); React.useLayoutEffect(() => { const el = flowRef.current; if (!el) return; // корисна висота A4 за вирахуванням полів і підвалу ≈ 960px setTwoPages(el.scrollHeight > 952); }, [order]); const doPrint = () => window.print(); const AckBlock = (
З наказом ознайомлений(а):
{fioNom}
(прізвище, ім'я, по батькові)
підпис
{dDot(order.ackDate || order.date)}
дата
); return (
Наказ № {order.no} · {T.label}
Текст можна редагувати перед друком
{/* ───────── Сторінка 1 ───────── */}
{co.city || "м. Одеса"} НАКАЗ №  {order.no} від  {dDot(order.date)}  р.
{titleText}

{body.preamble},

НАКАЗУЮ:
    {body.points.map((pt, i) => (
  1. {pt}
  2. ))}
{body.basis && (

Підстава:{" "} {body.basis}

)} {/* Підпис */}
{co.directorRole} {co.shortName}
діє на підставі {co.directorBasis || "Статуту"} · м.п.
{co.signImg && }
{co.directorSign || co.directorFull || co.director}
{/* Ознайомлення — на стор. 1, якщо вміщається */} {!twoPages && AckBlock}
{/* ───────── Сторінка 2 (продовження) ───────── */} {twoPages && (
Продовження наказу № {order.no} від {dDot(order.date)} р.
{AckBlock}
)}
); } function OrderPrintStyles() { return ( ); } window.OrderPrintDoc = OrderPrintDoc;