From d775e484b68651dacdeadcff2e9b497162d2e702 Mon Sep 17 00:00:00 2001
From: "Fabien F."
+
+ {#if preferences.showTechnicalNames}
+ En dessous de ce nombre, la catégorie n’a pas de puce dans la barre du bas. Ses
+ produits restent dans « Tout » et à la recherche : ce réglage ne retire aucune
+ tuile. Pour ne plus montrer une catégorie du tout, c’est sa case « visible » qu’il
+ faut décocher.
+ {CHIP_THRESHOLD_PATH}{/if}
+
+
+ {#if preferences.showTechnicalNames}{CHIP_THRESHOLD_PATH}{/if}
+
+ En dessous de ce nombre, la catégorie n’a pas de puce dans la barre du bas. Ses + produits restent dans « Tout » et à la recherche : ce réglage ne retire aucune + tuile. Pour ne plus montrer une catégorie du tout, c’est sa case « visible » qu’il + faut décocher. +
+ ")),t.content}function Je(e,t){var n=w;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function tt(e,t){var n=(t&Zr)!==0,r=(t&Wr)!==0,i,s=!e.startsWith("");return()=>{i===void 0&&(i=lr(s?e:""+e),n||(i=De(i)));var f=r||Bn?document.importNode(i,!0):i.cloneNode(!0);if(n){var l=De(f),a=f.lastChild;Je(l,a)}else Je(f,f);return f}}function zi(e,t,n="svg"){var r=!e.startsWith(""),i=`<${n}>${r?e:""+e}${n}>`,s;return()=>{if(!s){var f=lr(i),l=De(f);s=De(l)}var a=s.cloneNode(!0);return Je(a,a),a}}function Ui(e,t){return zi(e,t,"svg")}function Us(e=""){{var t=le(e+"");return Je(t,t),t}}function qs(){var e=document.createDocumentFragment(),t=document.createComment(""),n=le();return e.append(t,n),Je(t,n),e}function Oe(e,t){e!==null&&e.before(t)}function Ue(e,t){var n=t==null?"":typeof t=="object"?`${t}`:t;n!==(e[Rt]??=e.nodeValue)&&(e[Rt]=n,e.nodeValue=`${n}`)}function Bs(e,t){return qi(e,t)}const st=new Map;function qi(e,{target:t,anchor:n,props:r={},events:i,context:s,intro:f=!0,transformError:l}){bi();var a=void 0,o=Ai(()=>{var c=n??t.appendChild(le());li(c,{pending:()=>{}},h=>{On({});var v=I;s&&(v.c=s),i&&(r.$$events=i),a=e(h,r)||{},Nn()},l);var d=new Set,u=h=>{for(var v=0;v{var f,l;return Zn(()=>{f=l,l=[],Wt(()=>{Ot(n(...l),e)||(t(e,...l),f&&Ot(n(...f),e)&&t(null,...f))})}),()=>{let a=s;for(;a!==i&&a.parent!==null&&a.parent.f&Ct;)a=a.parent;const o=()=>{l&&Ot(n(...l),e)&&t(null,...l)},c=a.teardown;a.teardown=()=>{o(),c?.()}}}),e}function se(e,t,n,r){var i=!0,s=(n&Xr)!==0,f=(n&Kr)!==0,l=r,a=!0,o=void 0,c=()=>f&&i?(o??=Ze(r),T(o)):(a&&(a=!1,l=f?Wt(r):r),l);let d;if(s){var u=we in e||Or in e;d=Ce(e,t)?.set??(u&&t in e?E=>e[t]=E:void 0)}var h,v=!1;s?[h,v]=ii(()=>e[t]):h=e[t],h===void 0&&r!==void 0&&(h=c(),d&&(Dr(),d(h)));var p;if(p=()=>{var E=e[t];return E===void 0?c():(a=!0,E)},(n&Yr)===0)return p;if(d){var _=e.$$legacy;return(function(E,x){return arguments.length>0?((!x||_||v)&&d(x?p():E),E):p()})}var g=!1,S=((n&Vr)!==0?Ze:Ln)(()=>(g=!1,p()));s&&T(S);var y=w;return(function(E,x){if(arguments.length>0){const Y=x?T(S):s?ke(E):E;return ae(S,Y),g=!0,l!==void 0&&(l=Y),E}return ue&&g||(y.f&H)!==0?S.v:T(S)})}const es="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(es);var ts=Ui('');function Zs(e,t){const n=se(t,"size",3,"1.5rem"),r={search:"M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14M16.5 16.5 21 21",tare:"M8 4h8M9 4v3.2a3 3 0 0 1-.5 1.7l-.8 1.2a4 4 0 0 0-.7 2.2V18a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-5.7a4 4 0 0 0-.7-2.2l-.8-1.2a3 3 0 0 1-.5-1.7V4M7 14h10",printer:"M7 9V4h10v5M7 20h10v-6H7zM7 17H5a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2",alert:"M12 3.5 21.5 20h-19zM12 10v4M12 17.2v.1",backspace:"M9 5h11a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H9l-7-7zM17 9l-6 6M11 9l6 6",check:"M4 12.5 9.5 18 20 7",close:"M6 6l12 12M18 6 6 18",settings:"M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6M19.4 15a1.6 1.6 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.6 1.6 0 0 0-1.8-.3 1.6 1.6 0 0 0-1 1.5v.2a2 2 0 1 1-4 0v-.1a1.6 1.6 0 0 0-1-1.5 1.6 1.6 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.6 1.6 0 0 0 .3-1.8 1.6 1.6 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.6 1.6 0 0 0 1.5-1 1.6 1.6 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.6 1.6 0 0 0 1.8.3H9a1.6 1.6 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.6 1.6 0 0 0 1 1.5 1.6 1.6 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.6 1.6 0 0 0-.3 1.8V9a1.6 1.6 0 0 0 1.5 1h.2a2 2 0 1 1 0 4h-.1a1.6 1.6 0 0 0-1.5 1"};var i=ts();let s;var f=Q(i);Ge(()=>{s=ot(i,"",s,{width:n(),height:n()}),zt(f,"d",r[t.name])}),Oe(e,i)}async function Ws(){const e=await fetch("/api/v1/catalog",{headers:{accept:"application/json"}});if(!e.ok)throw new Error(`GET /api/v1/catalog: ${e.status}`);return await e.json()}async function Js(e){await Qt("/api/v1/weigh",e)}async function Qs(e,t){await Qt("/api/v1/reprint",{job_id:e,key:t})}async function $s(){await Qt("/api/v1/dismiss",{})}function ef(e,t){fetch("/api/v1/ui/error",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({message:e,stack:t}),keepalive:!0}).catch(()=>{})}function tf(e){fetch("/api/v1/ui/layout-notice",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({message:e}),keepalive:!0}).catch(()=>{})}async function Qt(e,t){const n=await fetch(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new Error(`POST ${e}: ${n.status}`)}const or={Œ:"oe",œ:"oe",Æ:"ae",æ:"ae",ß:"ss",Ø:"o",ø:"o"},ns=new RegExp(`[${Object.keys(or).join("")}]`,"gu"),rs=/\p{Mn}/u,is=/[\p{L}\p{Nd}]/u;function ss(e){const n=e.replace(ns,s=>or[s]).normalize("NFD");let r="",i=!1;for(const s of n)if(!rs.test(s)){if(is.test(s)){i&&r.length>0&&(r+=" "),i=!1,r+=s.toLowerCase();continue}i=!0}return r}const fs=5,ur="",as="by_unit";function ls(e){const t=new Set(e.categories.filter(r=>!r.visible).map(r=>r.code)),n=!e.presentation.show_by_unit_products;return t.size===0&&!n?e.products:e.products.filter(r=>!t.has(r.category_code)&&!(n&&r.mode===as))}function nf(e){const t=ls(e),n=new Map;for(const i of t)n.set(i.category_code,(n.get(i.category_code)??0)+1);const r=e.categories.filter(i=>i.visible&&(n.get(i.code)??0)>=fs).slice().sort((i,s)=>i.rank-s.rank||i.code.localeCompare(s.code)).map(i=>({code:i.code,label:i.label,color:i.color,count:n.get(i.code)??0}));return[{code:ur,label:"Tout",color:"var(--ink-muted)",count:t.length},...r]}function rf(e,t,n){const r=ss(n),i=r.length===0?[]:r.split(" ");return e.filter(s=>t!==ur&&s.category_code!==t?!1:i.every(f=>s.search.includes(f)))}const os=4.5,us=.1,cs={r:138,g:134,b:124};function cr(e){const t=/^#([\da-f])([\da-f])([\da-f])$/iu.exec(e);if(t!==null){const[,f,l,a]=t;return{r:Number.parseInt(f+f,16),g:Number.parseInt(l+l,16),b:Number.parseInt(a+a,16)}}const n=/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})$/iu.exec(e);if(n===null)return cs;const[,r,i,s]=n;return{r:Number.parseInt(r,16),g:Number.parseInt(i,16),b:Number.parseInt(s,16)}}function Nt(e){const t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}function ds({r:e,g:t,b:n}){return .2126*Nt(e)+.7152*Nt(t)+.0722*Nt(n)}function hs(e){return 1.05/(ds(e)+.05)}function vs(e){const{r:t,g:n,b:r}=cr(e),i=s=>Math.round(255-us*(255-s));return`rgb(${i(t)}, ${i(n)}, ${i(r)})`}function _s(e){let t=cr(e);for(let n=0;n<16&&hs(t) {var f,l;return Zn(()=>{f=l,l=[],Wt(()=>{Ot(n(...l),e)||(t(e,...l),f&&Ot(n(...f),e)&&t(null,...f))})}),()=>{let a=s;for(;a!==i&&a.parent!==null&&a.parent.f&Ct;)a=a.parent;const o=()=>{l&&Ot(n(...l),e)&&t(null,...l)},c=a.teardown;a.teardown=()=>{o(),c?.()}}}),e}function se(e,t,n,r){var i=!0,s=(n&Xr)!==0,f=(n&Kr)!==0,l=r,a=!0,o=void 0,c=()=>f&&i?(o??=Ze(r),T(o)):(a&&(a=!1,l=f?Wt(r):r),l);let d;if(s){var u=we in e||Or in e;d=Ce(e,t)?.set??(u&&t in e?E=>e[t]=E:void 0)}var h,v=!1;s?[h,v]=ii(()=>e[t]):h=e[t],h===void 0&&r!==void 0&&(h=c(),d&&(Dr(),d(h)));var p;if(p=()=>{var E=e[t];return E===void 0?c():(a=!0,E)},(n&Yr)===0)return p;if(d){var _=e.$$legacy;return(function(E,x){return arguments.length>0?((!x||_||v)&&d(x?p():E),E):p()})}var g=!1,S=((n&Vr)!==0?Ze:Ln)(()=>(g=!1,p()));s&&T(S);var y=w;return(function(E,x){if(arguments.length>0){const Y=x?T(S):s?ke(E):E;return ae(S,Y),g=!0,l!==void 0&&(l=Y),E}return ue&&g||(y.f&H)!==0?S.v:T(S)})}const es="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(es);var ts=Ui('');function Zs(e,t){const n=se(t,"size",3,"1.5rem"),r={search:"M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14M16.5 16.5 21 21",tare:"M8 4h8M9 4v3.2a3 3 0 0 1-.5 1.7l-.8 1.2a4 4 0 0 0-.7 2.2V18a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-5.7a4 4 0 0 0-.7-2.2l-.8-1.2a3 3 0 0 1-.5-1.7V4M7 14h10",printer:"M7 9V4h10v5M7 20h10v-6H7zM7 17H5a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2",alert:"M12 3.5 21.5 20h-19zM12 10v4M12 17.2v.1",backspace:"M9 5h11a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H9l-7-7zM17 9l-6 6M11 9l6 6",check:"M4 12.5 9.5 18 20 7",close:"M6 6l12 12M18 6 6 18",settings:"M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6M19.4 15a1.6 1.6 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.6 1.6 0 0 0-1.8-.3 1.6 1.6 0 0 0-1 1.5v.2a2 2 0 1 1-4 0v-.1a1.6 1.6 0 0 0-1-1.5 1.6 1.6 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.6 1.6 0 0 0 .3-1.8 1.6 1.6 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.6 1.6 0 0 0 1.5-1 1.6 1.6 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.6 1.6 0 0 0 1.8.3H9a1.6 1.6 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.6 1.6 0 0 0 1 1.5 1.6 1.6 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.6 1.6 0 0 0-.3 1.8V9a1.6 1.6 0 0 0 1.5 1h.2a2 2 0 1 1 0 4h-.1a1.6 1.6 0 0 0-1.5 1"};var i=ts();let s;var f=Q(i);Ge(()=>{s=ot(i,"",s,{width:n(),height:n()}),zt(f,"d",r[t.name])}),Oe(e,i)}async function Ws(){const e=await fetch("/api/v1/catalog",{headers:{accept:"application/json"}});if(!e.ok)throw new Error(`GET /api/v1/catalog: ${e.status}`);return await e.json()}async function Js(e){await Qt("/api/v1/weigh",e)}async function Qs(e,t){await Qt("/api/v1/reprint",{job_id:e,key:t})}async function $s(){await Qt("/api/v1/dismiss",{})}function ef(e,t){fetch("/api/v1/ui/error",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({message:e,stack:t}),keepalive:!0}).catch(()=>{})}function tf(e){fetch("/api/v1/ui/layout-notice",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({message:e}),keepalive:!0}).catch(()=>{})}async function Qt(e,t){const n=await fetch(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new Error(`POST ${e}: ${n.status}`)}const or={Œ:"oe",œ:"oe",Æ:"ae",æ:"ae",ß:"ss",Ø:"o",ø:"o"},ns=new RegExp(`[${Object.keys(or).join("")}]`,"gu"),rs=/\p{Mn}/u,is=/[\p{L}\p{Nd}]/u;function ss(e){const n=e.replace(ns,s=>or[s]).normalize("NFD");let r="",i=!1;for(const s of n)if(!rs.test(s)){if(is.test(s)){i&&r.length>0&&(r+=" "),i=!1,r+=s.toLowerCase();continue}i=!0}return r}const fs=5,ur="",as="by_unit";function ls(e){const t=new Set(e.categories.filter(r=>!r.visible).map(r=>r.code)),n=!e.presentation.show_by_unit_products;return t.size===0&&!n?e.products:e.products.filter(r=>!t.has(r.category_code)&&!(n&&r.mode===as))}function nf(e){const t=ls(e),n=new Map;for(const s of t)n.set(s.category_code,(n.get(s.category_code)??0)+1);const r=e.presentation.min_products_for_chip??fs,i=e.categories.filter(s=>s.visible&&(n.get(s.code)??0)>=r).slice().sort((s,f)=>s.rank-f.rank||s.code.localeCompare(f.code)).map(s=>({code:s.code,label:s.label,color:s.color,count:n.get(s.code)??0}));return[{code:ur,label:"Tout",color:"var(--ink-muted)",count:t.length},...i]}function rf(e,t,n){const r=ss(n),i=r.length===0?[]:r.split(" ");return e.filter(s=>t!==ur&&s.category_code!==t?!1:i.every(f=>s.search.includes(f)))}const os=4.5,us=.1,cs={r:138,g:134,b:124};function cr(e){const t=/^#([\da-f])([\da-f])([\da-f])$/iu.exec(e);if(t!==null){const[,f,l,a]=t;return{r:Number.parseInt(f+f,16),g:Number.parseInt(l+l,16),b:Number.parseInt(a+a,16)}}const n=/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})$/iu.exec(e);if(n===null)return cs;const[,r,i,s]=n;return{r:Number.parseInt(r,16),g:Number.parseInt(i,16),b:Number.parseInt(s,16)}}function Nt(e){const t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}function ds({r:e,g:t,b:n}){return .2126*Nt(e)+.7152*Nt(t)+.0722*Nt(n)}function hs(e){return 1.05/(ds(e)+.05)}function vs(e){const{r:t,g:n,b:r}=cr(e),i=s=>Math.round(255-us*(255-s));return`rgb(${i(t)}, ${i(n)}, ${i(r)})`}function _s(e){let t=cr(e);for(let n=0;n<16&&hs(t) kg —kg Poids indisponible Chargement du catalogue… Tare g kg —kg Poids indisponible Chargement du catalogue… Tare g Le code de secours a été tiré à l’installation de ce poste et imprimé
- sur sa fiche, rangée dans le classeur du magasin. Il n’existe nulle part ailleurs. Oublié ? Le code de secours de la fiche d’installation en repose un.
- Un responsable peut aussi le faire en ligne de commande, avec Lecture des réglages du poste… Le poste y cherche le fichier Sur un serveur WebDAV, le dépôt d’un fichier CSV depuis cet écran n’est plus
- possible : le poste n’a plus de répertoire local où l’écrire. C’est le seul recours
- du jour de la mise en service. Ce poste ne déclare aucune source : choisissez-en une ci-dessus, sinon il n’ira
- chercher aucun catalogue. Aucune décision locale : la grille est celle du fichier. Aucun import dans l’historique. Aucun import enregistré sur ce poste. « Oublier la quarantaine » fait relire un fichier que le poste avait écarté : c’est le
- seul geste de cette page qui puisse remettre en service un catalogue refusé. Un produit masqué reste vendable : la caisse lit toujours son code-barres, et une
- étiquette déjà imprimée reste valable. Ce réglage ne fait que retirer sa tuile. Colonnes de la grille Se tromper ne coûte rien d’autre que de revenir ici : le réglage ne change ni le
- fichier reçu, ni les étiquettes déjà imprimées. Déposez ici le fichier Ce dépôt remplace toute la grille par le fichier apporté : il change ce que le poste
- vend, et le mot de passe est donc demandé au moment du dépôt. Aucun import enregistré : rien n’a encore pu être retiré. Aucun produit retiré par le dernier import. Ils restent enregistrés avec leur historique : une étiquette déjà collée reste
- lisible en caisse, et un produit qui revient dans un prochain fichier retrouve sa
- tuile. Ce poste n’en publie encore que le nombre — leurs noms se lisent dans Odoo,
- en comparant avec l’export précédent. Un produit retiré de la grille ne se trouve plus ici : il se reprend dans
- « Décisions en vigueur », plus bas. Sans motif, le poste refuse la décision. Le seul acte qui s’en passe est celui qui
- EFFACE la décision en vigueur : proposer de nouveau un produit qui ne porte aucune
- dérogation. Produit choisi : Ce produit est-il proposé dans la grille ? La dérogation s’enregistre seule : elle ne remet pas dans la grille un produit
- qui en a été retiré, et retirer un produit n’efface pas sa dérogation. Aucun import enregistré sur ce poste : le catalogue n’est jamais arrivé, ou le
- journal ne le porte pas. Aucune décision locale : le catalogue est proposé tel qu’il arrive. Rien à signaler depuis le démarrage du poste. Lecture de la configuration en cours… tant qu’elle n’est pas arrivée, cette page ne
- déclare rien de ce poste. L’état et la cadence viennent de ce que le poste observe vraiment, jamais d’un réglage. pr(P));ee!==null&&(r().notice=ee.message,await r().refresh())}async function Ne(){v(K,0),v(F,0),e(z)||await le();const P=e(j);if(P.length===0){v(D,[],!0);return}await r().protect(()=>Ve(P))}async function Ve(P){v(D,[],!0),v(F,P.length,!0);for(const[ee,be]of P.entries()){v(K,ee+1);try{const de=await xn(be.name);v(D,[...e(D),{port:be.name,message:de.message,refused:!1}],!0)}catch(de){if(fa(de))throw de;v(D,[...e(D),{port:be.name,message:Re(de),refused:!0}],!0)}}}function ye(P,ee){const be=Qt(t.draft,P);return be.length>0?be:ee.slice(0,m)}function Re(P){return P instanceof zt?P.message:P instanceof Error?"Le poste n’a pas répondu : "+P.message:"Le poste n’a pas répondu."}const lt=[{what:"label",name:"étiquette"},{what:"alignment",name:"alignement"},{what:"ruler",name:"réglette"}],it=u(()=>lt.filter(P=>t.health.printer_self_tests.includes(P.what)));var gt=Hi(),ht=s(gt),dt=s(ht);Ka(dt,{title:"Balance",name:"scale",get standing(){return e(Y)}});var mt=n(dt,2),yt=s(mt),Ze=n(mt,4);{var me=P=>{var ee=Oi(),be=s(ee);f(()=>ta(be,e(y))),Ce("change",be,de=>t.draft.set("scale.present",!de.currentTarget.checked)),l(P,ee)},Le=P=>{var ee=Ai();l(P,ee)};_(Ze,P=>{e(C)?P(me):P(Le,-1)})}var rt=n(Ze,2),Ft=s(rt);{let P=u(()=>e(R)==="ports"),ee=u(()=>e(R)!=="");Pe(Ft,{label:"Lister les ports",get busy(){return e(P)},get disabled(){return e(ee)},onrun:()=>{oe("ports",le)}})}var Ot=n(Ft,2);{let P=u(()=>e(R)!=="");Pe(Ot,{act:"detect",get label(){return e(N)},protected:!0,get disabled(){return e(P)},onrun:()=>{oe("detect",Ne)}})}var Tt=n(rt,2);{var At=P=>{var ee=Ii(),be=te(ee),de=s(be),Ae=n(be,2);{var De=Qe=>{var kt=Ni();Te(kt,21,()=>e(j).slice(0,m),Et=>Et.name,(Et,bt)=>{var Gt=Xa(),Yt=s(Gt),_a=s(Yt),Er=n(Yt,2),Cr=s(Er);f(()=>{o(_a,e(bt).name),o(Cr,`${(e(bt).description===""?"aucune description USB":e(bt).description)??""}
- ${e(bt).vid===""?"":` — VID ${e(bt).vid} PID ${e(bt).pid}`}`)}),Ce("click",Yt,()=>t.draft.set("scale.options.port",e(bt).name)),l(Et,Gt)}),l(Qe,kt)};_(Ae,Qe=>{e(j).length>0&&Qe(De)})}f(Qe=>o(de,Qe),[()=>e(j).length===0?"Aucun port série n’est visible depuis ce poste.":ya("port détecté","ports détectés",e(j).length,m)]),l(P,ee)};_(Tt,P=>{e(z)&&P(At)})}var Nt=n(Tt,2);{var Ut=P=>{var ee=Fi(),be=te(ee),de=s(be),Ae=n(be,2);Te(Ae,21,()=>e(D).slice(0,m),De=>De.port,(De,Qe)=>{var kt=Di();let Et;var bt=s(kt),Gt=s(bt),Yt=n(bt,2),_a=s(Yt);f(()=>{Et=Mt(kt,1,"svelte-1p4i0xm",null,Et,{refused:e(Qe).refused}),o(Gt,e(Qe).port),o(_a,e(Qe).message)}),l(De,kt)}),f(De=>o(de,De),[()=>ya("port interrogé","ports interrogés",e(D).length,m)]),l(P,ee)};_(Nt,P=>{e(D).length>0&&P(Ut)})}var Bt=n(Nt,2),$t=n(s(Bt),2),Vt=s($t);{let P=u(()=>t.draft.text("scale.type")),ee=u(()=>Ye(t.draft,"scale.type")),be=u(()=>Qt(t.draft,"scale.type")),de=u(()=>!e(C));at(Vt,{label:"Protocole",path:"scale.type",get value(){return e(P)},hint:"Les valeurs acceptées apparaissent ici si l’enregistrement est refusé.",get fault(){return e(ee)},get allowed(){return e(be)},get disabled(){return e(de)},onchange:Ae=>t.draft.set("scale.type",Ae)})}var aa=n(Vt,2);{let P=u(()=>t.draft.text("scale.options.port")),ee=u(()=>Ye(t.draft,"scale.options.port")),be=u(()=>ye("scale.options.port",e(j).map(Ae=>Ae.name))),de=u(()=>!e(C));at(aa,{label:"Port série",path:"scale.options.port",get value(){return e(P)},hint:"Choisissez-le dans la liste détectée ci-dessus plutôt que de le taper : l’écoute permanente ne suit que des ports détectés.",get fault(){return e(ee)},get allowed(){return e(be)},get disabled(){return e(de)},onchange:Ae=>t.draft.set("scale.options.port",Ae)})}var ra=n(Bt,2),H=s(ra),ge=s(H),_e=n(H,2);{var ke=P=>{var ee=Ui(),be=s(ee),de=n(be);{var Ae=De=>{{let Qe=u(()=>e(R)==="listen"),kt=u(()=>e(R)!=="");Pe(De,{act:"listen",get label(){return e(ce)},protected:!0,get busy(){return e(Qe)},get disabled(){return e(kt)},onrun:()=>{oe("listen",Fe)}})}};_(de,De=>{e(ce)!==""&&De(Ae)})}f(()=>o(be,`${e(O)??""} `)),l(P,ee)};_(_e,P=>{(e(O)!==""||e(ce)!=="")&&P(ke)})}var Ke=n(_e,2);{var Je=P=>{var ee=Wi();Te(ee,21,()=>e(A),da,(be,de)=>{var Ae=Mi(),De=s(Ae),Qe=s(De),kt=n(De,2),Et=s(kt);f((bt,Gt)=>{o(Qe,bt),o(Et,Gt)},[()=>mi(e(de)),()=>hi(e(de))]),l(be,Ae)}),l(P,ee)};_(Ke,P=>{e(A).length>0&&P(Je)})}var et=n(ht,2),Ie=s(et);Ka(Ie,{title:"Imprimante",name:"printer",get standing(){return e(ue)}});var Oe=n(Ie,2),$e=s(Oe),Ge=n(Oe,2),tt=s(Ge),ut=n(Ge,2),xe=s(ut);{let P=u(()=>e(R)==="printers"),ee=u(()=>e(R)!=="");Pe(xe,{label:"Lister les files",get busy(){return e(P)},get disabled(){return e(ee)},onrun:()=>{oe("printers",je)}})}var Xe=n(xe,2);{let P=u(()=>e(R)==="discover"),ee=u(()=>e(R)!=="");Pe(Xe,{label:"Rechercher l’imprimante",protected:!0,get busy(){return e(P)},get disabled(){return e(ee)},onrun:()=>{oe("discover",qe)}})}var vt=n(Xe,2);Te(vt,17,()=>e(it),P=>P.what,(P,ee)=>{{let be=u(()=>`Auto-test : ${e(ee).name}${e(R)===e(ee).what?" — en cours…":""}`),de=u(()=>e(R)!=="");Pe(P,{get act(){return e(ee).what},get label(){return e(be)},protected:!0,get disabled(){return e(de)},onrun:()=>{oe(e(ee).what,()=>Se(e(ee).what))}})}});var St=n(ut,2);{var nt=P=>{var ee=Bi(),be=s(ee);f(()=>o(be,e(it).length===0?"Le driver d’impression en service n’imprime aucun auto-test.":"Les autres auto-tests ne sont pas proposés : le driver d’impression en service ne les imprime pas.")),l(P,ee)};_(St,P=>{e(it).length Aucune trame brute n’a été enregistrée pour cette pesée : il n’y a
- rien à rejouer. La trame repart dans le décodeur du poste EN SERVICE : le poids
- affiché au client change, et rien ne le remet comme il était. C’est
- ce qui fait d’un refus inexpliqué un test permanent, sans
- déplacement au magasin et sans balance. Lecture de la configuration en cours… les flèches attendent qu’elle soit arrivée. Décalage horizontal Décalage vertical Le décalage ne descend pas sous zéro : le poste refuse un décalage négatif quel que
- soit le gabarit. Le maximum, lui, dépend de la géométrie du gabarit ; il est annoncé
- ici si l’enregistrement le dépasse. Le symbole code-barres est volontairement tronqué : un symbole conforme n’entre pas
- sur 40 × 25 mm avec les cinq champs texte. Ce n’est pas un défaut de rendu et il n’y
- a rien à corriger. Le détail chiffré du symbole — largeur de module, modules rendus, modules attendus —
- n’est pas servi par ce poste. Cet écran n’affiche pas un chiffre qu’il aurait deviné. Chaque appui sort une étiquette pour de bon : le mot de passe est demandé au moment
- d’imprimer, et l’impression repart d’elle-même une fois la session ouverte. Rien ne s’affiche au client : c’est une information. Un seuil vidé garde la valeur du fichier : il n’écrit pas zéro, et la case la retrouve
- dès qu’on quitte le champ. Pour changer un seuil, on tape l’autre valeur. Aucun tarif déclaré dans la configuration lue. Un champ vidé garde la valeur du fichier : il n’écrit pas zéro, et la case la
- retrouve dès qu’on quitte le champ. Une remise effacée serait le plein tarif pour
- tous les adhérents. Aucune dérogation : la limite générale s’applique à tous les produits. Les noms de produits n’ont pas pu être lus : le catalogue en service n’a pas
- répondu. Les identifiants Odoo restent affichés. Les deux arrondis sont distincts parce qu’ils tombent à des endroits différents du
- calcul : arrondir le prix au kilo puis le multiplier, ou multiplier puis arrondir, ne
- donne pas le même centime sur une étiquette. Le poste applique l’arrondi commercial,
- et l’écart se voit au centime près sur la même pesée. Aucun verdict en ce moment : ces lignes portent sur la pesée EN COURS, et le poste
- est au repos. Elles apparaissent le temps d’un cycle, quand un client pose son sac
- et touche une tuile. L’ordre compte : le premier verdict bloquant décide de ce que le client lit. Les
- garde-fous 1 à 7 portent sur l’état de la balance, c’est-à-dire le poids brut ; les
- garde-fous 8 à 14 portent sur la vente, c’est-à-dire le net. Le code en gris est
- celui du journal, celui qu’on lit au téléphone. Le plan de numérotation n’est PAS ici, et c’est tout l’intérêt : préfixes, largeur de
- la référence, largeur de la charge utile, décimales et mode de vente sont une
- constante du binaire, indexée par préfixe et vérifiée au démarrage.
- Un champ qui change le SENS du code lu par la caisse n’est pas un réglage, c’est un
- contrat externe : il change avec une version du binaire, relue et testée, jamais
- depuis l’écran d’un poste. Recopier reste possible : les valeurs entrent dans le brouillon, où elles se
- corrigent champ par champ avant l’enregistrement. Touchez de nouveau pour confirmer. Rien ne défait un redémarrage une fois
- l’ordinateur parti. Trois gestes de reprise, du plus doux au plus brutal. Le premier ne coupe rien. Ce fichier n’a été comparé à rien : la configuration en service n’a pas pu être
- lue. Ni « identique », ni « n champs changent » — ce que ce fichier changerait
- sur ce poste reste inconnu. Ce fichier décrit la même configuration que celle en service : il n’y a rien à
- recopier. C’est ce qu’on veut lire à la fin d’un clonage. Deux champs ne sont pas
- comparés : la date du dernier enregistrement, que chaque poste écrit lui-même, et
- le mot de passe du catalogue, qu’aucun des deux ne porte en clair. Recopier n’applique rien : les valeurs entrent dans le brouillon, et c’est
- « Enregistrer » qui les met en service. L’export emporte encore l’empreinte du mot de passe : c’est la seule lecture que le
- poste garde derrière la clé. L’import, lui, est lu PAR LE POSTE, qui écarte les deux
- secrets et le numéro de poste avant de dire ce qui changerait. Lecture des versions enregistrées… Les versions enregistrées n’ont pas pu être lues : cette liste ne dit donc rien de
- ce que ce poste garde. Ce n’est pas « aucune version ». Aucune version enregistrée : ce poste n’a jamais été reconfiguré. Remettre une version en service remplace la configuration du poste sur-le-champ, et
- ce qui n’a pas été enregistré est perdu : c’est le seul geste de cette page qui
- change le poste tout de suite, et le seul qui garde ses 72 px. Déposez ici le fichier La mise à jour depuis cet écran n’existe que sur les postes Windows. Sur les
- autres, elle se fait à la main — voir la notice d’installation. Version disponible : . Ce poste est à jour. Le poste va s’arrêter environ une minute. L’écran client s’éteindra puis reviendra
- tout seul. Si la nouvelle version ne démarre pas, la précédente sera remise
- automatiquement — mais les données enregistrées, elles, ne reviendront pas en
- arrière. Mise à jour en cours. Le poste redémarre, ne le débranchez pas. Lecture de l’état du poste… Le code de secours a été tiré à l’installation de ce poste et imprimé
+ sur sa fiche, rangée dans le classeur du magasin. Il n’existe nulle part ailleurs. Oublié ? Le code de secours de la fiche d’installation en repose un.
+ Un responsable peut aussi le faire en ligne de commande, avec Lecture des réglages du poste… Le poste y cherche le fichier Sur un serveur WebDAV, le dépôt d’un fichier CSV depuis cet écran n’est plus
+ possible : le poste n’a plus de répertoire local où l’écrire. C’est le seul recours
+ du jour de la mise en service. Ce poste ne déclare aucune source : choisissez-en une ci-dessus, sinon il n’ira
+ chercher aucun catalogue. Aucune décision locale : la grille est celle du fichier. Aucun import dans l’historique. Aucun import enregistré sur ce poste. « Oublier la quarantaine » fait relire un fichier que le poste avait écarté : c’est le
+ seul geste de cette page qui puisse remettre en service un catalogue refusé. Un produit masqué reste vendable : la caisse lit toujours son code-barres, et une
+ étiquette déjà imprimée reste valable. Ce réglage ne fait que retirer sa tuile. Colonnes de la grille Se tromper ne coûte rien d’autre que de revenir ici : le réglage ne change ni le
+ fichier reçu, ni les étiquettes déjà imprimées. En dessous de ce nombre, la catégorie n’a pas de puce dans la barre du bas. Ses
+ produits restent dans « Tout » et à la recherche : ce réglage ne retire aucune
+ tuile. Pour ne plus montrer une catégorie du tout, c’est sa case « visible » qu’il
+ faut décocher. Déposez ici le fichier Ce dépôt remplace toute la grille par le fichier apporté : il change ce que le poste
+ vend, et le mot de passe est donc demandé au moment du dépôt. Aucun import enregistré : rien n’a encore pu être retiré. Aucun produit retiré par le dernier import. Ils restent enregistrés avec leur historique : une étiquette déjà collée reste
+ lisible en caisse, et un produit qui revient dans un prochain fichier retrouve sa
+ tuile. Ce poste n’en publie encore que le nombre — leurs noms se lisent dans Odoo,
+ en comparant avec l’export précédent. Un produit retiré de la grille ne se trouve plus ici : il se reprend dans
+ « Décisions en vigueur », plus bas. Sans motif, le poste refuse la décision. Le seul acte qui s’en passe est celui qui
+ EFFACE la décision en vigueur : proposer de nouveau un produit qui ne porte aucune
+ dérogation. Produit choisi : Ce produit est-il proposé dans la grille ? La dérogation s’enregistre seule : elle ne remet pas dans la grille un produit
+ qui en a été retiré, et retirer un produit n’efface pas sa dérogation. Aucun import enregistré sur ce poste : le catalogue n’est jamais arrivé, ou le
+ journal ne le porte pas. Aucune décision locale : le catalogue est proposé tel qu’il arrive. Rien à signaler depuis le démarrage du poste. Lecture de la configuration en cours… tant qu’elle n’est pas arrivée, cette page ne
+ déclare rien de ce poste. L’état et la cadence viennent de ce que le poste observe vraiment, jamais d’un réglage. fr(P));te!==null&&(r().notice=te.message,await r().refresh())}async function Re(){v(K,0),v(U,0),e(O)||await ie();const P=e(j);if(P.length===0){v(A,[],!0);return}await r().protect(()=>We(P))}async function We(P){v(A,[],!0),v(U,P.length,!0);for(const[te,Z]of P.entries()){v(K,te+1);try{const ce=await kn(Z.name);v(A,[...e(A),{port:Z.name,message:ce.message,refused:!1}],!0)}catch(ce){if(fa(ce))throw ce;v(A,[...e(A),{port:Z.name,message:De(ce),refused:!0}],!0)}}}function xe(P,te){const Z=Qt(t.draft,P);return Z.length>0?Z:te.slice(0,m)}function De(P){return P instanceof Pt?P.message:P instanceof Error?"Le poste n’a pas répondu : "+P.message:"Le poste n’a pas répondu."}const rt=[{what:"label",name:"étiquette"},{what:"alignment",name:"alignement"},{what:"ruler",name:"réglette"}],nt=u(()=>rt.filter(P=>t.health.printer_self_tests.includes(P.what)));var pt=Hi(),ct=s(pt),dt=s(ct);$a(dt,{title:"Balance",name:"scale",get standing(){return e(X)}});var ft=n(dt,2),bt=s(ft),et=n(ft,4);{var _e=P=>{var te=Oi(),Z=s(te);f(()=>ea(Z,e(w))),Ce("change",Z,ce=>t.draft.set("scale.present",!ce.currentTarget.checked)),l(P,te)},Se=P=>{var te=Ai();l(P,te)};_(et,P=>{e(T)?P(_e):P(Se,-1)})}var st=n(et,2),Dt=s(st);{let P=u(()=>e(C)==="ports"),te=u(()=>e(C)!=="");Te(Dt,{label:"Lister les ports",get busy(){return e(P)},get disabled(){return e(te)},onrun:()=>{ue("ports",ie)}})}var zt=n(Dt,2);{let P=u(()=>e(C)!=="");Te(zt,{act:"detect",get label(){return e(I)},protected:!0,get disabled(){return e(P)},onrun:()=>{ue("detect",Re)}})}var Et=n(st,2);{var jt=P=>{var te=Ii(),Z=ae(te),ce=s(Z),Pe=n(Z,2);{var pe=Ee=>{var tt=Ni();ze(tt,21,()=>e(j).slice(0,m),mt=>mt.name,(mt,ht)=>{var Wt=Qa(),Yt=s(Wt),_a=s(Yt),Cr=n(Yt,2),Pr=s(Cr);f(()=>{o(_a,e(ht).name),o(Pr,`${(e(ht).description===""?"aucune description USB":e(ht).description)??""}
+ ${e(ht).vid===""?"":` — VID ${e(ht).vid} PID ${e(ht).pid}`}`)}),Ce("click",Yt,()=>t.draft.set("scale.options.port",e(ht).name)),l(mt,Wt)}),l(Ee,tt)};_(Pe,Ee=>{e(j).length>0&&Ee(pe)})}f(Ee=>o(ce,Ee),[()=>e(j).length===0?"Aucun port série n’est visible depuis ce poste.":ya("port détecté","ports détectés",e(j).length,m)]),l(P,te)};_(Et,P=>{e(O)&&P(jt)})}var Rt=n(Et,2);{var At=P=>{var te=Fi(),Z=ae(te),ce=s(Z),Pe=n(Z,2);ze(Pe,21,()=>e(A).slice(0,m),pe=>pe.port,(pe,Ee)=>{var tt=Di();let mt;var ht=s(tt),Wt=s(ht),Yt=n(ht,2),_a=s(Yt);f(()=>{mt=Nt(tt,1,"svelte-1p4i0xm",null,mt,{refused:e(Ee).refused}),o(Wt,e(Ee).port),o(_a,e(Ee).message)}),l(pe,tt)}),f(pe=>o(ce,pe),[()=>ya("port interrogé","ports interrogés",e(A).length,m)]),l(P,te)};_(Rt,P=>{e(A).length>0&&P(At)})}var Ft=n(Rt,2),Jt=n(s(Ft),2),Ut=s(Jt);{let P=u(()=>t.draft.text("scale.type")),te=u(()=>$e(t.draft,"scale.type")),Z=u(()=>Qt(t.draft,"scale.type")),ce=u(()=>!e(T));at(Ut,{label:"Protocole",path:"scale.type",get value(){return e(P)},hint:"Les valeurs acceptées apparaissent ici si l’enregistrement est refusé.",get fault(){return e(te)},get allowed(){return e(Z)},get disabled(){return e(ce)},onchange:Pe=>t.draft.set("scale.type",Pe)})}var ta=n(Ut,2);{let P=u(()=>t.draft.text("scale.options.port")),te=u(()=>$e(t.draft,"scale.options.port")),Z=u(()=>xe("scale.options.port",e(j).map(Pe=>Pe.name))),ce=u(()=>!e(T));at(ta,{label:"Port série",path:"scale.options.port",get value(){return e(P)},hint:"Choisissez-le dans la liste détectée ci-dessus plutôt que de le taper : l’écoute permanente ne suit que des ports détectés.",get fault(){return e(te)},get allowed(){return e(Z)},get disabled(){return e(ce)},onchange:Pe=>t.draft.set("scale.options.port",Pe)})}var Kt=n(Ft,2),$t=s(Kt),aa=s($t),J=n($t,2);{var me=P=>{var te=Ui(),Z=s(te),ce=n(Z);{var Pe=pe=>{{let Ee=u(()=>e(C)==="listen"),tt=u(()=>e(C)!=="");Te(pe,{act:"listen",get label(){return e(oe)},protected:!0,get busy(){return e(Ee)},get disabled(){return e(tt)},onrun:()=>{ue("listen",Ie)}})}};_(ce,pe=>{e(oe)!==""&&pe(Pe)})}f(()=>o(Z,`${e(R)??""} `)),l(P,te)};_(J,P=>{(e(R)!==""||e(oe)!=="")&&P(me)})}var we=n(J,2);{var Le=P=>{var te=Wi();ze(te,21,()=>e(F),da,(Z,ce)=>{var Pe=Mi(),pe=s(Pe),Ee=s(pe),tt=n(pe,2),mt=s(tt);f((ht,Wt)=>{o(Ee,ht),o(mt,Wt)},[()=>mi(e(ce)),()=>hi(e(ce))]),l(Z,Pe)}),l(P,te)};_(we,P=>{e(F).length>0&&P(Le)})}var Ke=n(ct,2),Ve=s(Ke);$a(Ve,{title:"Imprimante",name:"printer",get standing(){return e(de)}});var Ye=n(Ve,2),Fe=s(Ye),Ae=n(Ye,2),Xe=s(Ae),Ge=n(Ae,2),Qe=s(Ge);{let P=u(()=>e(C)==="printers"),te=u(()=>e(C)!=="");Te(Qe,{label:"Lister les files",get busy(){return e(P)},get disabled(){return e(te)},onrun:()=>{ue("printers",Ne)}})}var it=n(Qe,2);{let P=u(()=>e(C)==="discover"),te=u(()=>e(C)!=="");Te(it,{label:"Rechercher l’imprimante",protected:!0,get busy(){return e(P)},get disabled(){return e(te)},onrun:()=>{ue("discover",je)}})}var qe=n(it,2);ze(qe,17,()=>e(nt),P=>P.what,(P,te)=>{{let Z=u(()=>`Auto-test : ${e(te).name}${e(C)===e(te).what?" — en cours…":""}`),ce=u(()=>e(C)!=="");Te(P,{get act(){return e(te).what},get label(){return e(Z)},protected:!0,get disabled(){return e(ce)},onrun:()=>{ue(e(te).what,()=>ke(e(te).what))}})}});var Ze=n(Ge,2);{var Je=P=>{var te=Bi(),Z=s(te);f(()=>o(Z,e(nt).length===0?"Le driver d’impression en service n’imprime aucun auto-test.":"Les autres auto-tests ne sont pas proposés : le driver d’impression en service ne les imprime pas.")),l(P,te)};_(Ze,P=>{e(nt).length Aucune trame brute n’a été enregistrée pour cette pesée : il n’y a
+ rien à rejouer. La trame repart dans le décodeur du poste EN SERVICE : le poids
+ affiché au client change, et rien ne le remet comme il était. C’est
+ ce qui fait d’un refus inexpliqué un test permanent, sans
+ déplacement au magasin et sans balance. Lecture de la configuration en cours… les flèches attendent qu’elle soit arrivée. Décalage horizontal Décalage vertical Le décalage ne descend pas sous zéro : le poste refuse un décalage négatif quel que
+ soit le gabarit. Le maximum, lui, dépend de la géométrie du gabarit ; il est annoncé
+ ici si l’enregistrement le dépasse. Le symbole code-barres est volontairement tronqué : un symbole conforme n’entre pas
+ sur 40 × 25 mm avec les cinq champs texte. Ce n’est pas un défaut de rendu et il n’y
+ a rien à corriger. Le détail chiffré du symbole — largeur de module, modules rendus, modules attendus —
+ n’est pas servi par ce poste. Cet écran n’affiche pas un chiffre qu’il aurait deviné. Chaque appui sort une étiquette pour de bon : le mot de passe est demandé au moment
+ d’imprimer, et l’impression repart d’elle-même une fois la session ouverte. Rien ne s’affiche au client : c’est une information. Un seuil vidé garde la valeur du fichier : il n’écrit pas zéro, et la case la retrouve
+ dès qu’on quitte le champ. Pour changer un seuil, on tape l’autre valeur. Aucun tarif déclaré dans la configuration lue. Un champ vidé garde la valeur du fichier : il n’écrit pas zéro, et la case la
+ retrouve dès qu’on quitte le champ. Une remise effacée serait le plein tarif pour
+ tous les adhérents. Aucune dérogation : la limite générale s’applique à tous les produits. Les noms de produits n’ont pas pu être lus : le catalogue en service n’a pas
+ répondu. Les identifiants Odoo restent affichés. Les deux arrondis sont distincts parce qu’ils tombent à des endroits différents du
+ calcul : arrondir le prix au kilo puis le multiplier, ou multiplier puis arrondir, ne
+ donne pas le même centime sur une étiquette. Le poste applique l’arrondi commercial,
+ et l’écart se voit au centime près sur la même pesée. Aucun verdict en ce moment : ces lignes portent sur la pesée EN COURS, et le poste
+ est au repos. Elles apparaissent le temps d’un cycle, quand un client pose son sac
+ et touche une tuile. L’ordre compte : le premier verdict bloquant décide de ce que le client lit. Les
+ garde-fous 1 à 7 portent sur l’état de la balance, c’est-à-dire le poids brut ; les
+ garde-fous 8 à 14 portent sur la vente, c’est-à-dire le net. Le code en gris est
+ celui du journal, celui qu’on lit au téléphone. Le plan de numérotation n’est PAS ici, et c’est tout l’intérêt : préfixes, largeur de
+ la référence, largeur de la charge utile, décimales et mode de vente sont une
+ constante du binaire, indexée par préfixe et vérifiée au démarrage.
+ Un champ qui change le SENS du code lu par la caisse n’est pas un réglage, c’est un
+ contrat externe : il change avec une version du binaire, relue et testée, jamais
+ depuis l’écran d’un poste. Recopier reste possible : les valeurs entrent dans le brouillon, où elles se
+ corrigent champ par champ avant l’enregistrement. Touchez de nouveau pour confirmer. Rien ne défait un redémarrage une fois
+ l’ordinateur parti. Trois gestes de reprise, du plus doux au plus brutal. Le premier ne coupe rien. Ce fichier n’a été comparé à rien : la configuration en service n’a pas pu être
+ lue. Ni « identique », ni « n champs changent » — ce que ce fichier changerait
+ sur ce poste reste inconnu. Ce fichier décrit la même configuration que celle en service : il n’y a rien à
+ recopier. C’est ce qu’on veut lire à la fin d’un clonage. Deux champs ne sont pas
+ comparés : la date du dernier enregistrement, que chaque poste écrit lui-même, et
+ le mot de passe du catalogue, qu’aucun des deux ne porte en clair. Recopier n’applique rien : les valeurs entrent dans le brouillon, et c’est
+ « Enregistrer » qui les met en service. L’export emporte encore l’empreinte du mot de passe : c’est la seule lecture que le
+ poste garde derrière la clé. L’import, lui, est lu PAR LE POSTE, qui écarte les deux
+ secrets et le numéro de poste avant de dire ce qui changerait. Lecture des versions enregistrées… Les versions enregistrées n’ont pas pu être lues : cette liste ne dit donc rien de
+ ce que ce poste garde. Ce n’est pas « aucune version ». Aucune version enregistrée : ce poste n’a jamais été reconfiguré. Remettre une version en service remplace la configuration du poste sur-le-champ, et
+ ce qui n’a pas été enregistré est perdu : c’est le seul geste de cette page qui
+ change le poste tout de suite, et le seul qui garde ses 72 px. Déposez ici le fichier La mise à jour depuis cet écran n’existe que sur les postes Windows. Sur les
+ autres, elle se fait à la main — voir la notice d’installation. Version disponible : . Ce poste est à jour. Le poste va s’arrêter environ une minute. L’écran client s’éteindra puis reviendra
+ tout seul. Si la nouvelle version ne démarre pas, la précédente sera remise
+ automatiquement — mais les données enregistrées, elles, ne reviendront pas en
+ arrière. Mise à jour en cours. Le poste redémarre, ne le débranchez pas. Lecture de l’état du poste…
-
+
{#if preferences.showTechnicalNames} kg —kg Poids indisponible Chargement du catalogue… Tare g kg —kg Poids indisponible Chargement du catalogue… Tare g Le code de secours a été tiré à l’installation de ce poste et imprimé
+import{Y as Tr,Z as zr,_ as jr,$ as Ea,a0 as Vt,e as Rr,a1 as or,a2 as Or,a3 as Ar,a4 as Nr,u as ma,a5 as Ca,a6 as Ir,a7 as ur,x as wt,A as B,h as e,z as v,H as vt,d as ot,a as Be,s as n,i as _,t as f,l as Nt,j as be,m as o,b as Ce,c as l,o as s,g as c,p as Ue,I as Dr,f as Me,n as u,q as ae,a8 as Ia,r as ze,G as Gt,a9 as ea,aa as Tt,B as da,ab as lt,ac as Xt,ad as ka,C as Fr,J as cr,y as sa,T as Ur,ae as Ht,F as Mr,E as Wr,D as Br,O as Vr,K as Gr,X as Hr,af as Jr}from"./app-BaRSXv80.js";function dr(a){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Kr(a,t,...r){var i=new jr(a);Tr(()=>{const d=t()??null;i.ensure(d,d&&(p=>d(p,...r)))},zr)}function Pa(a,t,r=!1){if(a.multiple){if(t==null)return;if(!Or(t))return Ar();for(var i of a.options)i.selected=t.includes(la(i));return}for(i of a.options){var d=la(i);if(Nr(d,t)){i.selected=!0;return}}(!r||t!==void 0)&&(a.selectedIndex=-1)}function vr(a){var t=new MutationObserver(()=>{"__value"in a&&Pa(a,a.__value)});t.observe(a,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),or(()=>{t.disconnect()})}function $r(a,t,r=t){var i=new WeakSet,d=!0;Ea(a,"change",p=>{var y=p?"[selected]":":checked",z;if(a.multiple)z=[].map.call(a.querySelectorAll(y),la);else{var m=a.querySelector(y)??a.querySelector("option:not([disabled])");z=m&&la(m)}r(z),a.__value=z,Vt!==null&&i.add(Vt)}),Rr(()=>{var p=t();if(a===document.activeElement){var y=Vt;if(i.has(y))return}if(Pa(a,p,d),d&&p===void 0){var z=a.querySelector(":checked");z!==null&&(p=la(z),r(p))}a.__value=p,d=!1}),vr(a)}function la(a){return"__value"in a?a.__value:a.value}function ia(a,t,r=t){var i=new WeakSet;Ea(a,"input",async d=>{var p=d?a.defaultValue:a.value;if(p=ba(a)?wa(p):p,r(p),Vt!==null&&i.add(Vt),await Ir(),p!==(p=t())){var y=a.selectionStart,z=a.selectionEnd,m=a.value.length;if(a.value=p??"",z!==null){var j=a.value.length;y===z&&z===m&&j>m?(a.selectionStart=j,a.selectionEnd=j):(a.selectionStart=y,a.selectionEnd=Math.min(z,j))}}}),ma(t)==null&&a.value&&(r(ba(a)?wa(a.value):a.value),Vt!==null&&i.add(Vt)),Ca(()=>{var d=t();if(a===document.activeElement){var p=Vt;if(i.has(p))return}ba(a)&&d===wa(a.value)||a.type==="date"&&!d&&!a.value||d!==a.value&&(a.value=d??"")})}function Da(a,t,r=t){Ea(a,"change",i=>{var d=i?a.defaultChecked:a.checked;r(d)}),ma(t)==null&&r(a.checked),Ca(()=>{var i=t();a.checked=!!i})}function ba(a){var t=a.type;return t==="number"||t==="range"}function wa(a){return a===""?null:+a}function Fa(a,t,r,i,d){var p=()=>{i(r[a])};r.addEventListener(t,p),d?Ca(()=>{r[a]=d()}):p(),(r===document.body||r===window||r===document)&&or(()=>{r.removeEventListener(t,p)})}function Ta(a){ur===null&&dr(),wt(()=>{const t=ma(a);if(typeof t=="function")return t})}function Yr(a){ur===null&&dr(),Ta(()=>()=>ma(a))}const Xr="ERR-CFG-02";class Pt extends Error{constructor(t,r,i="",d=[]){super(r),this.status=t,this.code=i,this.faults=d,this.name="AdminError"}status;code;faults;get needsPassword(){return this.status===401}get needsFirstPassword(){return this.status===409&&this.code===Xr}get needsCredentials(){return this.needsPassword||this.needsFirstPassword}}function fa(a){return a instanceof Pt&&a.needsCredentials}function Qr(){return It("/admin/api/health")}function Zr(){return He("/admin/api/troubleshooting/reprint",{})}function en(){return He("/admin/api/troubleshooting/reload-catalog",{})}function tn(a){return He("/admin/api/troubleshooting/manual-entry",{on:a})}function an(){return He("/admin/api/troubleshooting/roll-changed",{})}function rn(a){return He("/admin/api/troubleshooting/fallback-printer",{on:a})}function nn(){return He("/admin/api/troubleshooting/test-scale",{})}function sn(){return He("/admin/api/troubleshooting/test-printer",{})}function ln(){return He("/admin/api/troubleshooting/test-label",{})}async function pr(a){const t=new FormData;t.append("file",a,a.name);const r=await fetch("/admin/api/catalog/import",{method:"POST",body:t});return Ra(r,"POST /admin/api/catalog/import")}const on="/admin/api/diagnostic.zip";function un(a){return He("/admin/api/session",{password:a})}async function cn(){await fetch("/admin/api/session",{method:"DELETE"})}function dn(a,t){return He("/admin/api/session/recovery",{code:a,password:t})}function za(){return It("/admin/api/config")}function vn(a){return ja("PUT","/admin/api/config",a)}function pn(){return He("/admin/api/config/reload",{})}function fn(){return He("/admin/api/restart",{})}function gn(){return He("/admin/api/reboot",{})}function mn(){return ja("DELETE","/admin/api/reboot",{})}function hn(){return He("/admin/api/config/confirm",{})}async function _n(){return(await It("/admin/api/config/versions")).versions}function bn(a){return He("/admin/api/config/restore",{version:a})}async function wn(){return(await It("/admin/api/ports")).ports}async function yn(){return(await It("/admin/api/printers")).printers}async function xn(){return(await He("/admin/api/printers/discover",{})).printers}function kn(a){return He("/admin/api/scale/detect",{port:a})}async function Ua(a,t){return(await He("/admin/api/scale/capture",{port:a,seconds:t})).frames}function fr(a){return He("/admin/api/printer/test?what="+a,{})}function qn(a,t,r,i){const d=new URLSearchParams({template:a,demo:t?"1":"0",dual:r?"1":"0"});return d.set("t",String(i)),"/admin/api/label/preview.png?"+d.toString()}async function Sn(a){const t=new URLSearchParams(a);return(await It("/admin/api/journal?"+t)).weighings}function Ln(a){return"/admin/api/journal/export.csv?"+new URLSearchParams(a).toString()}async function En(a){const t=new URLSearchParams(a);return(await It("/admin/api/technical?"+t)).entries}function Cn(a){const t=a===void 0?"":"?id="+String(a);return It("/admin/api/imports"+t)}function Pn(){return He("/admin/api/catalog/reload",{})}function Tn(){return He("/admin/api/catalog/forget-quarantine",{})}function Ma(a,t){return He("/admin/api/products/"+encodeURIComponent(a)+"/decision",t)}function zn(a){return He("/admin/api/replay",{frame:a})}async function It(a){const t=await fetch(a,{headers:{accept:"application/json"}});return Ra(t,"GET "+a)}function He(a,t){return ja("POST",a,t)}async function ja(a,t,r){const i=await fetch(t,{method:a,headers:{"content-type":"application/json"},body:JSON.stringify(r)});return Ra(i,a+" "+t)}async function Ra(a,t){const r=await a.text();if(!a.ok){const i=gr(r);throw new Pt(a.status,Rn(r,t,a.status)+jn(a),i?.code??"",i?.faults??[])}if(r!=="")return JSON.parse(r)}function jn(a){if(a.status!==429)return"";const t=Number(a.headers.get("Retry-After")??"");if(!Number.isFinite(t)||t<=0)return"";const r=Math.ceil(t/60);return r>1?` Réessayez dans ${String(r)} minutes.`:" Réessayez dans une minute."}function Rn(a,t,r){const i=gr(a);return i?.message!==void 0&&i.message!==""?i.message:`${t} a répondu ${String(r)}.`}function gr(a){try{return JSON.parse(a)}catch{return null}}function On(){return It("/admin/api/update")}function An(){return He("/admin/api/update/check",{})}function Nn(a){return He("/admin/api/update/apply",{version:a})}class In{constructor(t){this.admin=t}admin;#t=B(null);get config(){return e(this.#t)}set config(t){v(this.#t,t,!0)}#r=B("");get fingerprint(){return e(this.#r)}set fingerprint(t){v(this.#r,t,!0)}#a=B(vt([]));get retired(){return e(this.#a)}set retired(t){v(this.#a,t,!0)}#e=B(null);get pending(){return e(this.#e)}set pending(t){v(this.#e,t,!0)}#n=B(vt([]));get faults(){return e(this.#n)}set faults(t){v(this.#n,t,!0)}#l=B(!1);get dirty(){return e(this.#l)}set dirty(t){v(this.#l,t,!0)}async load(){const t=await this.admin.load(()=>za());t!==null&&(this.config=t.config,this.fingerprint=t.config_fingerprint,this.retired=t.retired_keys??[],this.pending=t.pending_confirmation,this.faults=[],this.dirty=!1)}value(t){let r=this.config;for(const i of t.split(".")){if(r===null||typeof r!="object")return;r=r[i]}return r}text(t){const r=this.value(t);return r==null?"":String(r)}number(t){const r=this.value(t);return typeof r=="number"?r:Number(r??0)}flag(t){return this.value(t)===!0}set(t,r){if(this.config===null)return;const i=t.split("."),d=i.pop();if(d===void 0)return;let p=this.config;for(const y of i){const z=p[y];(z===null||typeof z!="object")&&(p[y]={}),p=p[y]}p[d]=r,this.dirty=!0}unset(t){const r=t.split("."),i=r.pop();if(i===void 0||this.config===null)return!1;let d=this.config;for(const p of r){if(d===null||typeof d!="object")return!1;d=d[p]}return d===null||typeof d!="object"?!1:(delete d[i],this.dirty=!0,!0)}async save(){if(this.config===null)return!1;this.faults=[];const t=this.config;let r;try{r=await vn(t)}catch(i){if(fa(i))throw i;return this.admin.report(i),this.faults=Dn(this.admin),!1}return this.config=r.config,this.fingerprint=r.config_fingerprint,this.retired=r.retired_keys??[],this.pending=r.pending_confirmation,this.dirty=!1,!0}async confirm(){try{await hn()}catch(t){if(fa(t))throw t;this.admin.report(t);return}this.admin.notice="La configuration est confirmée.",this.pending=null,await this.admin.refresh()}dropRetired(t){if(t.includes("[")){this.admin.actionError=`« ${t} » est logée dans un tableau : cet écran ne sait pas la retirer de là. Modifiez le fichier de configuration lui-même.`;return}this.unset(t)&&(this.retired=this.retired.filter(r=>r!==t))}}function Dn(a){return a.lastFaults}const Fn={"station.number":"Numéro du poste","station.name":"Nom du poste","station.coop":"Nom de la coopérative","network.listen":"Adresse d’écoute","network.admin_on_lan":"Administration accessible depuis le réseau","ui.language":"Langue","ui.sound":"Son","ui.idle_timeout_s":"Retour à l’accueil après (secondes)","ui.reprint_window_s":"Réimpression possible pendant (secondes)","ui.show_grid_prices":"Afficher les prix sur les tuiles","ui.show_by_unit_products":"Afficher les produits vendus à l’unité","ui.grid_columns":"Colonnes de la grille","ui.min_products_for_chip":"Tuiles minimum pour donner sa puce à une catégorie","scale.type":"Protocole de la balance","scale.present":"Ce poste a une balance","scale.manual_entry_allowed":"Saisie manuelle autorisée","scale.degrade_after_s":"Passer en mode dégradé après (secondes)","scale.options.port":"Port série","scale.options.baud":"Vitesse (bauds)","scale.options.bits":"Bits de données","scale.options.parity":"Parité","scale.options.stop":"Bits d’arrêt","scale.options.backoff_min_ms":"Attente minimale avant réessai (ms)","scale.options.backoff_max_ms":"Attente maximale avant réessai (ms)","printer.type":"Pilote d’impression","printer.template":"Gabarit d’étiquette","printer.options.transport":"Transport","printer.options.queue":"File d’impression","printer.options.path":"Fichier de périphérique","printer.options.address":"Adresse réseau","printer.options.darkness":"Noircissement","printer.options.speed":"Vitesse d’impression","printer.options.offset_x":"Décalage horizontal (dots)","printer.options.offset_y":"Décalage vertical (dots)","printer.options.invert_bits":"Inverser les points","printer.options.copies":"Exemplaires","printer.options.roll_capacity":"Étiquettes par rouleau","pricing.amount_rounding":"Arrondi du montant","pricing.unit_price_rounding":"Arrondi du prix au kilo","pricing.primary_code":"Tarif principal","pricing.reference_code":"Tarif de référence","barcode.verify_reference_check_digit":"Vérifier la clé de contrôle","limits.empty_max_g":"Plateau considéré vide en dessous de (g)","limits.basket_check_enabled":"Vérifier la présence du panier","limits.basket_min_g":"Poids du panier, borne basse (g)","limits.basket_max_g":"Poids du panier, borne haute (g)","limits.min_weight_g":"Poids minimum accepté","limits.max_weight_g":"Poids maximum accepté","limits.max_tare_g":"Tare maximale","limits.min_units":"Unités minimum","limits.max_units":"Unités maximum","limits.max_amount_cents":"Montant maximum (centimes)","stability.mode":"Exigence de stabilité","stability.min_duration_ms":"Durée de stabilité (ms)","stability.tolerance_g":"Tolérance de stabilité (g)","stability.timeout_ms":"Délai d’attente de stabilité (ms)","stability.on_timeout":"Au bout du délai","stability.min_latch_rate":"Taux d’accroche minimal","stability.latch_rate_window_ms":"Fenêtre de mesure du taux (ms)","stability.expiry_floor_ms":"Péremption, plancher (ms)","stability.expiry_ceiling_ms":"Péremption, plafond (ms)","stability.expiry_factor":"Péremption, facteur","catalog.type":"Où le poste va chercher le catalogue","catalog.options.directory":"Répertoire surveillé","catalog.options.url":"Adresse du serveur","catalog.options.username":"Compte","catalog.options.password":"Mot de passe","catalog.options.separator":"Séparateur du CSV","catalog.options.poll_interval_s":"Vérifier toutes les (secondes)","catalog.options.stable_polls":"Vérifications avant lecture","catalog.options.max_file_size_mb":"Taille maximale du fichier (Mo)","catalog.options.max_image_size_kb":"Taille maximale d’une image (Ko)","catalog.options.min_readable_ratio":"Part minimale de lignes lisibles","catalog.options.max_weighable_drop":"Baisse maximale des produits pesables","catalog.options.max_archives":"Archives conservées","catalog.options.archive_days":"Archives conservées (jours)","catalog.options.failures_before_reject":"Échecs avant mise en quarantaine","catalog.images.source":"Origine des photos","catalog.images.path":"Répertoire des photos","catalog.fallback_category":"Rayon par défaut","journal.max_rows":"Pesées conservées","journal.max_days":"Pesées conservées (jours)","journal.max_technical":"Événements techniques conservés","admin.session_minutes":"Durée d’une session (minutes)","admin.attempts_per_minute":"Tentatives par minute","maintenance.weekly_integrity_check":"Contrôle d’intégrité hebdomadaire","maintenance.disk_alert_mb":"Alerte disque en dessous de (Mo)"};function qt(a){return Fn[a]??a}const Un={station:"l’identité du poste",network:"le réseau",ui:"l’écran client",scale:"la balance",printer:"l’imprimante",pricing:"les tarifs",barcode:"le code-barres",limits:"les garde-fous",stability:"la stabilité",catalog:"le catalogue",journal:"le journal",maintenance:"la maintenance"};function Mn(a){return Un[a]??a}const Wn={scale:"balance",printer:"imprimante",catalog:"catalogue",ui:"écran",config:"configuration",http:"réseau",system:"système"};function mr(a){return Wn[a]??"origine inconnue"}const qa="openscale.admin.preferences",hr="technical";class Bn{#t=B(vt(Vn()));get showTechnicalNames(){return e(this.#t)}set showTechnicalNames(t){v(this.#t,t,!0)}toggleTechnicalNames(){this.showTechnicalNames=!this.showTechnicalNames,Gn(this.showTechnicalNames)}}function Vn(){try{return globalThis.localStorage?.getItem(qa)===hr}catch{return!1}}function Gn(a){try{a?globalThis.localStorage?.setItem(qa,hr):globalThis.localStorage?.removeItem(qa)}catch{}}const St=new Bn,Hn=3e3,Jn=["hardware","label","rules","catalog","journal","station","update"];function Wa(a){return Jn.includes(a)}function Kn(a){return a instanceof Pt&&a.needsCredentials}class $n{constructor(t=Hn){this.periodMs=t}periodMs;#t=B(null);get health(){return e(this.#t)}set health(t){v(this.#t,t,!0)}#r=B("dashboard");get page(){return e(this.#r)}set page(t){v(this.#r,t,!0)}#a=B(!1);get expert(){return e(this.#a)}set expert(t){v(this.#a,t,!0)}#e=B("");get linkError(){return e(this.#e)}set linkError(t){v(this.#e,t,!0)}#n=B("");get actionError(){return e(this.#n)}set actionError(t){v(this.#n,t,!0)}#l=B(!1);get needsFirstPassword(){return e(this.#l)}set needsFirstPassword(t){v(this.#l,t,!0)}#d=B("");get notice(){return e(this.#d)}set notice(t){v(this.#d,t,!0)}#v=B(!1);get busy(){return e(this.#v)}set busy(t){v(this.#v,t,!0)}#p=B(vt([]));get lastFaults(){return e(this.#p)}set lastFaults(t){v(this.#p,t,!0)}#f=B(null);get pending(){return e(this.#f)}set pending(t){v(this.#f,t,!0)}#i=null;#o=null;start(){this.refresh(),this.#i=setInterval(()=>{this.refresh()},this.periodMs)}stop(){this.#i!==null&&clearInterval(this.#i),this.#i=null}async refresh(){try{this.health=await Qr(),this.linkError=""}catch(t){this.linkError=Ba(t)}}#u(){this.busy=!0,this.notice="",this.actionError="",this.needsFirstPassword=!1}#s(t){this.actionError=Ba(t),this.needsFirstPassword=t instanceof Pt&&t.needsFirstPassword,this.#m(t)}async run(t){this.#u();let r=null;try{r=await t(),this.notice=r.message}catch(i){this.#s(i)}finally{this.busy=!1}return await this.refresh(),r}async login(t){this.#u();try{return await un(t),this.expert=!0,this.notice="Session d’administration ouverte.",!0}catch(r){return this.expert=!1,this.#s(r),!1}finally{this.busy=!1}}async recover(t,r){this.#u();try{const i=await dn(t,r);return this.expert=!0,this.notice=i.warning??"Le mot de passe est remplacé et la session est ouverte.",!0}catch(i){return this.#s(i),!1}finally{this.busy=!1}}async protect(t){try{return await t()}catch(r){if(!Kn(r))return this.#s(r),null;if(!await this.#g(r))return null;try{return await t()}catch(i){return this.#s(i),null}}}#g(t){return this.pending={kind:t.needsFirstPassword?"first-password":"password",message:t.message},new Promise(r=>{this.#o=r})}async answerPassword(t){await this.login(t)&&this.#c(!0)}async answerRecovery(t,r){await this.recover(t,r)&&this.#c(!0)}cancelPassword(){this.#c(!1)}#c(t){this.pending=null,this.notice="";const r=this.#o;this.#o=null,r?.(t)}async logout(){await cn(),this.expert=!1,this.page="dashboard",this.notice="Session d’administration fermée."}open(t){this.actionError="",this.notice="",this.needsFirstPassword=!1,this.page=t}async load(t){try{const r=await t();return this.actionError="",this.lastFaults=[],r}catch(r){return this.lastFaults=r instanceof Pt?r.faults:[],this.#s(r),null}}report(t){this.lastFaults=t instanceof Pt?t.faults:[],this.#s(t)}#m(t){t instanceof Pt&&t.needsPassword&&(this.expert=!1)}}function Ba(a){return a instanceof Pt?a.message:a instanceof Error?"Le poste n’a pas répondu : "+a.message:"Le poste n’a pas répondu."}var Yn=c('clé'),Xn=c('');function Te(a,t){const r=Be(t,"kind",3,"read"),i=Be(t,"busy",3,!1),d=Be(t,"disabled",3,!1),p=Be(t,"protected",3,!1),y=Be(t,"act",3,void 0);var z=Xn();let m;var j=s(z),S=n(j);{var A=L=>{var W=Yn();l(L,W)};_(S,L=>{p()&&L(A)})}f(()=>{m=Nt(z,1,`act ${r()??""}`,"svelte-5tpq0o",m,{"touch-target":r()==="destructive",busy:i()}),be(z,"data-kind",r()),be(z,"data-act",y()),z.disabled=d()||i(),o(j,`${(i()?"En cours…":t.label)??""} `)}),Ce("click",z,function(...L){t.onrun?.apply(this,L)}),l(a,z)}ot(["click"]);var Qn=c(` Le code de secours a été tiré à l’installation de ce poste et imprimé
sur sa fiche, rangée dans le classeur du magasin. Il n’existe nulle part ailleurs. Oublié ? Le code de secours de la fiche d’installation en repose un.
Un responsable peut aussi le faire en ligne de commande, avec Lecture des réglages du poste… Le poste y cherche le fichier Sur un serveur WebDAV, le dépôt d’un fichier CSV depuis cet écran n’est plus
@@ -7,7 +7,7 @@ import{Y as Tr,Z as zr,_ as jr,$ as Ea,a0 as Vt,e as Rr,a1 as or,a2 as Or,a3 as
chercher aucun catalogue. Aucune décision locale : la grille est celle du fichier. Aucun import dans l’historique. Aucun import enregistré sur ce poste. « Oublier la quarantaine » fait relire un fichier que le poste avait écarté : c’est le
seul geste de cette page qui puisse remettre en service un catalogue refusé. Un produit masqué reste vendable : la caisse lit toujours son code-barres, et une
étiquette déjà imprimée reste valable. Ce réglage ne fait que retirer sa tuile. Colonnes de la grille Se tromper ne coûte rien d’autre que de revenir ici : le réglage ne change ni le
- fichier reçu, ni les étiquettes déjà imprimées. En dessous de ce nombre, la catégorie n’a pas de puce dans la barre du bas. Ses
+ fichier reçu, ni les étiquettes déjà imprimées. En dessous de ce nombre, la catégorie n’a pas de puce dans la barre du bas. Ses
produits restent dans « Tout » et à la recherche : ce réglage ne retire aucune
tuile. Pour ne plus montrer une catégorie du tout, c’est sa case « visible » qu’il
faut décocher. Déposez ici le fichier Ce dépôt remplace toute la grille par le fichier apporté : il change ce que le poste
diff --git a/internal/web/dist/index.html b/internal/web/dist/index.html
index 38ff0c1..1f104c9 100644
--- a/internal/web/dist/index.html
+++ b/internal/web/dist/index.html
@@ -6,7 +6,7 @@
'),Os=tt(''),Ns=tt(' '),ks=tt(''),Cs=tt('');function lf(e,t){On(t,!0);const n=se(t,"nameSizePx",3,$t),r=se(t,"categoryColor",3,"#8a867c"),i=se(t,"primaryCode",3,""),s=se(t,"tierAbbrev",19,()=>({})),f=se(t,"selected",3,!1),l=se(t,"rejected",3,!1),a=se(t,"busy",3,!1),o=se(t,"showPrice",3,!0);let c=ie("");const d=rt(()=>t.product.image_url!==""&&t.product.image_url!==T(c)),u=rt(()=>p(t.product.name)),h=rt(()=>vs(r())),v=rt(()=>_s(r()));function p(z){const F=z.match(/\p{L}/u);return F===null?"·":F[0].toUpperCase()}var _=Cs();let g;var S=Q(_);let y;var E=Q(S);{var x=z=>{var F=Ms();Ge(()=>zt(F,"src",t.product.image_url)),Li("error",F,()=>ae(c,t.product.image_url,!0)),Oe(z,F)},Y=z=>{var F=Os();let Te;var Ae=Q(F);Ge(()=>{Te=ot(F,"",Te,{color:T(v)}),Ue(Ae,T(u))}),Oe(z,F)};hn(E,z=>{T(d)?z(x):z(Y,-1)})}var P=it(S,2),J=Q(P);let re;var k=Q(J),wt=it(P,2);{var mt=z=>{var F=ks();Vi(F,21,()=>t.product.prices,Te=>Te.code,(Te,Ae)=>{var bt=Ns();let en;var Et=Q(bt);let tn;var hr=Q(Et),nn=it(Et,2),vr=Q(nn),_r=it(nn,2),pr=Q(_r);Ge(gr=>{en=At(bt,1,"price svelte-1ctu6qg",null,en,{secondary:T(Ae).code!==i()}),tn=At(Et,1,"abbrev svelte-1ctu6qg",null,tn,{hollow:T(Ae).code!==i()}),Ue(hr,s()[T(Ae).code]??""),Ue(vr,T(Ae).text),Ue(pr,gr)},[()=>t.product.price_suffix.trim()]),Oe(Te,bt)}),Oe(z,F)};hn(wt,z=>{o()&&z(mt)})}Ge(()=>{g=At(_,1,"tile touch-target svelte-1ctu6qg",null,g,{selected:f(),rejected:l()}),zt(_,"data-product-id",t.product.id),_.disabled=a(),y=ot(S,"",y,{background:T(h)}),re=ot(J,"",re,{"font-size":`${n()??""}px`}),Ue(k,t.product.name)}),Di("pointerdown",_,()=>t.onpick(t.product)),Oe(e,_),Nn()}Fi(["pointerdown"]);const xs=0,Ps="repeat(auto-fill, minmax(var(--tile-min), 1fr))";function of(e){return e===xs?Ps:`repeat(${String(e)}, minmax(0, 1fr))`}export{b as $,ie as A,Vs as B,of as C,ff as D,sf as E,af as F,Ys as G,ke as H,Zs as I,Ws as J,ur as K,Js as L,rf as M,ms as N,nf as O,Qs as P,ls as Q,dr as R,$s as S,lf as T,tf as U,ef as V,Bs as W,Xt as X,Re as Y,Bi as Z,Ds as _,se as a,Xn as a0,mn as a1,Is as a2,Fs as a3,Zn as a4,zs as a5,I as a6,Ls as a7,Xs as a8,qs as a9,Us as aa,xs as ab,Ut as ac,Li as ad,Gs as ae,Di as b,Oe as c,Fi as d,Mi as e,Nn as f,tt as g,T as h,hn as i,zt as j,ot as k,At as l,Ue as m,rt as n,Q as o,On as p,js as q,Vi as r,it as s,Ge as t,Wt as u,_s as v,vs as w,Hs as x,Ks as y,ae as z};
+\r\f \v\uFEFF`];function Ki(e,t,n){var r=e==null?"":""+e;if(t&&(r=r?r+" "+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+" "+i:i;else if(r.length)for(var s=i.length,f=0;(f=r.indexOf(i,f))>=0;){var l=f+s;(f===0||_n.includes(r[f-1]))&&(l===r.length||_n.includes(r[l]))?r=(f===0?"":r.substring(0,f))+r.substring(l+1):f=l}}return r===""?null:r}function pn(e,t=!1){var n=t?" !important;":";",r="";for(var i of Object.keys(e)){var s=e[i];s!=null&&s!==""&&(r+=" "+i+": "+s+n)}return r}function Tt(e){return e[0]!=="-"||e[1]!=="-"?e.toLowerCase():e}function Zi(e,t){if(t){var n="",r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var s=!1,f=0,l=!1,a=[];r&&a.push(...Object.keys(r).map(Tt)),i&&a.push(...Object.keys(i).map(Tt));var o=0,c=-1;const p=e.length;for(var d=0;d
'),Os=tt(''),Ns=tt(' '),ks=tt(''),Cs=tt('');function lf(e,t){On(t,!0);const n=se(t,"nameSizePx",3,$t),r=se(t,"categoryColor",3,"#8a867c"),i=se(t,"primaryCode",3,""),s=se(t,"tierAbbrev",19,()=>({})),f=se(t,"selected",3,!1),l=se(t,"rejected",3,!1),a=se(t,"busy",3,!1),o=se(t,"showPrice",3,!0);let c=ie("");const d=rt(()=>t.product.image_url!==""&&t.product.image_url!==T(c)),u=rt(()=>p(t.product.name)),h=rt(()=>vs(r())),v=rt(()=>_s(r()));function p(z){const F=z.match(/\p{L}/u);return F===null?"·":F[0].toUpperCase()}var _=Cs();let g;var S=Q(_);let y;var E=Q(S);{var x=z=>{var F=Ms();Ge(()=>zt(F,"src",t.product.image_url)),Li("error",F,()=>ae(c,t.product.image_url,!0)),Oe(z,F)},Y=z=>{var F=Os();let Te;var Ae=Q(F);Ge(()=>{Te=ot(F,"",Te,{color:T(v)}),Ue(Ae,T(u))}),Oe(z,F)};hn(E,z=>{T(d)?z(x):z(Y,-1)})}var P=it(S,2),J=Q(P);let re;var k=Q(J),wt=it(P,2);{var mt=z=>{var F=ks();Vi(F,21,()=>t.product.prices,Te=>Te.code,(Te,Ae)=>{var bt=Ns();let en;var Et=Q(bt);let tn;var hr=Q(Et),nn=it(Et,2),vr=Q(nn),_r=it(nn,2),pr=Q(_r);Ge(gr=>{en=At(bt,1,"price svelte-1ctu6qg",null,en,{secondary:T(Ae).code!==i()}),tn=At(Et,1,"abbrev svelte-1ctu6qg",null,tn,{hollow:T(Ae).code!==i()}),Ue(hr,s()[T(Ae).code]??""),Ue(vr,T(Ae).text),Ue(pr,gr)},[()=>t.product.price_suffix.trim()]),Oe(Te,bt)}),Oe(z,F)};hn(wt,z=>{o()&&z(mt)})}Ge(()=>{g=At(_,1,"tile touch-target svelte-1ctu6qg",null,g,{selected:f(),rejected:l()}),zt(_,"data-product-id",t.product.id),_.disabled=a(),y=ot(S,"",y,{background:T(h)}),re=ot(J,"",re,{"font-size":`${n()??""}px`}),Ue(k,t.product.name)}),Di("pointerdown",_,()=>t.onpick(t.product)),Oe(e,_),Nn()}Fi(["pointerdown"]);const xs=0,Ps="repeat(auto-fill, minmax(var(--tile-min), 1fr))";function of(e){return e===xs?Ps:`repeat(${String(e)}, minmax(0, 1fr))`}export{Ds as $,ie as A,Vs as B,of as C,ff as D,sf as E,af as F,Ys as G,ke as H,Zs as I,Ws as J,ur as K,Js as L,fs as M,ms as N,rf as O,nf as P,Qs as Q,dr as R,ls as S,lf as T,$s as U,tf as V,ef as W,Bs as X,Xt as Y,Re as Z,Bi as _,se as a,b as a0,Xn as a1,mn as a2,Is as a3,Fs as a4,Zn as a5,zs as a6,I as a7,Ls as a8,Xs as a9,qs as aa,Us as ab,xs as ac,Ut as ad,Li as ae,Gs as af,Di as b,Oe as c,Fi as d,Mi as e,Nn as f,tt as g,T as h,hn as i,zt as j,ot as k,At as l,Ue as m,rt as n,Q as o,On as p,js as q,Vi as r,it as s,Ge as t,Wt as u,_s as v,vs as w,Hs as x,Ks as y,ae as z};
diff --git a/internal/web/dist/assets/index-CY0bHh3L.js b/internal/web/dist/assets/index-CY0bHh3L.js
new file mode 100644
index 0000000..50cabbd
--- /dev/null
+++ b/internal/web/dist/assets/index-CY0bHh3L.js
@@ -0,0 +1,2 @@
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mount-zw3SIkYn.js","assets/app-BaRSXv80.js","assets/app-Cfxw4Luj.css","assets/mount-MmpjwdB2.css"])))=>i.map(i=>d[i]);
+import{e as Ie,u as je,d as re,p as Y,a as q,i as W,I as ee,t as z,b as N,c as w,f as Z,g as E,h as t,s as h,j as ae,k as te,l as se,m as T,n as v,o as u,q as Pe,r as fe,w as De,v as Te,x as ne,y as Ce,R as Re,z as b,A as D,B as qe,T as Le,C as Ne,N as Oe,D as Me,E as We,F as Be,G as Fe,H as ze,M as He,J as Ue,K as Ve,L as Ge,O as Xe,P as Ke,Q as Je,S as Qe,U as Ye,V as Ze,W as $e,X as et}from"./app-BaRSXv80.js";class be{#e=new WeakMap;#t;#n;static entries=new WeakMap;constructor(e){this.#n=e}observe(e,n){var r=this.#e.get(e)||new Set;return r.add(n),this.#e.set(e,r),this.#s().observe(e,this.#n),()=>{var l=this.#e.get(e);l.delete(n),l.size===0&&(this.#e.delete(e),this.#t.unobserve(e))}}#s(){return this.#t??(this.#t=new ResizeObserver(e=>{for(var n of e){be.entries.set(n.target,n);for(var r of this.#e.get(n.target)||[])r(n)}}))}}var tt=new be({box:"border-box"});function he(s,e,n){var r=tt.observe(s,()=>n(s[e]));Ie(()=>(je(()=>n(s[e])),r))}const nt="modulepreload",at=function(s){return"/"+s},ye={},st=function(e,n,r){let l=Promise.resolve();if(n&&n.length>0){let _=function(o){return Promise.all(o.map(i=>Promise.resolve(i).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),d=c?.nonce||c?.getAttribute("nonce");l=_(n.map(o=>{if(o=at(o),o in ye)return;ye[o]=!0;const i=o.endsWith(".css"),y=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${o}"]${y}`))return;const k=document.createElement("link");if(k.rel=i?"stylesheet":nt,i||(k.as="script"),k.crossOrigin="",k.href=o,d&&k.setAttribute("nonce",d),document.head.appendChild(k),i)return new Promise((m,I)=>{k.addEventListener("load",m),k.addEventListener("error",()=>I(new Error(`Unable to preload CSS for ${o}`)))})}))}function f(c){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=c,window.dispatchEvent(d),!d.defaultPrevented)throw c}return l.then(c=>{for(const d of c||[])d.status==="rejected"&&f(d.reason);return e().catch(f)})};var rt=E('
openscale config password.
'),rs=c(""),ns=c(''),ss=c(''),ls=c(""),is=c(""),os=c('
, et le supprime
- une fois lu : c’est ce qui dit au producteur que la livraison est prise. '),Js=c(' Quand Fichier Source Résultat Motif Lues Pesables Non pesables Anomalies Retirés
"),el=c(' '),tl=c('');function Na(a,t){Me(t,!0);const r=Be(t,"hint",3,"");var i=tl(),d=s(i),p=n(d,2),k=s(p),T=s(k),m=n(k,2);{var j=L=>{var W=Zs(),z=s(W);f(()=>o(z,t.path)),l(L,W)};_(m,L=>{jt.showTechnicalNames&&L(j)})}var q=n(m,2);{var D=L=>{var W=el(),z=s(W);f(()=>o(z,r())),l(L,W)};_(q,L=>{r()!==""&&L(D)})}f(L=>{he(i,"data-flag",t.path),he(i,"data-on",L),ta(d,t.on),o(T,t.label)},[()=>String(t.on)]),Ce("change",d,L=>t.onchange(L.currentTarget.checked)),l(a,i),We()}ct(["change"]);function Ja(a){const t=`${ne(a.columns)} ${a.columns>1?"colonnes":"colonne"}`,r=`${ne(a.rows)} ${a.rows>1?"rangées":"rangée"}`;return`${t} × ${r}`}function al(a){const t=a.layout,r=[];if(a.columns===Xt)return r.push(t===null?"Automatique : la grille suit la largeur de l’écran. Un écran plus large en montre davantage sans qu’on y revienne.":`Automatique : ${Ja(t)} sur cet écran. Un écran plus large en montrera davantage sans qu’on y revienne.`),r;if(t===null)return r.push(`${ne(a.columns)} ${a.columns>1?"colonnes":"colonne"} sur tous les écrans. Cet écran ne sait pas dire combien de rangées cela fait ici.`),r;const i=t.columns*t.rows;if(r.push(`${Ja(t)} — ${ne(i)} ${i>1?"tuiles":"tuile"} d’un coup, sur cet écran (${String(a.viewport.width)} × ${String(a.viewport.height)}).`),a.tileCount>0){const p=Math.ceil(a.tileCount/i);r.push(a.tileCount>1?`Les ${ne(a.tileCount)} tuiles de la grille tiennent en ${ne(p)} ${p>1?"écrans":"écran"}.`:"La seule tuile de la grille tient en un écran.")}const d=a.floor;if(d!==null&&d.names>0){const p=d.names>1;r.push(`${ne(d.names)} ${p?"noms":"nom"} sur ${ne(a.tileCount)} ${p?"atteignent":"atteint"} le plancher de ${ne(ka)} px : `+(d.rows>1?`leurs ${ne(d.rows)} rangées peuvent être plus hautes que les autres.`:"leur rangée peut être plus haute que les autres."))}return r}function rl(a,t,r){if(a==="loading")return"Lecture du catalogue en service…";if(a==="unread")return"Le catalogue en service n’a pas pu être lu : cet écran ne sait pas combien de produits se vendent à l’unité.";if(t===0)return"Aucun produit vendu à l’unité dans le catalogue en service.";const i=t>1,d=i?"produits vendus à l’unité sont":"produit vendu à l’unité est",p=r?`${i?"montrés":"montré"} dans la grille de ce poste`:`${i?"masqués":"masqué"} sur ce poste`;return`${ne(t)} ${d} ${p}.`}function nl(a){return["localhost","127.0.0.1"].includes(a)?"":"Cet écran n’est pas celui du poste : ce compte vaut pour l’écran que vous lisez."}const sl=-1,ll=10;class xr{#t=G("");get sentence(){return e(this.#t)}set sentence(t){v(this.#t,t,!0)}#r=0;#a="";#e=0;begin(t){this.sentence="",this.#r=t.last_import_id,this.#a=t.watched,this.#e=ll}forget(){this.sentence="",this.#e=0}observe(t){if(this.#e===0)return;if(t.counters.journal_rows_count===sl){this.#n(Ms(this.#a));return}const r=t.catalog;if(r!==null&&r.id!==this.#r){this.#n(Fs(r,t.catalog_motives));return}this.#e-=1,this.#e===0&&(this.sentence=Us(this.#a))}#n(t){this.sentence=t,this.#e=0}}var il=c('"),dl=c(''),vl=c(' clé
',1),ei=c(`INCONNU — la question n’a pas pu être posée à ce système. Ce
- n’est pas « non configuré » : personne ne sait encore.`,1),ti=c('OK ',1),ai=c('NON CONFIGURÉ ',1),ri=c('
'),ui=c(''),ci=c('
',1),vi=c('
'),Ii=c('
',1),Ui=c('
'),Bi=c('
',1),Gi=c('
Réglages série de la balance
Réglages de l’imprimante
'),po=c('
',1),fo=c(' Quand Produit Net Code-barres Résultat Durée Détail
'),$o=c(` Code Libellé Abrégé Remise Ordre ',1);function au(a,t){Me(t,!0);function r(L){return Aa(t.names[L],t.namesState,"Nom non lu")}const i=20,d=u(()=>t.waivers.filter(L=>!L.offered)),p=u(()=>t.waivers.slice(0,i)),k=u(()=>`${ne(e(p).length)} ${e(p).length>1?"lignes affichées":"ligne affichée"} sur ${ne(t.waivers.length)} `+(e(d).length===0?`${t.waivers.length>1?"dérogations en vigueur":"dérogation en vigueur"}.`:`${t.waivers.length>1?"dérogations enregistrées":"dérogation enregistrée"}, dont ${ne(e(d).length)} sur un produit retiré, sans effet : le garde-fou 14 refuse le produit avant que le 8 ait un sens.`)+(t.waivers.length>e(p).length?" Les autres se lisent produit par produit depuis l’onglet Catalogue.":""));function T(L){return`plancher ${ne(L)} g : refusé à ${ne(L)} g et en dessous`}var m=Rt(),j=te(m);{var q=L=>{var W=Xo();l(L,W)},D=L=>{var W=tu(),z=te(W),R=s(z),K=n(z,2);{var F=w=>{var g=Qo();l(w,g)};_(K,w=>{t.namesState==="unread"&&w(F)})}var E=n(K,2);Te(E,21,()=>e(p),w=>w.product_id,(w,g)=>{var U=eu(),B=s(U),$=s(B),J=n(B,2),C=s(J),y=n(J,2),S=s(y),O=n(y,2),A=s(O),h=n(O,2),V=s(h),X=n(h,2);{var ae=M=>{var b=Zo();l(M,b)};_(X,M=>{e(g).offered||M(ae)})}f((M,b,I,Y)=>{he(U,"data-withdrawn",M),o($,b),o(C,e(g).product_id),o(S,I),o(A,e(g).reason),o(V,`${Y??""}, ${e(g).decided_by??""}`)},[()=>String(!e(g).offered),()=>r(e(g).product_id),()=>T(e(g).min_weight_g??0),()=>va(e(g).decided_at)]),l(w,U)}),f(()=>o(R,e(k))),l(L,W)};_(j,L=>{t.waivers.length===0?L(q):L(D,-1)})}l(a,m),We()}var ru=c(" ",1),nu=c(`
',1),ou=c(' ',1),cu=c(`
Ce que les garde-fous disent de la pesée en cours
`,1),du=c(` "),gu=c(' '),mu=c(' Champ En service Dans le fichier "),bu=c(' '),wu=c("
'),ju=c(`
`,1);function Ru(a,t){Me(t,!0);let r=G(""),i=G(""),d=G(ft([])),p=G(!1),k=G(0),T=G(0),m=G(!1);const j=u(()=>e(k)>0);qt(()=>{if(!e(j))return;const z=setInterval(()=>{v(T,Math.max(0,Math.round((e(k)-Date.now())/1e3)),!0)},1e3);return()=>clearInterval(z)});async function q(){v(r,"reload-config"),v(i,""),v(d,[],!0);try{const z=await t.admin.protect(async()=>{try{return await vn()}catch(R){if(fa(R))throw R;return t.admin.report(R),v(d,t.admin.lastFaults,!0),null}});if(z===null)return;v(i,`Le fichier est en service. Empreinte ${z.config_fingerprint}.`)}finally{v(r,"")}}async function D(){v(r,"restart"),v(i,""),v(d,[],!0);try{const z=await t.admin.protect(()=>pn());if(z===null)return;v(i,z.message,!0),v(p,!0),v(i,await Su()?"Le poste est revenu.":"Le poste n’a pas répondu dans les cinq minutes. Allez le voir.",!0)}finally{v(r,""),v(p,!1)}}async function L(){if(!e(m)){v(m,!0);return}v(r,"reboot"),v(i,""),v(d,[],!0);try{const z=await t.admin.protect(()=>fn());if(z===null)return;v(k,Date.parse(z.at),!0),v(T,z.seconds_left,!0)}finally{v(r,""),v(m,!1)}}async function W(){v(r,"cancel-reboot");try{const z=await t.admin.protect(()=>gn());if(z===null)return;v(k,0),v(i,z.message,!0)}finally{v(r,"")}}ze(a,{title:"Maintenance",children:(z,R)=>{var K=ju(),F=n(te(K),2),E=n(s(F),2),w=n(s(E),3);{let h=u(()=>e(r)==="reload-config");Pe(w,{kind:"write",act:"reload-config",label:"Relire le fichier",protected:!0,get busy(){return e(h)},onrun:q})}var g=n(E,4),U=n(s(g));{let h=u(()=>e(r)==="restart"||e(p));Pe(U,{kind:"write",act:"restart",label:"Redémarrer le poste",protected:!0,get busy(){return e(h)},onrun:D})}var B=n(g,4),$=n(s(B));{var J=h=>{var V=Lu(),X=te(V),ae=s(X),M=n(X,2);{let b=u(()=>e(r)==="cancel-reboot");Pe(M,{kind:"write",act:"cancel-reboot",label:"Annuler",get busy(){return e(b)},onrun:W})}f(()=>o(ae,`L’ordinateur redémarre dans ${e(T)??""} seconde${e(T)>1?"s":""}.`)),l(h,V)},C=h=>{var V=Cu(),X=te(V);{var ae=b=>{var I=Eu();l(b,I)};_(X,b=>{e(m)&&b(ae)})}var M=n(X,2);{let b=u(()=>e(m)?"Confirmer le redémarrage":"Redémarrer l’ordinateur"),I=u(()=>e(r)==="reboot");Pe(M,{kind:"destructive",act:"reboot",get label(){return e(b)},protected:!0,get busy(){return e(I)},onrun:L})}l(h,V)};_($,h=>{e(j)?h(J):h(C,-1)})}var y=n(F,2);{var S=h=>{var V=Pu(),X=s(V);f(()=>o(X,e(i))),l(h,V)};_(y,h=>{e(i)!==""&&h(S)})}var O=n(y,2);{var A=h=>{var V=zu();Te(V,21,()=>e(d),X=>X.field,(X,ae)=>{var M=Tu(),b=s(M),I=s(b),Y=n(b);f(()=>{o(I,e(ae).field),o(Y,` — ${e(ae).message??""}`)}),l(X,M)}),l(h,V)};_(O,h=>{e(d).length>0&&h(A)})}l(z,K)},$$slots:{default:!0}}),We()}function Ou(a,t){const r=[];for(const i of[...La(a),...La(t)]){if(r.some(k=>k.path===i))continue;const d=nr(ga(a,i)),p=nr(ga(t,i));d!==p&&r.push({path:i,before:d,after:p})}return r}function ga(a,t){let r=a;for(const i of t.split(".")){if(r===null||typeof r!="object")return;r=r[i]}return r}function La(a,t=""){if(a===null||typeof a!="object"||Array.isArray(a))return t===""?[]:[t];const r=[];for(const[i,d]of Object.entries(a))r.push(...La(d,t===""?i:`${t}.${i}`));return r}function nr(a){return a===void 0?"—":a===null?"vide":typeof a=="boolean"?a?"oui":"non":typeof a=="object"?JSON.stringify(a):String(a)}const Au=new Set(["modified_at","catalog.options.password"]),Nu=[{path:"station.name",name:"le nom du poste"},{path:"network.listen",name:"l’adresse d’écoute"},{path:"scale.options.port",name:"le port de la balance"},{path:"printer.options.queue",name:"la file d’impression"},{path:"printer.options.path",name:"le nœud d’impression"},{path:"printer.options.address",name:"l’adresse de l’imprimante"},{path:"catalog.options.url",name:"l’adresse du partage"},{path:"catalog.options.username",name:"le compte du partage"},{path:"catalog.images.path",name:"le chemin des images"}];function Iu(a,t){return a===null||t===null?[]:Ou(a,t).filter(r=>!Au.has(r.path))}function Du(a,t){if(a===null||t===null)return[];const r=a,i=t;return Nu.filter(d=>sr(i,d.path)&&!sr(r,d.path))}function sr(a,t){const r=ga(a,t);return r==null||r===""?!0:typeof r!="object"||Array.isArray(r)?!1:Object.keys(r).length===0}function Fu(a){return a.length<2?a.join(""):`${a.slice(0,-1).join(", ")} et ${a[a.length-1]??""}`}async function Uu(a,t){const i=await fetch(`/admin/api/config/export?hardware=${t?"1":"0"}`,{headers:{accept:"application/json"}});if(!i.ok)throw new zt(i.status,Lr(await i.text(),"L’export"));return{name:Wu(a,t),blob:await i.blob()}}async function Mu(a){const t=await fetch("/admin/api/config/import",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(a)}),r=await t.text();if(!t.ok)throw new zt(t.status,Lr(r,"L’import"));return JSON.parse(r)}function Wu(a,t){const r=t?"":"-sans-materiel";return`config-poste${String(a)}${r}-${Bu()}.json`}function Bu(){const a=new Date,t=String(a.getMonth()+1).padStart(2,"0"),r=String(a.getDate()).padStart(2,"0");return`${String(a.getFullYear())}-${t}-${r}`}function Vu(a,t){const r=URL.createObjectURL(t),i=document.createElement("a");i.href=r,i.download=a,document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>{URL.revokeObjectURL(r)},0)}function Lr(a,t){try{const r=JSON.parse(a);if(typeof r?.message=="string"&&r.message!=="")return r.message}catch{}return`${t} a été refusé par le poste.`}var Gu=c(' config.json tel qu’il est sur le disque, sans arrêter le
- poste. À utiliser après une modification faite à la main dans le fichier.
',1),Hu=c(' clé
",1),Ec=c(`
',1),Rc=c(" ",1);function Oc(a,t){Me(t,!0);let r=G(null),i=G(""),d=G(""),p=G(!1),k=G("");const T=u(()=>e(r)?.outcome??null),m=u(()=>e(r)?.supported===!0&&e(r).available),j=u(()=>e(r)?.latest??"");qt(()=>{q()});async function q(){try{v(r,await Rn(),!0),v(i,"")}catch(g){v(i,g instanceof Error?g.message:"Lecture impossible.",!0)}}async function D(){v(d,"check");try{const g=await t.admin.protect(()=>On());g!==null&&(v(r,g,!0),v(i,""))}finally{v(d,"")}}async function L(g){v(d,"apply"),v(k,"");try{if(await t.admin.protect(()=>An(g))===null)return;v(p,!0),v(k,await W()?"":"Le poste n’a pas répondu dans les cinq minutes. Allez le voir.",!0),await q()}finally{v(d,""),v(p,!1)}}async function W(){const g=Date.now()+bc;for(;Date.now() '),Bc=c(''),Vc=c(' "),Jc=c("'),$c=c(''),Yc=c('
openscale config password.
'),ns=c(""),ss=c(''),ls=c(''),is=c(""),os=c(""),us=c('
, et le supprime
+ une fois lu : c’est ce qui dit au producteur que la livraison est prise. '),Ks=c(' Quand Fichier Source Résultat Motif Lues Pesables Non pesables Anomalies Retirés
"),tl=c(' '),al=c('');function Na(a,t){Ue(t,!0);const r=Be(t,"hint",3,"");var i=al(),d=s(i),p=n(d,2),y=s(p),z=s(y),m=n(y,2);{var j=L=>{var W=el(),O=s(W);f(()=>o(O,t.path)),l(L,W)};_(m,L=>{St.showTechnicalNames&&L(j)})}var S=n(m,2);{var A=L=>{var W=tl(),O=s(W);f(()=>o(O,r())),l(L,W)};_(S,L=>{r()!==""&&L(A)})}f(L=>{be(i,"data-flag",t.path),be(i,"data-on",L),ea(d,t.on),o(z,t.label)},[()=>String(t.on)]),Ce("change",d,L=>t.onchange(L.currentTarget.checked)),l(a,i),Me()}ot(["change"]);function Ja(a){const t=`${se(a.columns)} ${a.columns>1?"colonnes":"colonne"}`,r=`${se(a.rows)} ${a.rows>1?"rangées":"rangée"}`;return`${t} × ${r}`}function rl(a){const t=a.layout,r=[];if(a.columns===Xt)return r.push(t===null?"Automatique : la grille suit la largeur de l’écran. Un écran plus large en montre davantage sans qu’on y revienne.":`Automatique : ${Ja(t)} sur cet écran. Un écran plus large en montrera davantage sans qu’on y revienne.`),r;if(t===null)return r.push(`${se(a.columns)} ${a.columns>1?"colonnes":"colonne"} sur tous les écrans. Cet écran ne sait pas dire combien de rangées cela fait ici.`),r;const i=t.columns*t.rows;if(r.push(`${Ja(t)} — ${se(i)} ${i>1?"tuiles":"tuile"} d’un coup, sur cet écran (${String(a.viewport.width)} × ${String(a.viewport.height)}).`),a.tileCount>0){const p=Math.ceil(a.tileCount/i);r.push(a.tileCount>1?`Les ${se(a.tileCount)} tuiles de la grille tiennent en ${se(p)} ${p>1?"écrans":"écran"}.`:"La seule tuile de la grille tient en un écran.")}const d=a.floor;if(d!==null&&d.names>0){const p=d.names>1;r.push(`${se(d.names)} ${p?"noms":"nom"} sur ${se(a.tileCount)} ${p?"atteignent":"atteint"} le plancher de ${se(ka)} px : `+(d.rows>1?`leurs ${se(d.rows)} rangées peuvent être plus hautes que les autres.`:"leur rangée peut être plus haute que les autres."))}return r}function nl(a,t,r){if(a==="loading")return"Lecture du catalogue en service…";if(a==="unread")return"Le catalogue en service n’a pas pu être lu : cet écran ne sait pas combien de produits se vendent à l’unité.";if(t===0)return"Aucun produit vendu à l’unité dans le catalogue en service.";const i=t>1,d=i?"produits vendus à l’unité sont":"produit vendu à l’unité est",p=r?`${i?"montrés":"montré"} dans la grille de ce poste`:`${i?"masqués":"masqué"} sur ce poste`;return`${se(t)} ${d} ${p}.`}function sl(a){return["localhost","127.0.0.1"].includes(a)?"":"Cet écran n’est pas celui du poste : ce compte vaut pour l’écran que vous lisez."}const ll=-1,il=10;class kr{#t=B("");get sentence(){return e(this.#t)}set sentence(t){v(this.#t,t,!0)}#r=0;#a="";#e=0;begin(t){this.sentence="",this.#r=t.last_import_id,this.#a=t.watched,this.#e=il}forget(){this.sentence="",this.#e=0}observe(t){if(this.#e===0)return;if(t.counters.journal_rows_count===ll){this.#n(Ws(this.#a));return}const r=t.catalog;if(r!==null&&r.id!==this.#r){this.#n(Us(r,t.catalog_motives));return}this.#e-=1,this.#e===0&&(this.sentence=Ms(this.#a))}#n(t){this.sentence=t,this.#e=0}}var ol=c('"),dl=c(''),vl=c(' clé
',1),ei=c(`INCONNU — la question n’a pas pu être posée à ce système. Ce
+ n’est pas « non configuré » : personne ne sait encore.`,1),ti=c('OK ',1),ai=c('NON CONFIGURÉ ',1),ri=c('
'),ui=c(''),ci=c('
',1),vi=c('
'),Ii=c('
',1),Ui=c('
'),Bi=c('
',1),Gi=c('
Réglages série de la balance
Réglages de l’imprimante
'),po=c('
',1),fo=c(' Quand Produit Net Code-barres Résultat Durée Détail
'),$o=c(` Code Libellé Abrégé Remise Ordre ',1);function au(a,t){Ue(t,!0);function r(L){return Aa(t.names[L],t.namesState,"Nom non lu")}const i=20,d=u(()=>t.waivers.filter(L=>!L.offered)),p=u(()=>t.waivers.slice(0,i)),y=u(()=>`${se(e(p).length)} ${e(p).length>1?"lignes affichées":"ligne affichée"} sur ${se(t.waivers.length)} `+(e(d).length===0?`${t.waivers.length>1?"dérogations en vigueur":"dérogation en vigueur"}.`:`${t.waivers.length>1?"dérogations enregistrées":"dérogation enregistrée"}, dont ${se(e(d).length)} sur un produit retiré, sans effet : le garde-fou 14 refuse le produit avant que le 8 ait un sens.`)+(t.waivers.length>e(p).length?" Les autres se lisent produit par produit depuis l’onglet Catalogue.":""));function z(L){return`plancher ${se(L)} g : refusé à ${se(L)} g et en dessous`}var m=Tt(),j=ae(m);{var S=L=>{var W=Xo();l(L,W)},A=L=>{var W=tu(),O=ae(W),C=s(O),K=n(O,2);{var U=x=>{var g=Qo();l(x,g)};_(K,x=>{t.namesState==="unread"&&x(U)})}var E=n(K,2);ze(E,21,()=>e(p),x=>x.product_id,(x,g)=>{var D=eu(),H=s(D),V=s(H),$=n(H,2),T=s($),w=n($,2),k=s(w),R=n(w,2),F=s(R),h=n(R,2),G=s(h),Y=n(h,2);{var ne=M=>{var b=Zo();l(M,b)};_(Y,M=>{e(g).offered||M(ne)})}f((M,b,N,X)=>{be(D,"data-withdrawn",M),o(V,b),o(T,e(g).product_id),o(k,N),o(F,e(g).reason),o(G,`${X??""}, ${e(g).decided_by??""}`)},[()=>String(!e(g).offered),()=>r(e(g).product_id),()=>z(e(g).min_weight_g??0),()=>va(e(g).decided_at)]),l(x,D)}),f(()=>o(C,e(y))),l(L,W)};_(j,L=>{t.waivers.length===0?L(S):L(A,-1)})}l(a,m),Me()}var ru=c(" ",1),nu=c(`
',1),ou=c(' ',1),cu=c(`
Ce que les garde-fous disent de la pesée en cours
`,1),du=c(` "),gu=c(' '),mu=c(' Champ En service Dans le fichier "),bu=c(' '),wu=c("
'),ju=c(`
`,1);function Ru(a,t){Ue(t,!0);let r=B(""),i=B(""),d=B(vt([])),p=B(!1),y=B(0),z=B(0),m=B(!1);const j=u(()=>e(y)>0);wt(()=>{if(!e(j))return;const O=setInterval(()=>{v(z,Math.max(0,Math.round((e(y)-Date.now())/1e3)),!0)},1e3);return()=>clearInterval(O)});async function S(){v(r,"reload-config"),v(i,""),v(d,[],!0);try{const O=await t.admin.protect(async()=>{try{return await pn()}catch(C){if(fa(C))throw C;return t.admin.report(C),v(d,t.admin.lastFaults,!0),null}});if(O===null)return;v(i,`Le fichier est en service. Empreinte ${O.config_fingerprint}.`)}finally{v(r,"")}}async function A(){v(r,"restart"),v(i,""),v(d,[],!0);try{const O=await t.admin.protect(()=>fn());if(O===null)return;v(i,O.message,!0),v(p,!0),v(i,await Su()?"Le poste est revenu.":"Le poste n’a pas répondu dans les cinq minutes. Allez le voir.",!0)}finally{v(r,""),v(p,!1)}}async function L(){if(!e(m)){v(m,!0);return}v(r,"reboot"),v(i,""),v(d,[],!0);try{const O=await t.admin.protect(()=>gn());if(O===null)return;v(y,Date.parse(O.at),!0),v(z,O.seconds_left,!0)}finally{v(r,""),v(m,!1)}}async function W(){v(r,"cancel-reboot");try{const O=await t.admin.protect(()=>mn());if(O===null)return;v(y,0),v(i,O.message,!0)}finally{v(r,"")}}Oe(a,{title:"Maintenance",children:(O,C)=>{var K=ju(),U=n(ae(K),2),E=n(s(U),2),x=n(s(E),3);{let h=u(()=>e(r)==="reload-config");Te(x,{kind:"write",act:"reload-config",label:"Relire le fichier",protected:!0,get busy(){return e(h)},onrun:S})}var g=n(E,4),D=n(s(g));{let h=u(()=>e(r)==="restart"||e(p));Te(D,{kind:"write",act:"restart",label:"Redémarrer le poste",protected:!0,get busy(){return e(h)},onrun:A})}var H=n(g,4),V=n(s(H));{var $=h=>{var G=Lu(),Y=ae(G),ne=s(Y),M=n(Y,2);{let b=u(()=>e(r)==="cancel-reboot");Te(M,{kind:"write",act:"cancel-reboot",label:"Annuler",get busy(){return e(b)},onrun:W})}f(()=>o(ne,`L’ordinateur redémarre dans ${e(z)??""} seconde${e(z)>1?"s":""}.`)),l(h,G)},T=h=>{var G=Cu(),Y=ae(G);{var ne=b=>{var N=Eu();l(b,N)};_(Y,b=>{e(m)&&b(ne)})}var M=n(Y,2);{let b=u(()=>e(m)?"Confirmer le redémarrage":"Redémarrer l’ordinateur"),N=u(()=>e(r)==="reboot");Te(M,{kind:"destructive",act:"reboot",get label(){return e(b)},protected:!0,get busy(){return e(N)},onrun:L})}l(h,G)};_(V,h=>{e(j)?h($):h(T,-1)})}var w=n(U,2);{var k=h=>{var G=Pu(),Y=s(G);f(()=>o(Y,e(i))),l(h,G)};_(w,h=>{e(i)!==""&&h(k)})}var R=n(w,2);{var F=h=>{var G=zu();ze(G,21,()=>e(d),Y=>Y.field,(Y,ne)=>{var M=Tu(),b=s(M),N=s(b),X=n(b);f(()=>{o(N,e(ne).field),o(X,` — ${e(ne).message??""}`)}),l(Y,M)}),l(h,G)};_(R,h=>{e(d).length>0&&h(F)})}l(O,K)},$$slots:{default:!0}}),Me()}function Ou(a,t){const r=[];for(const i of[...La(a),...La(t)]){if(r.some(y=>y.path===i))continue;const d=sr(ga(a,i)),p=sr(ga(t,i));d!==p&&r.push({path:i,before:d,after:p})}return r}function ga(a,t){let r=a;for(const i of t.split(".")){if(r===null||typeof r!="object")return;r=r[i]}return r}function La(a,t=""){if(a===null||typeof a!="object"||Array.isArray(a))return t===""?[]:[t];const r=[];for(const[i,d]of Object.entries(a))r.push(...La(d,t===""?i:`${t}.${i}`));return r}function sr(a){return a===void 0?"—":a===null?"vide":typeof a=="boolean"?a?"oui":"non":typeof a=="object"?JSON.stringify(a):String(a)}const Au=new Set(["modified_at","catalog.options.password"]),Nu=[{path:"station.name",name:"le nom du poste"},{path:"network.listen",name:"l’adresse d’écoute"},{path:"scale.options.port",name:"le port de la balance"},{path:"printer.options.queue",name:"la file d’impression"},{path:"printer.options.path",name:"le nœud d’impression"},{path:"printer.options.address",name:"l’adresse de l’imprimante"},{path:"catalog.options.url",name:"l’adresse du partage"},{path:"catalog.options.username",name:"le compte du partage"},{path:"catalog.images.path",name:"le chemin des images"}];function Iu(a,t){return a===null||t===null?[]:Ou(a,t).filter(r=>!Au.has(r.path))}function Du(a,t){if(a===null||t===null)return[];const r=a,i=t;return Nu.filter(d=>lr(i,d.path)&&!lr(r,d.path))}function lr(a,t){const r=ga(a,t);return r==null||r===""?!0:typeof r!="object"||Array.isArray(r)?!1:Object.keys(r).length===0}function Fu(a){return a.length<2?a.join(""):`${a.slice(0,-1).join(", ")} et ${a[a.length-1]??""}`}async function Uu(a,t){const i=await fetch(`/admin/api/config/export?hardware=${t?"1":"0"}`,{headers:{accept:"application/json"}});if(!i.ok)throw new Pt(i.status,Er(await i.text(),"L’export"));return{name:Wu(a,t),blob:await i.blob()}}async function Mu(a){const t=await fetch("/admin/api/config/import",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(a)}),r=await t.text();if(!t.ok)throw new Pt(t.status,Er(r,"L’import"));return JSON.parse(r)}function Wu(a,t){const r=t?"":"-sans-materiel";return`config-poste${String(a)}${r}-${Bu()}.json`}function Bu(){const a=new Date,t=String(a.getMonth()+1).padStart(2,"0"),r=String(a.getDate()).padStart(2,"0");return`${String(a.getFullYear())}-${t}-${r}`}function Vu(a,t){const r=URL.createObjectURL(t),i=document.createElement("a");i.href=r,i.download=a,document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>{URL.revokeObjectURL(r)},0)}function Er(a,t){try{const r=JSON.parse(a);if(typeof r?.message=="string"&&r.message!=="")return r.message}catch{}return`${t} a été refusé par le poste.`}var Gu=c(' config.json tel qu’il est sur le disque, sans arrêter le
+ poste. À utiliser après une modification faite à la main dans le fichier.
',1),Hu=c(' clé
",1),Ec=c(`
',1),Rc=c(" ",1);function Oc(a,t){Ue(t,!0);let r=B(null),i=B(""),d=B(""),p=B(!1),y=B("");const z=u(()=>e(r)?.outcome??null),m=u(()=>e(r)?.supported===!0&&e(r).available),j=u(()=>e(r)?.latest??"");wt(()=>{S()});async function S(){try{v(r,await On(),!0),v(i,"")}catch(g){v(i,g instanceof Error?g.message:"Lecture impossible.",!0)}}async function A(){v(d,"check");try{const g=await t.admin.protect(()=>An());g!==null&&(v(r,g,!0),v(i,""))}finally{v(d,"")}}async function L(g){v(d,"apply"),v(y,"");try{if(await t.admin.protect(()=>Nn(g))===null)return;v(p,!0),v(y,await W()?"":"Le poste n’a pas répondu dans les cinq minutes. Allez le voir.",!0),await S()}finally{v(d,""),v(p,!1)}}async function W(){const g=Date.now()+bc;for(;Date.now() '),Bc=c(''),Vc=c(' "),Jc=c("'),$c=c(''),Yc=c('
{CHIP_THRESHOLD_PATH}{/if}
openscale config password.
'),ns=c(""),ss=c(''),ls=c(''),is=c(""),os=c(""),us=c('
, et le supprime
une fois lu : c’est ce qui dit au producteur que la livraison est prise. '),Ks=c(' Quand Fichier Source Résultat Motif Lues Pesables Non pesables Anomalies Retirés
"),tl=c(' '),al=c('');function Na(a,t){Ue(t,!0);const r=Be(t,"hint",3,"");var i=al(),d=s(i),p=n(d,2),y=s(p),z=s(y),m=n(y,2);{var j=L=>{var W=el(),O=s(W);f(()=>o(O,t.path)),l(L,W)};_(m,L=>{St.showTechnicalNames&&L(j)})}var S=n(m,2);{var A=L=>{var W=tl(),O=s(W);f(()=>o(O,r())),l(L,W)};_(S,L=>{r()!==""&&L(A)})}f(L=>{be(i,"data-flag",t.path),be(i,"data-on",L),ea(d,t.on),o(z,t.label)},[()=>String(t.on)]),Ce("change",d,L=>t.onchange(L.currentTarget.checked)),l(a,i),Me()}ot(["change"]);function Ja(a){const t=`${se(a.columns)} ${a.columns>1?"colonnes":"colonne"}`,r=`${se(a.rows)} ${a.rows>1?"rangées":"rangée"}`;return`${t} × ${r}`}function rl(a){const t=a.layout,r=[];if(a.columns===Xt)return r.push(t===null?"Automatique : la grille suit la largeur de l’écran. Un écran plus large en montre davantage sans qu’on y revienne.":`Automatique : ${Ja(t)} sur cet écran. Un écran plus large en montrera davantage sans qu’on y revienne.`),r;if(t===null)return r.push(`${se(a.columns)} ${a.columns>1?"colonnes":"colonne"} sur tous les écrans. Cet écran ne sait pas dire combien de rangées cela fait ici.`),r;const i=t.columns*t.rows;if(r.push(`${Ja(t)} — ${se(i)} ${i>1?"tuiles":"tuile"} d’un coup, sur cet écran (${String(a.viewport.width)} × ${String(a.viewport.height)}).`),a.tileCount>0){const p=Math.ceil(a.tileCount/i);r.push(a.tileCount>1?`Les ${se(a.tileCount)} tuiles de la grille tiennent en ${se(p)} ${p>1?"écrans":"écran"}.`:"La seule tuile de la grille tient en un écran.")}const d=a.floor;if(d!==null&&d.names>0){const p=d.names>1;r.push(`${se(d.names)} ${p?"noms":"nom"} sur ${se(a.tileCount)} ${p?"atteignent":"atteint"} le plancher de ${se(ka)} px : `+(d.rows>1?`leurs ${se(d.rows)} rangées peuvent être plus hautes que les autres.`:"leur rangée peut être plus haute que les autres."))}return r}function nl(a,t,r){if(a==="loading")return"Lecture du catalogue en service…";if(a==="unread")return"Le catalogue en service n’a pas pu être lu : cet écran ne sait pas combien de produits se vendent à l’unité.";if(t===0)return"Aucun produit vendu à l’unité dans le catalogue en service.";const i=t>1,d=i?"produits vendus à l’unité sont":"produit vendu à l’unité est",p=r?`${i?"montrés":"montré"} dans la grille de ce poste`:`${i?"masqués":"masqué"} sur ce poste`;return`${se(t)} ${d} ${p}.`}function sl(a){return["localhost","127.0.0.1"].includes(a)?"":"Cet écran n’est pas celui du poste : ce compte vaut pour l’écran que vous lisez."}const ll=-1,il=10;class kr{#t=B("");get sentence(){return e(this.#t)}set sentence(t){v(this.#t,t,!0)}#r=0;#a="";#e=0;begin(t){this.sentence="",this.#r=t.last_import_id,this.#a=t.watched,this.#e=il}forget(){this.sentence="",this.#e=0}observe(t){if(this.#e===0)return;if(t.counters.journal_rows_count===ll){this.#n(Ws(this.#a));return}const r=t.catalog;if(r!==null&&r.id!==this.#r){this.#n(Us(r,t.catalog_motives));return}this.#e-=1,this.#e===0&&(this.sentence=Ms(this.#a))}#n(t){this.sentence=t,this.#e=0}}var ol=c('"),dl=c(''),vl=c(' clé