window.open() neposílá JWT header, přepsáno na apiFetch() + blob download. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 lines
15 KiB
JavaScript
2 lines
15 KiB
JavaScript
import{j as e,m as j}from"./vendor-animation-0s3FMHwK.js";import{h as Y,g as ee,r as i,L as x}from"./vendor-react-BVs3cwbi.js";import{a9 as se}from"./vendor-utils-Dyr8OjFr.js";import{a as te,u as ae,F as l,e as ne,g as y,C as U,c as h}from"./index-Bay45BGf.js";import{F as ie}from"./Forbidden-D25jV3Oq.js";const p="/api/admin",Z={prijata:"Přijatá",v_realizaci:"V realizaci",dokoncena:"Dokončená",stornovana:"Stornována"},re={prijata:"admin-badge-order-prijata",v_realizaci:"admin-badge-order-realizace",dokoncena:"admin-badge-order-dokoncena",stornovana:"admin-badge-order-stornovana"},F={v_realizaci:"Zahájit realizaci",dokoncena:"Dokončit"},le={v_realizaci:"admin-btn admin-btn-primary",dokoncena:"admin-btn admin-btn-primary"};function pe(){const{id:o}=Y(),n=te(),{hasPermission:d}=ae(),v=ee(),[I,R]=i.useState(!0),[t,W]=i.useState(null),[w,_]=i.useState(""),[S,C]=i.useState(!1),[z,A]=i.useState(null),[c,f]=i.useState({show:!1,status:null}),[H,u]=i.useState(!1),[T,$]=i.useState(""),[b,L]=i.useState(!1),[O,P]=i.useState(!1),[V,N]=i.useState(!1),[J,E]=i.useState(!1),[M,B]=i.useState(!1),g=async()=>{try{const s=await h(`${p}/orders.php?action=detail&id=${o}`);if(s.status===401)return;const a=await s.json();a.success?(W(a.data),_(a.data.notes||"")):(n.error(a.error||"Nepodařilo se načíst objednávku"),v("/orders"))}catch{n.error("Chyba připojení"),v("/orders")}finally{R(!1)}};i.useEffect(()=>{g()},[o]);const k=i.useMemo(()=>{if(!t?.items)return{subtotal:0,vatAmount:0,total:0};const s=t.items.reduce((r,m)=>Number(m.is_included_in_total)?r+(Number(m.quantity)||0)*(Number(m.unit_price)||0):r,0),a=Number(t.apply_vat)?s*((Number(t.vat_rate)||0)/100):0;return{subtotal:s,vatAmount:a,total:s+a}},[t]);if(!d("orders.view"))return e.jsx(ie,{});const q=async()=>{if(c.status){A(c.status),f({show:!1,status:null});try{const a=await(await h(`${p}/orders.php?id=${o}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:c.status})})).json();a.success?(n.success(a.message||"Stav byl změněn"),g()):n.error(a.error||"Nepodařilo se změnit stav")}catch{n.error("Chyba připojení")}finally{A(null)}}},K=()=>{$(t.order_number),u(!0)},D=async()=>{const s=T.trim();if(s){if(s===t.order_number){u(!1);return}L(!0);try{const r=await(await h(`${p}/orders.php?id=${o}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({order_number:s})})).json();r.success?(n.success("Číslo objednávky bylo změněno"),u(!1),g()):n.error(r.error||"Nepodařilo se změnit číslo")}catch{n.error("Chyba připojení")}finally{L(!1)}}},G=async()=>{C(!0);try{const a=await(await h(`${p}/orders.php?id=${o}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({notes:w})})).json();a.success?n.success("Poznámky byly uloženy"):n.error(a.error||"Nepodařilo se uložit poznámky")}catch{n.error("Chyba připojení")}finally{C(!1)}},Q=async()=>{const s=window.open("","_blank");P(!0);try{const a=await h(`${p}/orders.php?action=attachment&id=${o}`);if(!a.ok){s.close(),n.error("Nepodařilo se stáhnout přílohu");return}const r=await a.blob(),m=URL.createObjectURL(r);s.location.href=m,setTimeout(()=>URL.revokeObjectURL(m),6e4)}catch{s.close(),n.error("Chyba připojení")}finally{P(!1)}},X=async()=>{E(!0);try{const a=await(await h(`${p}/orders.php?id=${o}`,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({delete_files:M})})).json();a.success?(n.success(a.message||"Objednávka byla smazána"),v("/orders")):n.error(a.error||"Nepodařilo se smazat objednávku")}catch{n.error("Chyba připojení")}finally{E(!1),N(!1)}};return I?e.jsxs("div",{className:"admin-skeleton",style:{padding:0,gap:"1.5rem"},children:[e.jsxs("div",{className:"admin-skeleton-row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"flex-row-gap",children:[e.jsx("div",{className:"admin-skeleton-line",style:{width:"32px",height:"32px",borderRadius:"8px"}}),e.jsx("div",{className:"admin-skeleton-line h-8",style:{width:"200px"}})]}),e.jsxs("div",{className:"admin-skeleton-row gap-2",children:[e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"100px",borderRadius:"8px"}}),e.jsx("div",{className:"admin-skeleton-line h-10",style:{width:"100px",borderRadius:"8px"}})]})]}),e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-skeleton",style:{gap:"1.25rem"},children:[0,1,2,3].map(s=>e.jsxs("div",{className:"admin-skeleton-row",children:[e.jsx("div",{className:"admin-skeleton-line w-1/4"}),e.jsx("div",{className:"admin-skeleton-line w-1/2"})]},s))})}),e.jsx("div",{className:"admin-card",children:e.jsx("div",{className:"admin-skeleton",style:{gap:"1.25rem"},children:[0,1,2].map(s=>e.jsxs("div",{className:"admin-skeleton-row",children:[e.jsx("div",{className:"flex-1",children:e.jsx("div",{className:"admin-skeleton-line w-full"})}),e.jsx("div",{className:"flex-1",children:e.jsx("div",{className:"admin-skeleton-line w-3/4"})}),e.jsx("div",{className:"flex-1",children:e.jsx("div",{className:"admin-skeleton-line w-1/2"})})]},s))})})]}):t?e.jsxs("div",{children:[e.jsxs(j.div,{className:"admin-page-header",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4},children:[e.jsxs("div",{className:"flex-row gap-4",children:[e.jsx(x,{to:"/orders",className:"admin-btn-icon",title:"Zpět","aria-label":"Zpět",children:e.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M19 12H5M12 19l-7-7 7-7"})})}),e.jsx("div",{children:e.jsxs("h1",{className:"admin-page-title flex-row-gap",children:[H?e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.5rem"},children:["Objednávka",e.jsx("input",{type:"text",value:T,onChange:s=>$(s.target.value),onKeyDown:s=>{s.key==="Enter"&&D(),s.key==="Escape"&&u(!1)},className:"admin-form-input",style:{width:"10rem",fontSize:"1rem",padding:"0.25rem 0.5rem",height:"auto"},autoFocus:!0,disabled:b}),e.jsx("button",{onClick:D,className:"admin-btn-icon",title:"Uložit","aria-label":"Uložit",disabled:b,children:e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"var(--accent-color)",strokeWidth:"2",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})})}),e.jsx("button",{onClick:()=>u(!1),className:"admin-btn-icon",title:"Zrušit","aria-label":"Zrušit",disabled:b,children:e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M18 6L6 18M6 6l12 12"})})})]}):e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.5rem"},children:["Objednávka ",t.order_number,d("orders.edit")&&e.jsx("button",{onClick:K,className:"admin-btn-icon",title:"Změnit číslo","aria-label":"Změnit číslo",style:{opacity:.5},children:e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),e.jsx("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})]})})]}),e.jsx("span",{className:`admin-badge ${re[t.status]||""}`,children:Z[t.status]||t.status})]})})]}),e.jsxs("div",{className:"admin-page-actions",children:[t.invoice?e.jsxs(x,{to:`/invoices/${t.invoice.id}`,className:"admin-btn admin-btn-secondary",children:[e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),e.jsx("polyline",{points:"14 2 14 8 20 8"})]}),"Faktura ",t.invoice.invoice_number]}):d("invoices.create")&&t.status==="dokoncena"&&e.jsxs(x,{to:`/invoices/new?fromOrder=${t.id}`,className:"admin-btn admin-btn-secondary",children:[e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),e.jsx("polyline",{points:"14 2 14 8 20 8"})]}),"Vytvořit fakturu"]}),d("orders.edit")&&t.valid_transitions?.filter(s=>s!=="stornovana").length>0&&t.valid_transitions.filter(s=>s!=="stornovana").map(s=>e.jsx("button",{onClick:()=>f({show:!0,status:s}),className:le[s]||"admin-btn admin-btn-secondary",disabled:z===s,children:z===s?e.jsx("div",{className:"admin-spinner admin-spinner-sm"}):F[s]||s},s)),d("orders.delete")&&e.jsx("button",{onClick:()=>N(!0),className:"admin-btn admin-btn-primary",children:"Smazat"})]})]}),e.jsx(j.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.1},children:e.jsxs("div",{className:"admin-card-body",children:[e.jsx("h3",{className:"admin-card-title",children:"Informace"}),e.jsxs("div",{className:"admin-form-row mb-2",children:[e.jsx(l,{label:"Nabídka",children:e.jsxs("div",{children:[e.jsx(x,{to:`/offers/${t.quotation_id}`,className:"link-accent",children:t.quotation_number}),t.project_code&&e.jsxs("span",{className:"text-tertiary",style:{marginLeft:"0.5rem"},children:["(",t.project_code,")"]})]})}),e.jsx(l,{label:"Projekt",children:e.jsx("div",{children:t.project?e.jsxs(x,{to:`/projects/${t.project.id}`,className:"link-accent",children:[t.project.project_number," — ",t.project.name]}):"—"})})]}),e.jsxs("div",{className:"admin-form-row admin-form-row-3 mb-2",children:[e.jsx(l,{label:"Zákazník",children:e.jsx("div",{className:"fw-500",children:t.customer_name||"—"})}),e.jsx(l,{label:"Číslo obj. zákazníka",children:e.jsx("div",{children:t.customer_order_number||"—"})}),e.jsx(l,{label:"Měna",children:e.jsx("div",{children:t.currency})})]}),e.jsxs("div",{className:"admin-form-row admin-form-row-3 mb-2",children:[e.jsx(l,{label:"Datum vytvoření",children:e.jsx("div",{children:ne(t.created_at)})}),e.jsx(l,{label:"Příloha",children:e.jsx("div",{children:t.attachment_name?e.jsxs("button",{onClick:Q,className:"admin-btn admin-btn-secondary admin-btn-sm",style:{display:"inline-flex",alignItems:"center",gap:"0.4rem"},disabled:O,children:[O?e.jsx("div",{className:"admin-spinner admin-spinner-sm"}):e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),e.jsx("polyline",{points:"14 2 14 8 20 8"})]}),t.attachment_name]}):"—"})})]})]})}),e.jsx(j.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.2},children:e.jsxs("div",{className:"admin-card-body",children:[e.jsx("h3",{className:"admin-card-title",children:"Položky"}),t.items?.length>0?e.jsx("div",{className:"admin-table-responsive",children:e.jsxs("table",{className:"admin-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{style:{width:"2.5rem",textAlign:"center"},children:"#"}),e.jsx("th",{children:"Popis"}),e.jsx("th",{style:{width:"5.5rem",textAlign:"center"},children:"Množství"}),e.jsx("th",{style:{width:"5.5rem",textAlign:"center"},children:"Jednotka"}),e.jsx("th",{style:{width:"8rem",textAlign:"right",whiteSpace:"nowrap"},children:"Jedn. cena"}),e.jsx("th",{style:{width:"4rem",textAlign:"center"},children:"V ceně"}),e.jsx("th",{style:{width:"9rem",textAlign:"right",whiteSpace:"nowrap"},children:"Celkem"})]})}),e.jsx("tbody",{children:t.items.map((s,a)=>{const r=(Number(s.quantity)||0)*(Number(s.unit_price)||0);return e.jsxs("tr",{children:[e.jsx("td",{style:{color:"var(--text-tertiary)",textAlign:"center",fontWeight:500},children:a+1}),e.jsxs("td",{children:[e.jsx("div",{className:"fw-500",children:s.description||"—"}),s.item_description&&e.jsx("div",{style:{fontSize:"0.8rem",color:"var(--text-tertiary)",marginTop:"0.25rem"},children:s.item_description})]}),e.jsx("td",{style:{textAlign:"center"},children:s.quantity}),e.jsx("td",{style:{textAlign:"center"},children:s.unit||"—"}),e.jsx("td",{className:"admin-mono",style:{textAlign:"right",whiteSpace:"nowrap"},children:y(s.unit_price,t.currency)}),e.jsx("td",{style:{textAlign:"center"},children:Number(s.is_included_in_total)?"Ano":"Ne"}),e.jsx("td",{className:"admin-mono",style:{textAlign:"right",fontWeight:600,whiteSpace:"nowrap"},children:y(r,t.currency)})]},s.id||a)})})]})}):e.jsx("p",{style:{color:"var(--text-tertiary)"},children:"Žádné položky."}),e.jsxs("div",{className:"offers-totals-summary",children:[e.jsxs("div",{className:"offers-totals-row",children:[e.jsx("span",{children:"Mezisoučet:"}),e.jsx("span",{children:y(k.subtotal,t.currency)})]}),Number(t.apply_vat)>0&&e.jsxs("div",{className:"offers-totals-row",children:[e.jsxs("span",{children:["DPH (",t.vat_rate,"%):"]}),e.jsx("span",{children:y(k.vatAmount,t.currency)})]}),e.jsxs("div",{className:"offers-totals-row offers-totals-total",children:[e.jsx("span",{children:"Celkem k úhradě:"}),e.jsx("span",{children:y(k.total,t.currency)})]})]})]})}),t.sections?.length>0&&e.jsx(j.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.3},children:e.jsxs("div",{className:"admin-card-body",children:[e.jsx("h3",{className:"admin-card-title",children:"Rozsah projektu"}),t.scope_title&&e.jsx("div",{style:{fontWeight:500,marginBottom:"0.5rem"},children:t.scope_title}),t.scope_description&&e.jsx("div",{style:{color:"var(--text-secondary)",marginBottom:"1rem"},children:t.scope_description}),e.jsx("div",{className:"offers-scope-list",children:t.sections.map((s,a)=>e.jsxs("div",{className:"offers-scope-section",style:{cursor:"default"},children:[e.jsxs("div",{className:"offers-scope-section-header",children:[e.jsxs("span",{className:"offers-scope-number",children:[a+1,"."]}),e.jsx("span",{className:"offers-scope-title",children:(t.language==="CZ"?s.title_cz||s.title:s.title||s.title_cz)||`Sekce ${a+1}`})]}),s.content&&e.jsx("div",{className:"offers-scope-content rich-text-view",style:{padding:"1rem"},dangerouslySetInnerHTML:{__html:se.sanitize(s.content)}})]},s.id||a))})]})}),e.jsx(j.div,{className:"admin-card",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4,delay:.4},children:e.jsxs("div",{className:"admin-card-body",children:[e.jsx("h3",{className:"admin-card-title",children:"Poznámky"}),e.jsx(l,{label:"Poznámky",children:e.jsx("textarea",{value:w,onChange:s=>_(s.target.value),className:"admin-form-input",rows:4,placeholder:"Interní poznámky k objednávce...",disabled:!d("orders.edit")})}),d("orders.edit")&&e.jsx("div",{className:"mt-2",children:e.jsx("button",{onClick:G,className:"admin-btn admin-btn-secondary admin-btn-sm",disabled:S,children:S?"Ukládání...":"Uložit poznámky"})})]})}),e.jsx(U,{isOpen:c.show,onClose:()=>f({show:!1,status:null}),onConfirm:q,title:"Změnit stav objednávky",message:`Opravdu chcete změnit stav objednávky "${t.order_number}" na "${Z[c.status]}"?${c.status==="dokoncena"?" Projekt bude automaticky dokončen.":""}`,confirmText:F[c.status]||"Potvrdit",cancelText:"Zrušit",type:"default"}),e.jsx(U,{isOpen:V,onClose:()=>{N(!1),B(!1)},onConfirm:X,title:"Smazat objednávku",message:e.jsxs(e.Fragment,{children:['Opravdu chcete smazat objednávku "',t.order_number,'"? Bude smazán i přidružený projekt. Tato akce je nevratná.',t.project?.has_nas_folder&&e.jsxs("label",{className:"admin-form-checkbox",style:{marginTop:"1rem",display:"flex"},children:[e.jsx("input",{type:"checkbox",checked:M,onChange:s=>B(s.target.checked)}),e.jsx("span",{children:"Smazat i soubory projektu na disku"})]})]}),confirmText:"Smazat",cancelText:"Zrušit",type:"danger",loading:J})]}):null}export{pe as default};
|