PageSourceSearch

https://alertis-back-office.onrender.com/assets/SignQuote-C5jk37uF.js

js alertis-back-office.onrender.com collected 2026-10-03 11:39:33 UTC 15,889 bytes, 4 lines download raw bytes

1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._posthogChunkIds=e._posthogChunkIds||{},e._posthogChunkIds[n]="01a0f947-bb19-78d0-aff8-0244343c42de")}catch(e){}}();import{o,c as b,w as f,j as g,d as t,aJ as ae,m as S,_ as x,g as q,t as k,ab as oe,k as _,x as D,B as h,i as U,C as ue,cB as T,r as m,f as $,aX as L,d2 as B,d3 as O,a as le,v as de,O as ce,P as me,c_ as ve,cC as ge,F as M,cD as pe,ae as fe,c$ as Se}from"./index-9oWpSwg1.js";import{P as ye}from"./PublicHeader-JuckBeX_.js";import{P as G}from"./PublicSection-mqJe_iv_.js";import{P as we}from"./PublicEstimate-Da33wxlD.js";import{P as be,a as A}from"./PublicFact-BdKOxqVB.js";import{P as qe}from"./PdfPreviewFrame-UJZHfRhF.js";import{A as Ee}from"./Alert-URdHzPDK.js";import{S as Pe,Q as De}from"./SignaturePad-7nVgbirD.js";import{u as _e}from"./useIsMobileViewport-CRc30dvQ.js";import{u as ke}from"./useSignQuoteUtils-B98CGJ1_.js";import"./Tabs-CL2fwr1h.js";const Ue={__name:"SignQuoteSummary",props:{quote:Object,formatFormationLieu:Function,formatAmou
1nt:Function,formatSentDate:Function},setup(e){const r=e,n=S(()=>{var i,l;const u=(l=r.formatSentDate)==null?void 0:l.call(r,(i=r.quote)==null?void 0:i.quoteSentDate);return u?`Devis envoyé le ${u} par Alertis.`:null});return(u,i)=>(o(),b(t(G),{title:"Votre devis",description:n.value},{default:f(()=>[g(t(be),{"data-testid":"quote-summary"},{default:f(()=>[g(t(A),{label:"Numéro du devis",value:`${e.quote.human_id||e.quote.id}`},null,8,["value"]),g(t(A),{label:"Établi pour",value:t(ae)(e.quote.prenom,e.quote.nom)},null,8,["value"]),g(t(A),{label:"Formation",value:e.quote.formationNom},null,8,["value"]),g(t(A),{label:"Lieu",value:e.formatFormationLieu(e.quote.formationLieu)},null,8,["value"])]),_:1}),g(t(we),{label:"Montant total TTC",amount:e.formatAmount(e.quote.quoteAmount),detail:"TVA incluse. Le détail des prestations figure dans le document ci-dessous."},null,8,["amount"])]),_:1},8,["description"]))}},Ce={class:"sq-preview"},Re={class:"sq-preview-hint"},Ae={key:1,class:"sq-preview-retry"},Te={class:"sq-submit"},Fe={class:"sq-submit-help"},Ve={__name:"SignQuoteSignatureSection",props:{confirmed:{type:Boolean,default:!1},signatureData:{type:String,default:null},pdfPreviewUrl:String,previewError:{type:String,default:null},previewSigned:{type:Boolean,default:!1},submitError:{type:String,default:null},submitting:Boolean},emits:["signature-update","update:confirmed","confirm-signature","retry-preview"],setup(e,{emit:r}){const n=e,u=r,{isMobile:i}=_e(),l=S(()=>i.value?320:420),v=S(()=>{const a=n.signatureData;return!!(a&&typeof a=="string"&&a.trim()!=="")}),d=S(()=>n.submitting||!n.confirmed||!v.value),E=S(()=>v.value?n.previewSigned?"Votre signature a été reportée en bas du document. Relisez-le avant de valider.":n.previewError?"L’aperçu ne montre pas encore votre signature : elle sera bien reportée sur le devis signé.":"Votre signature est en cours de report sur le document…":"Voici le devis complet. Votre signature y sera reportée dès que vous l’aurez tracée."),y=S(()=>n.submitting?"Merci de patienter, nous enregistrons votre signature.":!v.value&&!n.confirmed?"Signez et acceptez les conditions pour activer la signature.":v.value?n.confirmed?"Vous recevrez une copie du devis signé par e-mail.":"Il reste à accepter les conditions du devis.":"Il reste à apposer votre signature.");return(a,s)=>(o(),b(t(G),{title:"Votre signature",description:"Dessinez-la, saisissez vos initiales, ou téléversez votre tampon numérique."},{default:f(()=>[g(t(Pe),{label:"",placeholder:"Signez ici","onUpdate:modelValue":s[0]||(s[0]=p=>a.$emit("signature-update",p))}),q("div",Ce,[s[5]||(s[5]=q("h3",{class:"sq-preview-title"},"Le devis que vous signez",-1)),q("p",Re,k(E.value),1),g(t(qe),{src:e.pdfPreviewUrl||"",height:l.value,title:"Aperçu du devis à signer","absent-message":e.previewError?"Aperçu indisponible pour le moment.":"Chargement de l’aperçu…","data-testid":"sign-quote-pdf-preview"},null,8,["src","height","absent-message"]),e.previewError&&e.pdfPreviewUrl?(o(),b(t(oe),{key:0,variant:"warning",size:"md",align:"baseline",class:"sq-preview-notice"},{default:f(()=>[_(k(e.previewError),1)]),_:1})):e.previewError?(o(),D("div",Ae,[g(t(h),{variant:"secondary",icon:"fas fa-rotate-right","data-testid":"sign-quote-preview-retry",onClick:s[1]||(s[1]=p=>a.$emit("retry-preview"))},{default:f(()=>[...s[4]||(s[4]=[_(" Réessayer l’aperçu ",-1)])]),_:1})])):U("",!0)]),g(t(ue),{"model-value":e.confirmed,variant:"plain",class:"sq-confirm","label-text":"J'ai lu le devis ci-dessus et j'en accepte les conditions.","no-wrapper":"",required:"","test-id":"sign-quote-confirmation-checkbox","onUpdate:modelValue":s[2]||(s[2]=p=>u("update:confirmed",p))},null,8,["model-value"]),e.submitError?(o(),b(t(Ee),{key:0,variant:"danger","data-testid":"sign-quote-submit-error"},{default:f(()=>[_(k(e.submitError),1)]),_:1})):U("",!0),q("div",Te,[g(t(h),{variant:"primary",class:"public-submit",disabled:d.value,"data-testid":"sign-quote-submit-button",onClick:s[3]||(s[3]=p=>a.$emit("confirm-signature"))},{default:f(()=>[_(k(e.submitting?"Signature en cours…":"Signer le devis"),1)]),_:1},8,["disabled"]),q("p",Fe,k(y.value),1)])]),_:1}))}},he=x(Ve,[["__scopeId","data-v-b1bc45dc"]]),$e={key:0,"data-testid":"sign-quote-signed-copy-sent"},Le={key:1,"data-testid":"sign-quote-signed-copy-missing"}
1,Ie={__name:"SignQuoteSuccessMessage",props:{signedCopyEmail:{type:String,default:null}},setup(e){return(r,n)=>(o(),b(t(T),{title:"Votre devis est signé","data-testid":"sign-quote-success-message"},{default:f(()=>[e.signedCopyEmail?(o(),D("p",$e,[n[0]||(n[0]=_(" Nous venons d'envoyer le devis signé, au format PDF, à ",-1)),q("strong",null,k(e.signedCopyEmail),1),n[1]||(n[1]=_(". Vous ne le trouvez pas ? Regardez dans vos courriers indésirables. ",-1))])):(o(),D("p",Le," Votre conseiller a reçu la signature. Il peut vous transmettre une copie du devis signé sur simple demande. "))]),_:1}))}},Qe={key:0},Ne={key:1},ze={__name:"SignQuoteAlreadySignedMessage",props:{signatureDate:String,formatDate:Function},setup(e){const r=e,n=S(()=>r.signatureDate?"Ce devis est déjà signé":"Ce devis ne peut plus être signé");return(u,i)=>(o(),b(t(T),{tone:"warning",title:n.value,"data-testid":"sign-quote-already-signed"},{default:f(()=>[e.signatureDate?(o(),D("p",Qe,[i[0]||(i[0]=_(" Votre signature a été enregistrée le ",-1)),q("strong",null,k(e.formatDate(e.signatureDate)),1),i[1]||(i[1]=_(". Il n'y a rien d'autre à faire ici : votre conseiller poursuit l'organisation de la formation. ",-1))])):(o(),D("p",Ne," Ce devis ne peut plus être signé en ligne. Votre conseiller vous dira où en est votre dossier. "))]),_:1},8,["title"]))}},Me={__name:"SignQuoteErrorMessage",props:{error:String},setup(e){const r=e,n=S(()=>/token manquant/i.test(r.error||"")),u=S(()=>n.value?"Il manque quelque chose à ce lien":"Ce lien de signature n’est plus valable"),i=S(()=>n.value?"Ouvrez le devis depuis le lien reçu par e-mail, en entier : une adresse recopiée à la main perd souvent sa fin.":"Les liens de signature expirent au bout de trois mois, et un lien coupé par une messagerie ne fonctionne pas non plus. Demandez-nous un nouveau lien : nous vous le renvoyons tout de suite.");return(l,v)=>(o(),b(t(T),{tone:"neutral",title:u.value,"data-testid":"sign-quote-error-message"},{default:f(()=>[q("p",null,k(i.value),1)]),_:1},8,["title"]))}},xe={__name:"SignQuoteUnavailableMessage",emits:["retry"],setup(e){return(r,n)=>(o(),b(t(T),{tone:"neutral",icon:"fas fa-plug-circle-exclamation",title:"Votre devis ne s’affiche pas pour le moment","data-testid":"sign-quote-unavailable-message"},{actions:f(()=>[g(t(h),{variant:"secondary","data-testid":"sign-quote-retry",onClick:n[0]||(n[0]=u=>r.$emit("retry"))},{default:f(()=>[...n[1]||(n[1]=[_(" Réessayer ",-1)])]),_:1})]),default:f(()=>[n[2]||(n[2]=q("p",null," Notre serveur n'a pas répondu, ou votre connexion a été interrompue. Votre lien reste valable : réessayez dans un instant. ",-1))]),_:1}))}};function Be(){const e=m(!0),r=m(null),n=m(!1),u=m(null),i=m(null),l=m(null),v=m(!1),d=m(!1),E=m(!1),y=m(!1),a=m(null),s=m(null),p=m(null),c=m(!1),w=m(null);return{loading:e,error:r,loadFailed:n,submitError:u,quote:i,commercial:l,confirmed:v,submitting:d,success:E,alreadySigned:y,signatureDate:a,signatureData:s,pdfPreviewUrl:p,generatingPreview:c,signedCopyEmail:w}}const{LIEN_INVALIDE:Oe,SIGNATURE_REFUSEE:Ge}=De,je="Votre signature n'a pas pu être enregistrée : la connexion ou notre serveur n'a pas répondu. Elle est conservée ici : réessayez dans un instant.",He="Trop de tentatives en peu de temps. Patientez quelques minutes, puis cliquez à nouveau sur « Signer le devis » : votre signature est conservée.";function j(e){var r;return((r=e==null?void 0:e.details)==null?void 0:r.code)===Oe}function Je(e){var r;return((r=e==null?void 0:e.details)==null?void 0:r.code)===Ge&&e.message?/[.!?]$/.test(e.message)?e.message:`${e.message}.`:(e==null?void 0:e.status)===429?He:je}function Xe({loading:e,error:r,loadFailed:n,quote:u,commercial:i,alreadySigned:l,signatureDate:v,loadPDFPreview:d}){const E=$(),{get:y}=L();return{loadQuote:async()=>{var p;const s=E.query.token;if(r.value=null,n.value=!1,!s){r.value="Token manquant dans l'URL",e.value=!1;return}e.value=!0;try{const c=await y(`/api/public/quotes/sign?token=${encodeURIComponent(s)}`,{errorMessage:"Erreur lors du chargement du devis",showErrorToast:!1});!c.success||c.alreadySigned?(l.value=!0,v.value=c.signatureDate,i.value=c.commercial||null):(u.value=c.quote,i.value=((p=c.quote)==null?void 0:p.commercial)||null,d())}catch(c){j(c)?r.value=c.message:n.value=!0}finally{e.value=!1}}}}const Ke="L'aperçu n'a pas pu être actualisé. Votre signature n'est pas perdue : vous pouvez continuer ou réessayer dans un instant.",We="L'aperçu n'a pas pu être actualisé. Réessayez dans un instant.";function Ye({quote:e,pdfPreviewUrl:r,generatingPreview:n}){const u=$(),{post:i}=L(),l=m(null),v=m(!1);let d=0;function E(a){const s=r.value;r.value=a,s&&s!==a&&window.URL.revokeObjectURL(s)}const y=async(a=null)=>{if(!e.value)return;const s=++d;n.value=!0;try{const p=u.query.token,c=await i("/api/public/quotes/sign-preview",{token:p,signature:a||null},{showErrorToast:!1,errorMessage:"Erreur lors du chargement de l'aperçu"});if(s!==d)return;E(window.URL.createObjectURL(c)),v.value=!!a,l.value=null}catch(p){if(s!==d)return;console.error("Error loading PDF preview:",p),l.value=a?Ke:We}finally{s===d&&(n.value=!1)}};return B()&&O(()=>{d++,E(null)}),{loadPDFPreview:y,previewError:l,previewSigned:v}}function Ze({confirmed:e,signatureData:r,submitting:n,alreadySigned:u,signatureDate:i,success:l,error:v,submitError:d,signedCopyEmail
1:E}){const y=$(),{post:a}=L(),{captureException:s}=le();return{confirmSignature:async()=>{if(!e.value||!r.value||n.value)return;const c=y.query.token;n.value=!0,d.value=null;try{const w=await a("/api/public/quotes/sign",{token:c,signature:r.value},{showSuccessToast:!1,errorMessage:"Erreur lors de la signature",showErrorToast:!1});w.alreadySigned?(u.value=!0,i.value=w.signatureDate):(l.value=!0,E.value=w.signedCopySentTo||null)}catch(w){j(w)?v.value=w.message:d.value=Je(w);const F=c?c.substring(0,8)+"...":null;s(w,{error_type:"quote_signature_error",token_hash:F,error_message:w.message||"Erreur lors de la signature"})}finally{n.value=!1}}}}function et(e){const r=Ye({quote:e.quote,pdfPreviewUrl:e.pdfPreviewUrl,generatingPreview:e.generatingPreview}),n=Xe({loading:e.loading,error:e.error,loadFailed:e.loadFailed,quote:e.quote,commercial:e.commercial,alreadySigned:e.alreadySigned,signatureDate:e.signatureDate,loadPDFPreview:r.loadPDFPreview}),u=Ze({confirmed:e.confirmed,signatureData:e.signatureData,submitting:e.submitting,alreadySigned:e.alreadySigned,signatureDate:e.signatureDate,success:e.success,error:e.error,submitError:e.submitError,signedCopyEmail:e.signedCopyEmail});let i=null;const l=d=>{e.signatureData.value=d,e.submitError.value=null,clearTimeout(i),i=setTimeout(()=>{r.loadPDFPreview(d||null)},500)},v=()=>(r.previewError.value=null,r.loadPDFPreview(e.signatureData.value||null));return B()&&O(()=>clearTimeout(i)),{loadQuote:n.loadQuote,loadPDFPreview:r.loadPDFPreview,previewError:r.previewError,previewSigned:r.previewSigned,handleSignatureUpdate:l,retryPreview:v,confirmSignature:u.confirmSignature}}function tt(){const e=Be(),r=ke(),n=et(e);return de(()=>{n.loadQuote()}),{...e,...r,...n}}const nt={class:"sign-quote-page ecran-public"},rt={class:"sign-quote-body"},st={class:"sign-quote-container","data-testid":"sign-quote-container"},it={key:0,class:"sq-wait",role:"status","aria-live":"polite","data-testid":"sign-quote-loading"},at={key:0,class:"sq-wait-slow","data-testid":"sign-quote-loading-slow"},ot={class:"sign-quote-content"},ut=250,lt=6e3,dt={__name:"SignQuote",setup(e){const{loading:r,error:n,loadFailed:u,submitError:i,quote:l,commercial:v,confirmed:d,submitting:E,success:y,alreadySigned:a,signatureDate:s,signatureData:p,pdfPreviewUrl:c,previewError:w,previewSigned:F,formatFormationLieu:H,formatAmount:J,formatDate:X,formatSentDate:K,handleSignatureUpdate:W,retryPreview:Y,loadQuote:Z,confirmSignature:ee,signedCopyEmail:te}=tt(),R=m(!1),V=m(!1);let I=null,Q=null;function N(){clearTimeout(I),clearTimeout(Q)}ce(r,P=>{N(),R.value=!1,V.value=!1,P&&(I=setTimeout(()=>{R.value=!0},ut),Q=setTimeout(()=>{V.value=!0},lt))},{immediate:!0}),me(N);const z=S(()=>{var P;return v.value||((P=l.value)==null?void 0:P.commercial)||null}),ne=S(()=>{const P=z.value;return P&&[P.prenom,P.nom].filter(Boolean).join(" ").trim()||null}),re=S(()=>{var P;return((P=z.value)==null?void 0:P.email)||"[email protected]"}),se=S(()=>n.value&&!a.value&&!y.value?"Demander un nouveau lien":"Une question sur ce devis ?");return(P,C)=>(o(),D("div",nt,[g(t(ve),{logo:"/logo-alertis.png",alt:"Alertis",note:"Signature de devis"}),q("div",rt,[q("div",st,[g(t(ge),null,{default:f(()=>[t(r)?(o(),D("div",it,[R.value?(o(),D(M,{key:0},[g(t(pe)),C[1]||(C[1]=q("p",{class:"sq-wait-text"},"Chargement de votre devis…",-1)),V.value?(o(),D("p",at," Le serveur met du temps à répondre. Votre devis s'affichera dès qu'il aura répondu. ")):U("",!0)],64)):U("",!0)])):t(n)&&!t(a)&&!t(y)?(o(),b(Me,{key:1,error:t(n)},null,8,["error"])):t(u)?(o(),b(xe,{key:2,onRetry:t(Z)},null,8,["onRetry"])):t(a)?(o(),b(ze,{key:3,"signature-date":t(s),"format-date":t(X)},null,8,["signature-date","format-date"])):t(y)?(o(),b(Ie,{key:4,"signed-copy-email":t(te)},null,8,["signed-copy-email"])):t(l)?(o(),D(M,{key:5},[g(t(ye),{title:"Signer votre devis",lead:"Relisez votre devis, puis signez-le en ligne. Votre signature a la même valeur qu'une signature manuscrite, et votre conseiller la reçoit immédiatement."}),q("div",ot,[g(Ue,{quote:t(l),"format-formation-lieu":t(H),"format-amount":t(J),"format-sent-date":t(K)},null,8,["quote","format-formation-lieu","format-amount","format-sent-date"]),g(he,{confirmed:t(d),"onUpdate:confirmed":C[0]||(C[0]=ie=>fe(d)?d.value=ie:null),"signature-data":t(p),"pdf-preview-url":t(c),"preview-error":t(w),"preview-signed":t(F),"submit-error":t(i),submitting:t(E),onSignatureUpdate:t(W),onConfirmSignature:t(ee),onRetryPreview:t(Y)},null,8,["confirmed","signature-data","pdf-preview-url","preview-error","preview-signed","submit-error","submitting","onSignatureUpdate","onConfirmSignature","onRetryPreview"])])],64)):U("",!0),!t(r)||R.value?(o(),b(t(Se),{key:6,title:se.value,"person-name":ne.value,email:re.value,phone:"04 78 90 46 30"},null,8,["title","person-name","email"])):U("",!0)]),_:1})])])]))}},Et=x(dt,[["__scopeId","data-v-d7665f8a"]]);export{Et as default};
2//# sourceMappingURL=SignQuote-C5jk37uF.js.map
3
4//# chunkId=01a0f947-bb19-78d0-aff8-0244343c42de

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.