PageSourceSearch

https://horizoncrm.ca/_assets/client.invoices-kbzVfT2t.js

js horizoncrm.ca collected 2026-09-24 14:36:11 UTC 7,873 bytes, 5 lines download raw bytes

1import{x as F,r as C,R as M,j as e,ay as z,a3 as G,L as h,dR as E,dc as O,bf as g,ad as U,ap as V}from"./vendor-B5KZbkSs.js";import{i as H}from"./invoiceStatusRules-jhowUO7A.js";import{u as K,o as X,ah as q,ai as J,d as Q,e as W,f as Y,h as Z,i as r,a as ee,B as x,S as d,X as te}from"./index-DS57U4Yv.js";import{C as se}from"./ClientStatusBadge-CkVrKcgC.js";import{u as ne}from"./useClientPaymentAvailability-BegpX_0j.js";import{u as ie}from"./usePrepareInvoicePayment-DIvhc3n5.js";const ae=n=>{switch(n){case"acompte":return"Acompte";case"solde":return"Solde";case"complete":return"Complète";default:return"Facture"}},ce=n=>{switch(n){case"acompte":return"secondary";case"solde":return"warning";case"complete":return"default";default:return"outline"}},oe="_pageContainer_16fgd_1",re="_header_16fgd_5",le="_title_16fgd_14",de="_subtitle_16fgd_21",ue="_filterContainer_16fgd_27",_e="_selectTrigger_16fgd_31",me="_invoicesList_16fgd_35",pe="_invoiceContainer_16fgd_41",ve="_invoiceItemLink_16fgd_58",he="_invoiceItem_16fgd_58",ge="_invoiceInfo_16fgd_75",xe="_invoiceTitleRow_16fgd_79",ye="_invoiceTitle_16fgd_79",fe="_invoiceMeta_16fgd_94",je="_invoiceDetails_16fgd_100",Ie="_invoiceAmount_16fgd_108",Ce="_invoiceDate_16fgd_123",Ne="_invoiceArrow_16fgd_129",Se="_invoiceGroup_16fgd_139",Te="_groupedInvoice_16fgd_146",be="_childInvoice_16fgd_150",Pe="_invoiceGroupConnector_16fgd_166",we="_paymentButtonContainer_16fgd_176",Ae="_paymentButton_16fgd_176",ke="_spinIcon_16fgd_187",De="_unavailableMessageShort_16fgd_200",Be="_errorState_16fgd_211",Le="_emptyState_16fgd_212",Re="_emptyIcon_16fgd_228",$e="_emptySubtext_16fgd_233",t={pageContainer:oe,header:re,title:le,subtitle:de,filterContainer:ue,selectTrigger:_e,invoicesList:me,invoiceContainer:pe,invoiceItemLink:ve,invoiceItem:he,invoiceInfo:ge,invoiceTitleRow:xe,invoiceTitle:ye,invoiceMeta:fe,invoiceDetails:je,invoiceAmount:Ie,invoiceDate:Ce,invoiceArrow:Ne,invoiceGroup:Se,groupedInvoice:Te,childInvoice:be,invoiceGroupConnector:Pe,paymentButtonContainer:we,paymentButton:Ae,spinIcon:ke,unavailableMessageShort:De,errorState:Be,emptyState:Le,emptyIcon:Re,emptySubtext:$e},Ve=()=>{const{t:n,regionCode:N}=K(),y=N==="FR_FR",S=F(),[m,T]=C.useState(""),{authState:f}=X(),l=f.type==="authenticated"?f.data.client.accessToken??void 0:void 0,{data:b}=ne({accessToken:l}),P=b?.isOnlinePaymentAvailable===!1,w=ie(),[j,I]=C.useState(null),A=async(c,a)=>{c.preventDefault(),c.stopPropagation();try{I(a);const i=await w.mutateAsync({invoiceId:a,accessToken:l});S(`/client/invoices/${a}/pay/${i.paymentLinkToken}${l?`?accessToken=${l}`:""}`)}catch(i){V.error(i instanceof Error?i.message:n("clients_unable_to_load_invoices"))}finally{I(null)}},k=c=>y?new Intl.NumberFormat("fr-FR",{style:"currency",currency:"EUR"}).format(c):te(c),{data:p,isFetching:D,error:B}=q({status:m||void 0}),{data:v}=J({}),L=M.useMemo(()=>{if(!v?.payments)return{};const c={};return[...v.payments].filter(i=>i.status!=="paid"&&i.status!=="cancelled").sort((i,s)=>new Date(i.scheduledDate).getTime()-new Date(s.scheduledDate).getTime()).forEach(i=>{c[i.invoiceId]||(c[i.invoiceId]=i)}),c},[v]),R=()=>D?Array.from({length:3}).map((a,i)=>e.jsx(Fe,{},i)):B?e.jsx("div",{className:t.errorState,children:n("clients_unable_to_load_invoices")}):!p?.invoices||p.invoices.length===0?e.jsxs("div",{className:t.emptyState,children:[e.jsx(G,{size:48,className:t.emptyIcon}),e.jsx("p",{children:n("clients_no_invoices_found")}),e.jsx("p",{className:t.emptySubtext,children:m?n("clients_no_invoices_with_status",{status:m}):n("clients_no_invoices_yet")})]}):p.invoices.reduce((a,i)=>{if(i.factureParentId){const s=a.findIndex(u=>u.some(o=>o.id===i.factureParentId));s>=0?a[s].push(i):a.push([i])}else{const s=a.findIndex(u=>u.some(o=>o.factureParentId===i.id));s>=0?a[s].unshift(i):a.push([i])}return a},[]).map((a,i)=>e.jsxs("div",{className:t.invoiceGroup,children:[a.map((s,u)=>e.jsxs("div",{className:`
2            ${t.invoiceContainer} 
3            ${a.length>1?t.groupedInvoice:""}
4            ${u>0?t.childInvoice:""}
5          `,children:[e.jsx(h,{to:`/client/invoices/${s.id}`,className:t.invoiceItemLink,children:e.jsxs("div",{className:t.invoiceItem,children:[e.jsxs("div",{className:t.invoiceInfo,children:[e.jsxs("div",{className:t.invoiceTitleRow,children:[e.jsx("h3",{className:t.invoiceTitle,children:s.title}),e.jsx(ee,{variant:ce(s.type),children:ae(s.type)})]}),e.jsxs("p",{className:t.invoiceMeta,children:["#",s.invoiceNumber," • ",s.projectName,s.type==="acompte"&&s.pourcentageAcompte&&e.jsxs("span",{children:[" • ",s.pourcentageAcompte,"% ",n("clients_deposit")]})]})]}),e.jsxs("div",{className:t.invoiceDetails,children:[e.jsx("span",{className:t.invoiceAmount,children:k(s.totalAmount)}),e.jsx(se,{type:"invoice",status:s.status,lang:"fr"}),e.jsxs("span",{className:t.invoiceDate,children:[n("clients_due_date")," "," ",s.dueDate?new Date(s.dueDate).toLocaleDateString(y?"fr-FR":"fr-CA"):"N/A"]}),e.jsx(E,{className:t.invoiceArrow,size:16})]})]})}),H.isPayable(s.status)&&e.jsx("div",{className:t.paymentButtonContainer,children:(()=>{const o=L[s.id],$=o?.paymentMethodPreference==="credit_card"&&o?.paymentLinkToken;return P?e.jsxs("div",{className:t.unavailableMessageShort,children:[e.jsx(O,{size:14}),e.jsx("span",{children:n("clients_online_payment_unavailable_short")})]}):$?e.jsx(x,{asChild:!0,size:"sm",className:t.paymentButton,children:e.jsxs(h,{to:`/client/invoices/${s.id}/pay/${o.paymentLinkToken}${l?`?accessToken=${l}`:""}`,onClick:_=>_.stopPropagation(),children:[e.jsx(g,{size:14})," ",n("clients_pay")]})}):o&&o.paymentMethodPreference!=="credit_card"?e.jsx(x,{asChild:!0,size:"sm",className:t.paymentButton,children:e.jsxs(h,{to:`/client/invoices/${s.id}`,onClick:_=>_.stopPropagation(),children:[e.jsx(g,{size:14})," ",n("clients_pay")]})}):e.jsxs(x,{size:"sm",className:t.paymentButton,onClick:_=>A(_,s.id),disabled:j===s.id,children:[j===s.id?e.jsx(U,{size:14,className:t.
5spinIcon}):e.jsx(g,{size:14}),n("clients_pay")]})})()})]},s.id)),a.length>1&&e.jsx("div",{className:t.invoiceGroupConnector})]},`group-${i}`));return e.jsxs(e.Fragment,{children:[e.jsx(z,{children:e.jsx("title",{children:n("clients_invoices_portal_title")})}),e.jsxs("div",{className:t.pageContainer,children:[e.jsxs("header",{className:t.header,children:[e.jsxs("div",{children:[e.jsx("h1",{className:t.title,children:n("clients_my_invoices")}),e.jsx("p",{className:t.subtitle,children:n("clients_invoice_history")})]}),e.jsx("div",{className:t.filterContainer,children:e.jsxs(Q,{value:m,onValueChange:c=>T(c==="__empty"?"":c),children:[e.jsx(W,{className:t.selectTrigger,children:e.jsx(Y,{placeholder:n("clients_filter_by_status")})}),e.jsxs(Z,{children:[e.jsx(r,{value:"__empty",children:n("clients_all_statuses")}),e.jsx(r,{value:"à_payer",children:n("clients_status_to_pay")}),e.jsx(r,{value:"payée",children:n("clients_status_paid")}),e.jsx(r,{value:"payée_partiellement",children:n("clients_status_partially_paid")}),e.jsx(r,{value:"overdue",children:n("clients_status_overdue")}),e.jsx(r,{value:"annulée",children:n("clients_status_cancelled")}),e.jsx(r,{value:"sent",children:n("clients_status_sent")})]})]})})]}),e.jsx("div",{className:t.invoicesList,children:R()})]})]})},Fe=()=>e.jsxs("div",{className:t.invoiceContainer,children:[e.jsxs("div",{className:t.invoiceItem,children:[e.jsxs("div",{className:t.invoiceInfo,children:[e.jsx(d,{style:{width:"250px",height:"1.25rem",marginBottom:"var(--spacing-2)"}}),e.jsx(d,{style:{width:"180px",height:"1rem"}})]}),e.jsxs("div",{className:t.invoiceDetails,children:[e.jsx(d,{style:{width:"100px",height:"1.25rem"}}),e.jsx(d,{style:{width:"80px",height:"24px",borderRadius:"var(--radius-full)"}}),e.jsx(d,{style:{width:"120px",height:"1rem"}})]})]}),e.jsx("div",{className:t.paymentButtonContainer,children:e.jsx(d,{style:{width:"100px",height:"32px"}})})]});export{Ve as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.