diff --git a/404.html b/404.html index 506d8702..65c46456 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ Page Not Found | TiBillet - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/js/0efb64b9.23b847af.js b/assets/js/0efb64b9.23b847af.js new file mode 100644 index 00000000..42cf0e4e --- /dev/null +++ b/assets/js/0efb64b9.23b847af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[5875],{9528:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var a=s(4848),n=s(8453);const i={sidebar_position:200,slug:"cashback",title:"Cashback",description:"Reward online recharges",keywords:["cashless","billetterie","ticketing","cashback","stripe","online","recharges"],wiktags:["cashless","billetterie","ticketing","cashback","stripe","online","recharges"],authors:"jonas"},r=void 0,o={id:"Utilisateur/Cashless/200 Cashback",title:"Cashback",description:"Reward online recharges",source:"@site/docs/Utilisateur/Cashless/200 Cashback.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/cashback",permalink:"/docs/Utilisateur/Cashless/cashback",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/200 Cashback.md",tags:[],version:"current",sidebarPosition:200,frontMatter:{sidebar_position:200,slug:"cashback",title:"Cashback",description:"Reward online recharges",keywords:["cashless","billetterie","ticketing","cashback","stripe","online","recharges"],wiktags:["cashless","billetterie","ticketing","cashback","stripe","online","recharges"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Loyalty points",permalink:"/docs/Utilisateur/Cashless/fidelity"},next:{title:"Billetterie",permalink:"/docs/category/billetterie"}},l={},c=[{value:"Reward large top-ups online.",id:"reward-large-top-ups-online",level:2},{value:"Example :",id:"example-",level:3}];function h(e){const t={h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"reward-large-top-ups-online",children:"Reward large top-ups online."}),"\n",(0,a.jsx)(t.p,{children:"We have implemented a gift token cashback system following requests from our customers."}),"\n",(0,a.jsx)(t.p,{children:"The idea is to encourage people to carry out their own recharges online\nto relieve a site's cashless reception and recharge points."}),"\n",(0,a.jsx)(t.p,{children:'In the administration of your cashless page, go to "General Configuration", then to the "CASHBACK" tab.\nIndicate the amount from which the reward activates, the value of the reward, then activate the box "Activate cashback for top-ups".\nFinally, validate with the \u201cSave\u201d button.'}),"\n",(0,a.jsx)(t.p,{children:"Result: Each time you reload more than the planned amount, \u201cGift\u201d tokens are credited to the card."}),"\n",(0,a.jsx)(t.p,{children:"Please note that these \u201cGift\u201d tokens are considered differently by accounting\nand do not enter into the profit calculation figures (same currency as for volunteers, for example)."}),"\n",(0,a.jsx)(t.h3,{id:"example-",children:"Example :"}),"\n",(0,a.jsx)(t.p,{children:"For example :"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Cashback start = 50"}),"\n",(0,a.jsx)(t.li,{children:"Cashback value = 2.50"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"If the person tops up \u20ac55, they earn 2.50 as a gift.\nIf she tops up \u20ac101, she wins 5 as a gift (x2)."})]})}function d(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>o});var a=s(6540);const n={},i=a.createContext(n);function r(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0efb64b9.51ec29f1.js b/assets/js/0efb64b9.51ec29f1.js deleted file mode 100644 index 62f4084c..00000000 --- a/assets/js/0efb64b9.51ec29f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[5875],{9528:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var a=s(4848),n=s(8453);const i={sidebar_position:200,slug:"cashback",title:"Cashback",description:"Reward online recharges",keywords:["cashless","billetterie","ticketing","cashback","stripe","online","recharges"],wiktags:["cashless","billetterie","ticketing","cashback","stripe","online","recharges"],authors:"jonas"},r=void 0,o={id:"Utilisateur/Cashless/200 Cashback",title:"Cashback",description:"Reward online recharges",source:"@site/docs/Utilisateur/Cashless/200 Cashback.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/cashback",permalink:"/docs/Utilisateur/Cashless/cashback",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/200 Cashback.md",tags:[],version:"current",sidebarPosition:200,frontMatter:{sidebar_position:200,slug:"cashback",title:"Cashback",description:"Reward online recharges",keywords:["cashless","billetterie","ticketing","cashback","stripe","online","recharges"],wiktags:["cashless","billetterie","ticketing","cashback","stripe","online","recharges"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Loyalty points",permalink:"/docs/Utilisateur/Cashless/fidelity"},next:{title:"Billetterie",permalink:"/docs/category/billetterie"}},l={},c=[{value:"Reward large top-ups online.",id:"reward-large-top-ups-online",level:2},{value:"Example :",id:"example-",level:3}];function h(e){const t={h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"reward-large-top-ups-online",children:"Reward large top-ups online."}),"\n",(0,a.jsx)(t.p,{children:"We have implemented a gift token cashback system following requests from our customers."}),"\n",(0,a.jsx)(t.p,{children:"The idea is to encourage people to carry out their own recharges online\nto relieve a site's cashless reception and recharge points."}),"\n",(0,a.jsx)(t.p,{children:'In the administration of your cashless page, go to "General Configuration", then to the "CASHBACK" tab.\nIndicate the amount from which the reward activates, the value of the reward, then activate the box "Activate cashback for top-ups".\nFinally, validate with the \u201cSave\u201d button.'}),"\n",(0,a.jsx)(t.p,{children:"Result: Each time you reload more than the planned amount, \u201cGift\u201d tokens are credited to the card."}),"\n",(0,a.jsx)(t.p,{children:"Please note that these \u201cGift\u201d tokens are considered differently by accounting\nand do not enter into the profit calculation figures (same currency as for volunteers, for example)."}),"\n",(0,a.jsx)(t.h3,{id:"example-",children:"Example :"}),"\n",(0,a.jsx)(t.p,{children:"For example :"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Cashback start = 50"}),"\n",(0,a.jsx)(t.li,{children:"Cashback value = 2.50"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"If the person tops up \u20ac55, they earn 2.50 as a gift.\nIf she tops up \u20ac101, she wins 5 as a gift (x2)."})]})}function d(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>o});var a=s(6540);const n={},i=a.createContext(n);function r(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/11632215.1795b963.js b/assets/js/11632215.1795b963.js new file mode 100644 index 00000000..943dcb53 --- /dev/null +++ b/assets/js/11632215.1795b963.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[1938],{9182:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var o=i(4848),n=i(8453);const r={sidebar_position:40,slug:"webhook",title:"Webhook",description:"Send a POST for each confirmed booking.",keywords:["ticketing","billetterie","webhook","api"],wiktags:["ticketing","billetterie","webhook","api"],authors:"Jonas"},s=void 0,a={id:"Utilisateur/Billetterie/40 webhook",title:"Webhook",description:"Send a POST for each confirmed booking.",source:"@site/docs/Utilisateur/Billetterie/40 webhook.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/webhook",permalink:"/docs/Utilisateur/Billetterie/webhook",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Billetterie/40 webhook.md",tags:[],version:"current",sidebarPosition:40,frontMatter:{sidebar_position:40,slug:"webhook",title:"Webhook",description:"Send a POST for each confirmed booking.",keywords:["ticketing","billetterie","webhook","api"],wiktags:["ticketing","billetterie","webhook","api"],authors:"Jonas"},sidebar:"tutorialSidebar",previous:{title:"Create a free event",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_free_event"},next:{title:"Integration",permalink:"/docs/Utilisateur/Billetterie/iframe"}},l={},c=[];function d(e){const t={a:"a",code:"code",p:"p",pre:"pre",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"It is possible to create webhooks after each event carried out on the ticket office in the administration interface."}),"\n",(0,o.jsxs)(t.p,{children:["example : ",(0,o.jsx)(t.a,{href:"https://demo.betabillet.tech/adminBaseBillet/webhook/",children:"https://demo.betabillet.tech/adminBaseBillet/webhook/"})]}),"\n",(0,o.jsx)(t.p,{children:"The webhook is triggered each time a free or paid reservation is validated, at the same time as the tickets are sent by email."}),"\n",(0,o.jsx)(t.p,{children:'It is possible to see the last response to the query in the "Last response" field.'}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-python",metastring:'title="Reservation"',children:'# Celery task : Billetterie/DjangoFiles/BaseBillet/tasks.py\n\njson = {\n "object": "reservation",\n "uuid": f"{reservation.uuid}",\n "state": f"{reservation.status}",\n "datetime": f"{reservation.datetime}",\n}\n'})}),"\n",(0,o.jsxs)(t.p,{children:["It is then possible to retrieve more information about the reservation via the standard API ",(0,o.jsx)(t.a,{href:"/docs/api/reservations",children:"/docs/api/reservations"})]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>s,x:()=>a});var o=i(6540);const n={},r=o.createContext(n);function s(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/11632215.eb5d9315.js b/assets/js/11632215.eb5d9315.js deleted file mode 100644 index 19d55496..00000000 --- a/assets/js/11632215.eb5d9315.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[1938],{9182:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var o=i(4848),n=i(8453);const r={sidebar_position:40,slug:"webhook",title:"Webhook",description:"Send a POST for each confirmed booking.",keywords:["ticketing","billetterie","webhook","api"],wiktags:["ticketing","billetterie","webhook","api"],authors:"Jonas"},s=void 0,a={id:"Utilisateur/Billetterie/40 webhook",title:"Webhook",description:"Send a POST for each confirmed booking.",source:"@site/docs/Utilisateur/Billetterie/40 webhook.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/webhook",permalink:"/docs/Utilisateur/Billetterie/webhook",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Billetterie/40 webhook.md",tags:[],version:"current",sidebarPosition:40,frontMatter:{sidebar_position:40,slug:"webhook",title:"Webhook",description:"Send a POST for each confirmed booking.",keywords:["ticketing","billetterie","webhook","api"],wiktags:["ticketing","billetterie","webhook","api"],authors:"Jonas"},sidebar:"tutorialSidebar",previous:{title:"Create a free event",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_free_event"},next:{title:"Integration",permalink:"/docs/Utilisateur/Billetterie/iframe"}},l={},c=[];function d(e){const t={a:"a",code:"code",p:"p",pre:"pre",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"It is possible to create webhooks after each event carried out on the ticket office in the administration interface."}),"\n",(0,o.jsxs)(t.p,{children:["example : ",(0,o.jsx)(t.a,{href:"https://demo.betabillet.tech/adminBaseBillet/webhook/",children:"https://demo.betabillet.tech/adminBaseBillet/webhook/"})]}),"\n",(0,o.jsx)(t.p,{children:"The webhook is triggered each time a free or paid reservation is validated, at the same time as the tickets are sent by email."}),"\n",(0,o.jsx)(t.p,{children:'It is possible to see the last response to the query in the "Last response" field.'}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-python",metastring:'title="Reservation"',children:'# Celery task : Billetterie/DjangoFiles/BaseBillet/tasks.py\n\njson = {\n "object": "reservation",\n "uuid": f"{reservation.uuid}",\n "state": f"{reservation.status}",\n "datetime": f"{reservation.datetime}",\n}\n'})}),"\n",(0,o.jsxs)(t.p,{children:["It is then possible to retrieve more information about the reservation via the standard API ",(0,o.jsx)(t.a,{href:"/docs/api/reservations",children:"/docs/api/reservations"})]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>s,x:()=>a});var o=i(6540);const n={},r=o.createContext(n);function s(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1623311b.da3432ad.js b/assets/js/1623311b.da3432ad.js new file mode 100644 index 00000000..90abf0d9 --- /dev/null +++ b/assets/js/1623311b.da3432ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[5418],{3749:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var n=s(4848),i=s(8453);const o={sidebar_position:12,slug:"admin_add_pos",title:"Points of sale",description:"Add one or more points of sale.",keywords:["cashless","android","pos","point of sale"],wiktags:["cashless","android","pos","point of sale"],authors:"Axel"},a=void 0,r={id:"Utilisateur/Cashless/12 PointVente",title:"Points of sale",description:"Add one or more points of sale.",source:"@site/docs/Utilisateur/Cashless/12 PointVente.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_add_pos",permalink:"/docs/Utilisateur/Cashless/admin_add_pos",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/12 PointVente.md",tags:[],version:"current",sidebarPosition:12,frontMatter:{sidebar_position:12,slug:"admin_add_pos",title:"Points of sale",description:"Add one or more points of sale.",keywords:["cashless","android","pos","point of sale"],wiktags:["cashless","android","pos","point of sale"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Primary Cards",permalink:"/docs/Utilisateur/Cashless/admin_add_primary"},next:{title:"Article categories",permalink:"/docs/Utilisateur/Cashless/admin_add_categorie"}},l={},d=[{value:"Create a new point of sale",id:"create-a-new-point-of-sale",level:2}];function c(e){const t={admonition:"admonition",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Points of sale represent the physical space(s) in your location where a TiBillet box is installed.\nOnce in the interface, you can choose the one that concerns you (Bar, Restaurant, Cashless...).\nThere you will find the categories and articles assigned to this point of sale."}),"\n",(0,n.jsx)(t.p,{children:"Thanks to the primary cards which are requested each time the application is opened, you can restrict access to certain points of sale to the users concerned."}),"\n",(0,n.jsx)(t.h2,{id:"create-a-new-point-of-sale",children:"Create a new point of sale"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Click on the \u201cPoints of sale\u201d category in the left column."}),"\n",(0,n.jsx)(t.li,{children:"Click on the \u201cAdd Point of Sale\u201d button at the top right."}),"\n",(0,n.jsx)(t.li,{children:"Enter the name of the point of sale as well as the items that will be available"}),"\n",(0,n.jsx)(t.li,{children:"Save"}),"\n"]}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsx)(t.p,{children:"A point of sale is visible in the interface if it contains articles.\nIt is best to create the items first and then assign them to a point of sale."})}),"\n",(0,n.jsx)("video",{width:"100%",controls:!0,src:"/img/addpointsvente.mp4"})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>r});var n=s(6540);const i={},o=n.createContext(i);function a(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1623311b.ffff21f4.js b/assets/js/1623311b.ffff21f4.js deleted file mode 100644 index 646e20de..00000000 --- a/assets/js/1623311b.ffff21f4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[5418],{3749:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var n=s(4848),i=s(8453);const o={sidebar_position:12,slug:"admin_add_pos",title:"Points of sale",description:"Add one or more points of sale.",keywords:["cashless","android","pos","point of sale"],wiktags:["cashless","android","pos","point of sale"],authors:"Axel"},a=void 0,r={id:"Utilisateur/Cashless/12 PointVente",title:"Points of sale",description:"Add one or more points of sale.",source:"@site/docs/Utilisateur/Cashless/12 PointVente.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_add_pos",permalink:"/docs/Utilisateur/Cashless/admin_add_pos",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/12 PointVente.md",tags:[],version:"current",sidebarPosition:12,frontMatter:{sidebar_position:12,slug:"admin_add_pos",title:"Points of sale",description:"Add one or more points of sale.",keywords:["cashless","android","pos","point of sale"],wiktags:["cashless","android","pos","point of sale"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Primary Cards",permalink:"/docs/Utilisateur/Cashless/admin_add_primary"},next:{title:"Article categories",permalink:"/docs/Utilisateur/Cashless/admin_add_categorie"}},l={},d=[{value:"Create a new point of sale",id:"create-a-new-point-of-sale",level:2}];function c(e){const t={admonition:"admonition",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Points of sale represent the physical space(s) in your location where a TiBillet box is installed.\nOnce in the interface, you can choose the one that concerns you (Bar, Restaurant, Cashless...).\nThere you will find the categories and articles assigned to this point of sale."}),"\n",(0,n.jsx)(t.p,{children:"Thanks to the primary cards which are requested each time the application is opened, you can restrict access to certain points of sale to the users concerned."}),"\n",(0,n.jsx)(t.h2,{id:"create-a-new-point-of-sale",children:"Create a new point of sale"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Click on the \u201cPoints of sale\u201d category in the left column."}),"\n",(0,n.jsx)(t.li,{children:"Click on the \u201cAdd Point of Sale\u201d button at the top right."}),"\n",(0,n.jsx)(t.li,{children:"Enter the name of the point of sale as well as the items that will be available"}),"\n",(0,n.jsx)(t.li,{children:"Save"}),"\n"]}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsx)(t.p,{children:"A point of sale is visible in the interface if it contains articles.\nIt is best to create the items first and then assign them to a point of sale."})}),"\n",(0,n.jsx)("video",{width:"100%",controls:!0,src:"/img/addpointsvente.mp4"})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>r});var n=s(6540);const i={},o=n.createContext(i);function a(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1eec3456.2ea8d6f1.js b/assets/js/1eec3456.2ea8d6f1.js deleted file mode 100644 index 67611674..00000000 --- a/assets/js/1eec3456.2ea8d6f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7293],{3122:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>s,toc:()=>d});var i=n(4848),r=n(8453);const l={sidebar_position:2,slug:"admin_add_new_free_event",title:"Create a free event",description:"Create a new event in detail.",keywords:["billetterie","ticketing","event","free"],wiktags:["billetterie","ticketing","event","free"],authors:"Axel"},o=void 0,s={id:"Utilisateur/Billetterie/70 event gratuit",title:"Create a free event",description:"Create a new event in detail.",source:"@site/docs/Utilisateur/Billetterie/70 event gratuit.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/admin_add_new_free_event",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_free_event",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Billetterie/70 event gratuit.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"admin_add_new_free_event",title:"Create a free event",description:"Create a new event in detail.",keywords:["billetterie","ticketing","event","free"],wiktags:["billetterie","ticketing","event","free"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Create a new event from A to Z",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_event"},next:{title:"Webhook",permalink:"/docs/Utilisateur/Billetterie/webhook"}},a={},d=[{value:"1- Add or edit an event",id:"1--add-or-edit-an-event",level:2}];function c(e){const t={h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"To do this, nothing simpler !"}),"\n",(0,i.jsx)(t.h2,{id:"1--add-or-edit-an-event",children:"1- Add or edit an event"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:'Click on the "Events" category in the left column under the Ticketing tab\nIf you have not yet created your event, click on the "ADD EVENT +" button at the top right\nIf your event already exists click on its name in the table\n*it is possible to sort alphabetically, by date or use the search bar'}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Go to the \u201cArticles\u201d section"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Deselect all products (ctrl + left click)"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"products should no longer be grayed out or highlighted in blue."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Save at the bottom of the page"}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>s});var i=n(6540);const r={},l=i.createContext(r);function o(e){const t=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1eec3456.a965b70e.js b/assets/js/1eec3456.a965b70e.js new file mode 100644 index 00000000..45c8ab71 --- /dev/null +++ b/assets/js/1eec3456.a965b70e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7293],{3122:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var i=n(4848),r=n(8453);const l={sidebar_position:2,slug:"admin_add_new_free_event",title:"Create a free event",description:"Create a new event in detail.",keywords:["billetterie","ticketing","event","free"],wiktags:["billetterie","ticketing","event","free"],authors:"Axel"},o=void 0,a={id:"Utilisateur/Billetterie/70 event gratuit",title:"Create a free event",description:"Create a new event in detail.",source:"@site/docs/Utilisateur/Billetterie/70 event gratuit.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/admin_add_new_free_event",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_free_event",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Billetterie/70 event gratuit.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"admin_add_new_free_event",title:"Create a free event",description:"Create a new event in detail.",keywords:["billetterie","ticketing","event","free"],wiktags:["billetterie","ticketing","event","free"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Create a new event from A to Z",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_event"},next:{title:"Webhook",permalink:"/docs/Utilisateur/Billetterie/webhook"}},s={},d=[{value:"1- Add or edit an event",id:"1--add-or-edit-an-event",level:2}];function c(e){const t={h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"To do this, nothing simpler !"}),"\n",(0,i.jsx)(t.h2,{id:"1--add-or-edit-an-event",children:"1- Add or edit an event"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:'Click on the "Events" category in the left column under the Ticketing tab\nIf you have not yet created your event, click on the "ADD EVENT +" button at the top right\nIf your event already exists click on its name in the table\n*it is possible to sort alphabetically, by date or use the search bar'}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Go to the \u201cArticles\u201d section"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Deselect all products (ctrl + left click)"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"products should no longer be grayed out or highlighted in blue."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Save at the bottom of the page"}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var i=n(6540);const r={},l=i.createContext(r);function o(e){const t=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2e4a270e.109c7b4d.js b/assets/js/2e4a270e.109c7b4d.js new file mode 100644 index 00000000..bed49512 --- /dev/null +++ b/assets/js/2e4a270e.109c7b4d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[853],{3342:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var i=n(4848),s=n(8453);const o={sidebar_position:30,slug:"admin_supp",title:"Removing Orders",description:"Remove multiple orders at once.",keywords:["cashless","billetterie","ticketing","android","orders","removing"],wiktags:["cashless","billetterie","ticketing","android","orders","removing"],authors:"jonas"},r=void 0,a={id:"Utilisateur/Cashless/30 SuppCommande",title:"Removing Orders",description:"Remove multiple orders at once.",source:"@site/docs/Utilisateur/Cashless/30 SuppCommande.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_supp",permalink:"/docs/Utilisateur/Cashless/admin_supp",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/30 SuppCommande.md",tags:[],version:"current",sidebarPosition:30,frontMatter:{sidebar_position:30,slug:"admin_supp",title:"Removing Orders",description:"Remove multiple orders at once.",keywords:["cashless","billetterie","ticketing","android","orders","removing"],wiktags:["cashless","billetterie","ticketing","android","orders","removing"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Printing orders",permalink:"/docs/Utilisateur/Cashless/impression_preparation"},next:{title:"Time clock machine",permalink:"/docs/Utilisateur/Cashless/badge"}},d={},l=[{value:"Select and delete orders",id:"select-and-delete-orders",level:2}];function c(e){const t={admonition:"admonition",h2:"h2",p:"p",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h2,{id:"select-and-delete-orders",children:"Select and delete orders"}),"\n",(0,i.jsx)(t.p,{children:"Rather than going through Manager mode to delete unserved or unpaid orders, it is possible to delete them all at once from the admin interface."}),"\n",(0,i.jsx)(t.p,{children:"In the administration of your TiBillet cashless instance, go to the SALES / Orders menu.\nFilter the commands using the drop-down menu (by table, by status, etc.).\nSelect them one by one or all at once with the menu radio button to the left of TABLE."}),"\n",(0,i.jsx)(t.p,{children:'In the drop-down menu at the bottom left of SEND, select "Delete Orders".'}),"\n",(0,i.jsx)(t.admonition,{type:"danger",children:(0,i.jsx)(t.p,{children:"Attention ! There will be no confirmation and there will be no going back."})}),"\n",(0,i.jsx)("video",{width:"100%",controls:!0,src:"/img/suppcomm.mp4"})]})}function m(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var i=n(6540);const s={},o=i.createContext(s);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2e4a270e.ccc98e25.js b/assets/js/2e4a270e.ccc98e25.js deleted file mode 100644 index 04519d85..00000000 --- a/assets/js/2e4a270e.ccc98e25.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[853],{3342:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var s=n(4848),i=n(8453);const o={sidebar_position:30,slug:"admin_supp",title:"Removing Orders",description:"Remove multiple orders at once.",keywords:["cashless","billetterie","ticketing","android","orders","removing"],wiktags:["cashless","billetterie","ticketing","android","orders","removing"],authors:"jonas"},r=void 0,a={id:"Utilisateur/Cashless/30 SuppCommande",title:"Removing Orders",description:"Remove multiple orders at once.",source:"@site/docs/Utilisateur/Cashless/30 SuppCommande.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_supp",permalink:"/docs/Utilisateur/Cashless/admin_supp",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/30 SuppCommande.md",tags:[],version:"current",sidebarPosition:30,frontMatter:{sidebar_position:30,slug:"admin_supp",title:"Removing Orders",description:"Remove multiple orders at once.",keywords:["cashless","billetterie","ticketing","android","orders","removing"],wiktags:["cashless","billetterie","ticketing","android","orders","removing"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Printing orders",permalink:"/docs/Utilisateur/Cashless/impression_preparation"},next:{title:"Time clock machine",permalink:"/docs/Utilisateur/Cashless/badge"}},d={},l=[{value:"Select and delete orders",id:"select-and-delete-orders",level:2}];function c(e){const t={admonition:"admonition",h2:"h2",p:"p",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"select-and-delete-orders",children:"Select and delete orders"}),"\n",(0,s.jsx)(t.p,{children:"Rather than going through Manager mode to delete unserved or unpaid orders, it is possible to delete them all at once from the admin interface."}),"\n",(0,s.jsx)(t.p,{children:"In the administration of your TiBillet cashless instance, go to the SALES / Orders menu.\nFilter the commands using the drop-down menu (by table, by status, etc.).\nSelect them one by one or all at once with the menu radio button to the left of TABLE."}),"\n",(0,s.jsx)(t.p,{children:'In the drop-down menu at the bottom left of SEND, select "Delete Orders".'}),"\n",(0,s.jsx)(t.admonition,{type:"danger",children:(0,s.jsx)(t.p,{children:"Attention ! There will be no confirmation and there will be no going back."})}),"\n",(0,s.jsx)("video",{width:"100%",controls:!0,src:"/img/suppcomm.mp4"})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(6540);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/321184fb.611d02dc.js b/assets/js/321184fb.611d02dc.js new file mode 100644 index 00000000..ca22e432 --- /dev/null +++ b/assets/js/321184fb.611d02dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8678],{5749:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>t,metadata:()=>o,toc:()=>c});var a=i(4848),s=i(8453);const t={sidebar_position:2,slug:"usages",title:"Uses",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that !",image:"/img/demo/BoitierRaff.jpg",keywords:["cashless","billetterie","ticketing","caisse enregistreuse","prise de commandes","paiement d\xe9mat\xe9rialis\xe9","monnaies locales","monnaies temps","logiciel libre","open source","coop\xe9rative","cash register","order taking","dematerialized payment","local currencies","time currencies","free software","open source","cooperative"],tags:["cashless","billetterie","ticketing","caisse enregistreuse","prise de commandes","paiement d\xe9mat\xe9rialis\xe9","monnaies locales","monnaies temps","logiciel libre","open source","coop\xe9rative","cash register","order taking","dematerialized payment","local currencies","time currencies","free software","open source","cooperative"]},r="Uses",o={id:"presentation/usage",title:"Uses",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that !",source:"@site/docs/presentation/usage.md",sourceDirName:"presentation",slug:"/presentation/usages",permalink:"/docs/presentation/usages",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/presentation/usage.md",tags:[{inline:!0,label:"cashless",permalink:"/docs/tags/cashless"},{inline:!0,label:"billetterie",permalink:"/docs/tags/billetterie"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"caisse enregistreuse",permalink:"/docs/tags/caisse-enregistreuse"},{inline:!0,label:"prise de commandes",permalink:"/docs/tags/prise-de-commandes"},{inline:!0,label:"paiement d\xe9mat\xe9rialis\xe9",permalink:"/docs/tags/paiement-dematerialise"},{inline:!0,label:"monnaies locales",permalink:"/docs/tags/monnaies-locales"},{inline:!0,label:"monnaies temps",permalink:"/docs/tags/monnaies-temps"},{inline:!0,label:"logiciel libre",permalink:"/docs/tags/logiciel-libre"},{inline:!0,label:"open source",permalink:"/docs/tags/open-source"},{inline:!0,label:"coop\xe9rative",permalink:"/docs/tags/cooperative"},{inline:!0,label:"cash register",permalink:"/docs/tags/cash-register"},{inline:!0,label:"order taking",permalink:"/docs/tags/order-taking"},{inline:!0,label:"dematerialized payment",permalink:"/docs/tags/dematerialized-payment"},{inline:!0,label:"local currencies",permalink:"/docs/tags/local-currencies"},{inline:!0,label:"time currencies",permalink:"/docs/tags/time-currencies"},{inline:!0,label:"free software",permalink:"/docs/tags/free-software"},{inline:!0,label:"open source",permalink:"/docs/tags/open-source"},{inline:!0,label:"cooperative",permalink:"/docs/tags/cooperative"}],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"usages",title:"Uses",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that !",image:"/img/demo/BoitierRaff.jpg",keywords:["cashless","billetterie","ticketing","caisse enregistreuse","prise de commandes","paiement d\xe9mat\xe9rialis\xe9","monnaies locales","monnaies temps","logiciel libre","open source","coop\xe9rative","cash register","order taking","dematerialized payment","local currencies","time currencies","free software","open source","cooperative"],tags:["cashless","billetterie","ticketing","caisse enregistreuse","prise de commandes","paiement d\xe9mat\xe9rialis\xe9","monnaies locales","monnaies temps","logiciel libre","open source","coop\xe9rative","cash register","order taking","dematerialized payment","local currencies","time currencies","free software","open source","cooperative"]},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/docs/presentation/introduction"},next:{title:"D\xe9monstration",permalink:"/docs/presentation/demonstration"}},l={},c=[{value:"Cash Register",id:"cash-register",level:2},{value:"Cashless",id:"cashless",level:2},{value:"Membership management and promotion of volunteering",id:"membership-management-and-promotion-of-volunteering",level:2},{value:"Federated ticketing",id:"federated-ticketing",level:2},{value:"Federated agenda",id:"federated-agenda",level:2},{value:"Order management",id:"order-management",level:2},{value:"Management of local currencies / time / free",id:"management-of-local-currencies--time--free",level:2},{value:"Dematerialized payment system",id:"dematerialized-payment-system",level:2},{value:"But also :",id:"but-also-",level:2}];function d(e){const n={h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"uses",children:"Uses"})}),"\n",(0,a.jsx)(n.h2,{id:"cash-register",children:"Cash Register"}),"\n",(0,a.jsx)(n.p,{children:"A cash register that accepts cash, bank cards, membership cards, loyalty cards and cashless cards."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"caisse1",src:i(5229).A+"",width:"480",height:"320"})}),"\n",(0,a.jsx)(n.h2,{id:"cashless",children:"Cashless"}),"\n",(0,a.jsx)(n.p,{children:"An NFC bracelet for your festival cashless. Refillable online or on site. A loyalty, subscription or association membership card\non which you can load both euros and time currencies to promote your volunteering."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"caisse1",src:i(7409).A+"",width:"1248",height:"814"})}),"\n",(0,a.jsx)(n.h2,{id:"membership-management-and-promotion-of-volunteering",children:"Membership management and promotion of volunteering"}),"\n",(0,a.jsx)(n.p,{children:"Online payment, automatic renewal, contribution management, time currency portfolio management.\nCommon subscription to several places, federation of associations."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"adh\xe9sion",src:i(744).A+"",width:"1097",height:"900"})}),"\n",(0,a.jsx)(n.h2,{id:"federated-ticketing",children:"Federated ticketing"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Paying concert with preferential rates for members."}),"\n",(0,a.jsx)(n.li,{children:"Concert with non-nominative tickets"}),"\n",(0,a.jsx)(n.li,{children:"Event with free and nominative registration"}),"\n",(0,a.jsx)(n.li,{children:"Non-nominative restaurant table reservation but requiring prior validation."}),"\n",(0,a.jsx)(n.li,{children:"A free event but with mandatory cashless recharging."}),"\n",(0,a.jsx)(n.li,{children:"Rental and reservation by the hour of a coworking type room"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"billet",src:i(6657).A+"",width:"1097",height:"900"})}),"\n",(0,a.jsx)(n.h2,{id:"federated-agenda",children:"Federated agenda"}),"\n",(0,a.jsx)(n.p,{children:"A federated calendar with several venues to promote your events within a network."}),"\n",(0,a.jsx)(n.h2,{id:"order-management",children:"Order management"}),"\n",(0,a.jsx)(n.p,{children:"Order taking for refreshment bar and catering room. Ticket printing in the kitchen and bar. Order taken by the customer."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"commande",src:i(7704).A+"",width:"1150",height:"653"})}),"\n",(0,a.jsx)(n.h2,{id:"management-of-local-currencies--time--free",children:"Management of local currencies / time / free"}),"\n",(0,a.jsx)(n.p,{children:"Multi-asset blockchain, cashless card management for several sites and/or locations"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"fedow",src:i(2227).A+"",width:"1349",height:"677"})}),"\n",(0,a.jsx)(n.h2,{id:"dematerialized-payment-system",children:"Dematerialized payment system"}),"\n",(0,a.jsx)(n.p,{children:"Payment using QR Code. Token exchange between private wallets."}),"\n",(0,a.jsx)(n.h2,{id:"but-also-",children:"But also :"}),"\n",(0,a.jsx)(n.p,{children:"The combination of all these tools makes it possible to create innovative uses and new forms of cooperation :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Loyalty card for local businesses in local currency"}),"\n",(0,a.jsx)(n.li,{children:"Sharing of time currency between individuals"}),"\n",(0,a.jsx)(n.li,{children:"Exchange rate management between euros and local currency"}),"\n",(0,a.jsx)(n.li,{children:"Co-working federation and shared subscription card\n\u2013 Local currency transfer from user account to user account"}),"\n",(0,a.jsx)(n.li,{children:"Cultural pass card for youth"}),"\n",(0,a.jsx)(n.li,{children:"Access card limited to x passages (cinema, gym, theater, etc.)"}),"\n",(0,a.jsx)(n.li,{children:"Time stamper to open some places (fablab', meeting room, rehearsal studio, etc.)"}),"\n",(0,a.jsx)(n.li,{children:"Food bank payment card for marked items with special prices"}),"\n",(0,a.jsx)(n.li,{children:"Reduced rates if payment in local currency,"}),"\n",(0,a.jsx)(n.li,{children:"etc etc ...."}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"And we are sure that you have great ideas to present to us that we haven't thought of, come and chat with us!"})]})}function m(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},6657:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/BilletDemo1-5db467c347b18b96b5b418d004bbc584.jpg"},744:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/BilletDemo4_adhesion-c7856df8895ca4eef2eeef7cd2c91186.jpg"},7704:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/CashlessDemo6-d6a079b114ec7e64e5f259f1f7cd2180.jpg"},7409:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/cartes-92610d35913d0a7df6dc9e7923bde1e5.jpg"},2227:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/fedow_beta-a9d746594e7662bcc448f00c9fdaf9d4.jpg"},5229:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/maq2-420-ec49d41bd9f8e858d691fe0e86b4f3dc.jpg"},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>o});var a=i(6540);const s={},t=a.createContext(s);function r(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/321184fb.c36776b9.js b/assets/js/321184fb.c36776b9.js deleted file mode 100644 index 6ea0ad68..00000000 --- a/assets/js/321184fb.c36776b9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8678],{5749:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>t,metadata:()=>o,toc:()=>c});var a=i(4848),s=i(8453);const t={sidebar_position:2,slug:"usages",title:"Uses",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that !",image:"/img/demo/BoitierRaff.jpg",keywords:["cashless","billetterie","ticketing","caisse enregistreuse","prise de commandes","paiement d\xe9mat\xe9rialis\xe9","monnaies locales","monnaies temps","logiciel libre","open source","coop\xe9rative","cash register","order taking","dematerialized payment","local currencies","time currencies","free software","open source","cooperative"],tags:["cashless","billetterie","ticketing","caisse enregistreuse","prise de commandes","paiement d\xe9mat\xe9rialis\xe9","monnaies locales","monnaies temps","logiciel libre","open source","coop\xe9rative","cash register","order taking","dematerialized payment","local currencies","time currencies","free software","open source","cooperative"]},r="Uses",o={id:"presentation/usage",title:"Uses",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that !",source:"@site/docs/presentation/usage.md",sourceDirName:"presentation",slug:"/presentation/usages",permalink:"/docs/presentation/usages",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/presentation/usage.md",tags:[{inline:!0,label:"cashless",permalink:"/docs/tags/cashless"},{inline:!0,label:"billetterie",permalink:"/docs/tags/billetterie"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"caisse enregistreuse",permalink:"/docs/tags/caisse-enregistreuse"},{inline:!0,label:"prise de commandes",permalink:"/docs/tags/prise-de-commandes"},{inline:!0,label:"paiement d\xe9mat\xe9rialis\xe9",permalink:"/docs/tags/paiement-dematerialise"},{inline:!0,label:"monnaies locales",permalink:"/docs/tags/monnaies-locales"},{inline:!0,label:"monnaies temps",permalink:"/docs/tags/monnaies-temps"},{inline:!0,label:"logiciel libre",permalink:"/docs/tags/logiciel-libre"},{inline:!0,label:"open source",permalink:"/docs/tags/open-source"},{inline:!0,label:"coop\xe9rative",permalink:"/docs/tags/cooperative"},{inline:!0,label:"cash register",permalink:"/docs/tags/cash-register"},{inline:!0,label:"order taking",permalink:"/docs/tags/order-taking"},{inline:!0,label:"dematerialized payment",permalink:"/docs/tags/dematerialized-payment"},{inline:!0,label:"local currencies",permalink:"/docs/tags/local-currencies"},{inline:!0,label:"time currencies",permalink:"/docs/tags/time-currencies"},{inline:!0,label:"free software",permalink:"/docs/tags/free-software"},{inline:!0,label:"open source",permalink:"/docs/tags/open-source"},{inline:!0,label:"cooperative",permalink:"/docs/tags/cooperative"}],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"usages",title:"Uses",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that !",image:"/img/demo/BoitierRaff.jpg",keywords:["cashless","billetterie","ticketing","caisse enregistreuse","prise de commandes","paiement d\xe9mat\xe9rialis\xe9","monnaies locales","monnaies temps","logiciel libre","open source","coop\xe9rative","cash register","order taking","dematerialized payment","local currencies","time currencies","free software","open source","cooperative"],tags:["cashless","billetterie","ticketing","caisse enregistreuse","prise de commandes","paiement d\xe9mat\xe9rialis\xe9","monnaies locales","monnaies temps","logiciel libre","open source","coop\xe9rative","cash register","order taking","dematerialized payment","local currencies","time currencies","free software","open source","cooperative"]},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/docs/presentation/introduction"},next:{title:"D\xe9monstration",permalink:"/docs/presentation/demonstration"}},l={},c=[{value:"Cash Register",id:"cash-register",level:2},{value:"Cashless",id:"cashless",level:2},{value:"Membership management and promotion of volunteering",id:"membership-management-and-promotion-of-volunteering",level:2},{value:"Federated ticketing",id:"federated-ticketing",level:2},{value:"Federated agenda",id:"federated-agenda",level:2},{value:"Order management",id:"order-management",level:2},{value:"Management of local currencies / time / free",id:"management-of-local-currencies--time--free",level:2},{value:"Dematerialized payment system",id:"dematerialized-payment-system",level:2},{value:"But also :",id:"but-also-",level:2}];function d(e){const n={h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"uses",children:"Uses"})}),"\n",(0,a.jsx)(n.h2,{id:"cash-register",children:"Cash Register"}),"\n",(0,a.jsx)(n.p,{children:"A cash register that accepts cash, bank cards, membership cards, loyalty cards and cashless cards."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"caisse1",src:i(5229).A+"",width:"480",height:"320"})}),"\n",(0,a.jsx)(n.h2,{id:"cashless",children:"Cashless"}),"\n",(0,a.jsx)(n.p,{children:"An NFC bracelet for your festival cashless. Refillable online or on site. A loyalty, subscription or association membership card\non which you can load both euros and time currencies to promote your volunteering."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"caisse1",src:i(7409).A+"",width:"1248",height:"814"})}),"\n",(0,a.jsx)(n.h2,{id:"membership-management-and-promotion-of-volunteering",children:"Membership management and promotion of volunteering"}),"\n",(0,a.jsx)(n.p,{children:"Online payment, automatic renewal, contribution management, time currency portfolio management.\nCommon subscription to several places, federation of associations."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"adh\xe9sion",src:i(744).A+"",width:"1097",height:"900"})}),"\n",(0,a.jsx)(n.h2,{id:"federated-ticketing",children:"Federated ticketing"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Paying concert with preferential rates for members."}),"\n",(0,a.jsx)(n.li,{children:"Concert with non-nominative tickets"}),"\n",(0,a.jsx)(n.li,{children:"Event with free and nominative registration"}),"\n",(0,a.jsx)(n.li,{children:"Non-nominative restaurant table reservation but requiring prior validation."}),"\n",(0,a.jsx)(n.li,{children:"A free event but with mandatory cashless recharging."}),"\n",(0,a.jsx)(n.li,{children:"Rental and reservation by the hour of a coworking type room"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"billet",src:i(6657).A+"",width:"1097",height:"900"})}),"\n",(0,a.jsx)(n.h2,{id:"federated-agenda",children:"Federated agenda"}),"\n",(0,a.jsx)(n.p,{children:"A federated calendar with several venues to promote your events within a network."}),"\n",(0,a.jsx)(n.h2,{id:"order-management",children:"Order management"}),"\n",(0,a.jsx)(n.p,{children:"Order taking for refreshment bar and catering room. Ticket printing in the kitchen and bar. Order taken by the customer."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"commande",src:i(7704).A+"",width:"1150",height:"653"})}),"\n",(0,a.jsx)(n.h2,{id:"management-of-local-currencies--time--free",children:"Management of local currencies / time / free"}),"\n",(0,a.jsx)(n.p,{children:"Multi-asset blockchain, cashless card management for several sites and/or locations"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"fedow",src:i(2227).A+"",width:"1349",height:"677"})}),"\n",(0,a.jsx)(n.h2,{id:"dematerialized-payment-system",children:"Dematerialized payment system"}),"\n",(0,a.jsx)(n.p,{children:"Payment using QR Code. Token exchange between private wallets."}),"\n",(0,a.jsx)(n.h2,{id:"but-also-",children:"But also :"}),"\n",(0,a.jsx)(n.p,{children:"The combination of all these tools makes it possible to create innovative uses and new forms of cooperation :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Loyalty card for local businesses in local currency"}),"\n",(0,a.jsx)(n.li,{children:"Sharing of time currency between individuals"}),"\n",(0,a.jsx)(n.li,{children:"Exchange rate management between euros and local currency"}),"\n",(0,a.jsx)(n.li,{children:"Co-working federation and shared subscription card\n\u2013 Local currency transfer from user account to user account"}),"\n",(0,a.jsx)(n.li,{children:"Cultural pass card for youth"}),"\n",(0,a.jsx)(n.li,{children:"Access card limited to x passages (cinema, gym, theater, etc.)"}),"\n",(0,a.jsx)(n.li,{children:"Time stamper to open some places (fablab', meeting room, rehearsal studio, etc.)"}),"\n",(0,a.jsx)(n.li,{children:"Food bank payment card for marked items with special prices"}),"\n",(0,a.jsx)(n.li,{children:"Reduced rates if payment in local currency,"}),"\n",(0,a.jsx)(n.li,{children:"etc etc ...."}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"And we are sure that you have great ideas to present to us that we haven't thought of, come and chat with us!"})]})}function m(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},6657:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/BilletDemo1-5db467c347b18b96b5b418d004bbc584.jpg"},744:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/BilletDemo4_adhesion-c7856df8895ca4eef2eeef7cd2c91186.jpg"},7704:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/CashlessDemo6-d6a079b114ec7e64e5f259f1f7cd2180.jpg"},7409:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/cartes-92610d35913d0a7df6dc9e7923bde1e5.jpg"},2227:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/fedow_beta-a9d746594e7662bcc448f00c9fdaf9d4.jpg"},5229:(e,n,i)=>{i.d(n,{A:()=>a});const a=i.p+"assets/images/maq2-420-ec49d41bd9f8e858d691fe0e86b4f3dc.jpg"},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>o});var a=i(6540);const s={},t=a.createContext(s);function r(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3c048722.4ad21fb1.js b/assets/js/3c048722.4ad21fb1.js deleted file mode 100644 index 121ab34b..00000000 --- a/assets/js/3c048722.4ad21fb1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7734],{7601:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>a,default:()=>l,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var s=n(4848),r=n(8453);const t={sidebar_position:3,slug:"wiring",title:"Wiring",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},a="Wiring :",c={id:"install/Raspberry Box/Hardware/wiring",title:"Wiring",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/03_wiring.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/wiring",permalink:"/docs/install/Raspberry Box/Hardware/wiring",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/install/Raspberry Box/Hardware/03_wiring.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,slug:"wiring",title:"Wiring",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Lazer cut and 3D print",permalink:"/docs/install/Raspberry Box/Hardware/lazer_cut"},next:{title:"Assembly 7inch back fix screw",permalink:"/docs/install/Raspberry Box/Hardware/7inchBackFix"}},o={},d=[{value:"1 - 7inch back fix :",id:"1---7inch-back-fix-",level:3},{value:"2 - 10 inch :",id:"2---10-inch-",level:3}];function h(e){const i={a:"a",blockquote:"blockquote",br:"br",h1:"h1",h3:"h3",header:"header",hr:"hr",img:"img",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"wiring-",children:"Wiring :"})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsxs)(i.blockquote,{children:["\n",(0,s.jsxs)(i.p,{children:["Warning ",":For"," the following steps, the Raspberry must NOT be powered.",(0,s.jsx)(i.br,{}),"\n","I have warned you ."]}),"\n"]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsxs)(i.p,{children:["We're now going to wire up the NFC reader, the Pi and the screen.",(0,s.jsx)(i.br,{}),"\n",(0,s.jsx)(i.img,{alt:"wiring_1.jpg",src:n(228).A+"",width:"1209",height:"1612"}),(0,s.jsx)(i.br,{}),"\n","On the Pi, connect the cables as shown below :",(0,s.jsx)(i.br,{}),"\n",(0,s.jsx)(i.img,{alt:"wiring_2.jpg",src:n(5507).A+"",width:"1612",height:"1209"})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"NFC_wiring.png",src:n(4098).A+"",width:"754",height:"734"})}),"\n",(0,s.jsx)(i.h3,{id:"1---7inch-back-fix-",children:"1 - 7inch back fix :"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"7inch_C_Pi.png",src:n(6007).A+"",width:"1428",height:"494"})}),"\n",(0,s.jsx)(i.h3,{id:"2---10-inch-",children:"2 - 10 inch :"}),"\n",(0,s.jsxs)(i.blockquote,{children:["\n",(0,s.jsx)(i.p,{children:"Note : The Pi powered by the screen ."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"10inch_G_Pi.jpg",src:n(3897).A+"",width:"960",height:"370"})}),"\n",(0,s.jsxs)(i.p,{children:["Sources : ",(0,s.jsx)(i.a,{href:"https://www.waveshare.com",children:"https://www.waveshare.com"})]})]})}function l(e={}){const{wrapper:i}={...(0,r.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},3897:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/10inch_G_Pi-8aa6472a54ce0024523897198d438293.jpg"},6007:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/7inch_C_Pi-ce7dbf44a071e687db989435db2df406.png"},4098:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/NFC_wiring-1a0f644733fef832d2be3a0e6c1d2d5a.png"},228:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/wiring_1-a4e6109dd6e72d6cff03dcdc7fd1df45.jpg"},5507:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/wiring_2-2beeea4950a0b7d16b0f81d4033ac9e3.jpg"},8453:(e,i,n)=>{n.d(i,{R:()=>a,x:()=>c});var s=n(6540);const r={},t=s.createContext(r);function a(e){const i=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3c048722.94163488.js b/assets/js/3c048722.94163488.js new file mode 100644 index 00000000..44f6037a --- /dev/null +++ b/assets/js/3c048722.94163488.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7734],{7601:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>a,default:()=>l,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var s=n(4848),r=n(8453);const t={sidebar_position:3,slug:"wiring",title:"Wiring",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},a="Wiring :",c={id:"install/Raspberry Box/Hardware/wiring",title:"Wiring",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/03_wiring.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/wiring",permalink:"/docs/install/Raspberry Box/Hardware/wiring",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/install/Raspberry Box/Hardware/03_wiring.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,slug:"wiring",title:"Wiring",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Lazer cut and 3D print",permalink:"/docs/install/Raspberry Box/Hardware/lazer_cut"},next:{title:"Assembly 7inch back fix screw",permalink:"/docs/install/Raspberry Box/Hardware/7inchBackFix"}},o={},d=[{value:"1 - 7inch back fix :",id:"1---7inch-back-fix-",level:3},{value:"2 - 10 inch :",id:"2---10-inch-",level:3}];function h(e){const i={a:"a",blockquote:"blockquote",br:"br",h1:"h1",h3:"h3",header:"header",hr:"hr",img:"img",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"wiring-",children:"Wiring :"})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsxs)(i.blockquote,{children:["\n",(0,s.jsxs)(i.p,{children:["Warning ",":For"," the following steps, the Raspberry must NOT be powered.",(0,s.jsx)(i.br,{}),"\n","I have warned you ."]}),"\n"]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsxs)(i.p,{children:["We're now going to wire up the NFC reader, the Pi and the screen.",(0,s.jsx)(i.br,{}),"\n",(0,s.jsx)(i.img,{alt:"wiring_1.jpg",src:n(228).A+"",width:"1209",height:"1612"}),(0,s.jsx)(i.br,{}),"\n","On the Pi, connect the cables as shown below :",(0,s.jsx)(i.br,{}),"\n",(0,s.jsx)(i.img,{alt:"wiring_2.jpg",src:n(5507).A+"",width:"1612",height:"1209"})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"NFC_wiring.png",src:n(4098).A+"",width:"754",height:"734"})}),"\n",(0,s.jsx)(i.h3,{id:"1---7inch-back-fix-",children:"1 - 7inch back fix :"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"7inch_C_Pi.png",src:n(6007).A+"",width:"1428",height:"494"})}),"\n",(0,s.jsx)(i.h3,{id:"2---10-inch-",children:"2 - 10 inch :"}),"\n",(0,s.jsxs)(i.blockquote,{children:["\n",(0,s.jsx)(i.p,{children:"Note : The Pi powered by the screen ."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"10inch_G_Pi.jpg",src:n(3897).A+"",width:"960",height:"370"})}),"\n",(0,s.jsxs)(i.p,{children:["Sources : ",(0,s.jsx)(i.a,{href:"https://www.waveshare.com",children:"https://www.waveshare.com"})]})]})}function l(e={}){const{wrapper:i}={...(0,r.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},3897:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/10inch_G_Pi-8aa6472a54ce0024523897198d438293.jpg"},6007:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/7inch_C_Pi-ce7dbf44a071e687db989435db2df406.png"},4098:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/NFC_wiring-1a0f644733fef832d2be3a0e6c1d2d5a.png"},228:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/wiring_1-a4e6109dd6e72d6cff03dcdc7fd1df45.jpg"},5507:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/wiring_2-2beeea4950a0b7d16b0f81d4033ac9e3.jpg"},8453:(e,i,n)=>{n.d(i,{R:()=>a,x:()=>c});var s=n(6540);const r={},t=s.createContext(r);function a(e){const i=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3dd44a97.30480a58.js b/assets/js/3dd44a97.30480a58.js new file mode 100644 index 00000000..6d37eab3 --- /dev/null +++ b/assets/js/3dd44a97.30480a58.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7679],{2143:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>u,toc:()=>d});var r=n(4848),a=n(8453),s=n(1470),i=n(9365);const l={sidebar_position:2,slug:"apikey",title:"API Keys",description:"R\xe9cuperez le token de connection.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},o=void 0,u={id:"api/02 Apikey",title:"API Keys",description:"R\xe9cuperez le token de connection.",source:"@site/docs/api/02 Apikey.md",sourceDirName:"api",slug:"/api/apikey",permalink:"/docs/api/apikey",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/api/02 Apikey.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"apikey",title:"API Keys",description:"R\xe9cuperez le token de connection.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/docs/api/intro"},next:{title:"Tenants",permalink:"/docs/api/tenants"}},c={},d=[{value:"Testez la cl\xe9 d'api.",id:"testez-la-cl\xe9-dapi",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.admonition,{type:"caution",children:(0,r.jsxs)(t.p,{children:["La documentation est en cours de r\xe9daction.\nN'h\xe9sitez pas \xe0 nous contacter par ",(0,r.jsx)(t.a,{href:"mailto:contact@tibillet.re",children:"mail"}),",\nou sur ",(0,r.jsx)(t.a,{href:"https://discord.gg/ecb5jtP7vY",children:"Discord"})," ou ",(0,r.jsx)(t.a,{href:"https://matrix.to/#/#tibillet:tiers-lieux.org",children:"Matrix"})," si\nvous avez la moindre question."]})}),"\n",(0,r.jsx)(t.p,{children:"Il est possible de g\xe9rerer une cl\xe9 d'api pour certaines actions."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Allez sur votre interface d'administration."}),"\n"]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["Vous pouvez tester sur ",(0,r.jsx)(t.a,{href:"https://demo.betabillet.tech/admin",children:"https://demo.betabillet.tech/admin"})]}),(0,r.jsxs)(t.p,{children:["log / pass : ",(0,r.jsx)(t.a,{href:"mailto:adminou@tibillet.re",children:"adminou@tibillet.re"})," / miaoumiaou"]})]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Allez dans le menu Api Keys"}),"\n",(0,r.jsx)(t.li,{children:'Cliquez sur le bouton en haut \xe0 droite : "AJOUTER API KEY"'}),"\n",(0,r.jsx)(t.li,{children:"Donnez-lui un nom en rapport \xe0 l'application voulue."}),"\n",(0,r.jsx)(t.li,{children:"Choisissez le niveau d'autorisation que vous souhaitez."}),"\n",(0,r.jsx)(t.li,{children:"Entrez l'adresse ip source des futures requetes."}),"\n",(0,r.jsx)(t.li,{children:'Activez la case "Cr\xe9er / R\xe9voquer"'}),"\n",(0,r.jsx)(t.li,{children:"Enregistrez"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"La cl\xe9 appaitra dans un bandeau. Copiez-la et stockez-la en lieu s\xfbr. Elle est stock\xe9e chiffr\xe9e cot\xe9 serveur."}),"\n",(0,r.jsx)(t.h2,{id:"testez-la-cl\xe9-dapi",children:"Testez la cl\xe9 d'api."}),"\n","\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(i.A,{value:"wget",label:"wget",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"wget --quiet \\\n --method GET \\\n --header 'Authorization: Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW' \\\n --output-document \\\n - http://demo.betabillet.tech/api/user/keytest/\n"})})}),(0,r.jsx)(i.A,{value:"curl",label:"cURL",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"curl --request GET \\\n --url https://demo.betabillet.tech/admin/api/user/keytest/ \\\n --header 'Authorization: Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW'\n"})})}),(0,r.jsx)(i.A,{value:"py",label:"Python",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-py",children:'import requests\n\nurl = "https://demo.betabillet.tech/api/user/keytest/"\n\npayload = ""\nheaders = {"Authorization": "Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW"}\n\nresponse = requests.request("GET", url, data=payload, headers=headers)\n\nprint(response.text)\n'})})}),(0,r.jsx)(i.A,{value:"js",label:"Javascript",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",children:'const data = null;\n\nconst xhr = new XMLHttpRequest();\nxhr.withCredentials = true;\n\nxhr.addEventListener("readystatechange", function () {\n if (this.readyState === this.DONE) {\n console.log(this.responseText);\n }\n});\n\nxhr.open("GET", "https://demo.betabillet.tech/api/user/keytest/");\nxhr.setRequestHeader("Authorization", "Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW");\n\nxhr.send(data);\n'})})})]}),"\n",(0,r.jsx)(t.p,{children:"Doit rendre :"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-json",metastring:"title=json response",children:'{\n\t"auth": "event",\n\t"ip_request": "12.34.56.78",\n\t"ip_valid": true\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:"\"ip_valid\" est \xe0 true si l'ip source de la requ\xeate est la m\xeame que celle renseign\xe9e dans l'administration"})]})}function h(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},9365:(e,t,n)=>{n.d(t,{A:()=>i});n(6540);var r=n(4164);const a={tabItem:"tabItem_Ymn6"};var s=n(4848);function i(e){let{children:t,hidden:n,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(a.tabItem,i),hidden:n,children:t})}},1470:(e,t,n)=>{n.d(t,{A:()=>k});var r=n(6540),a=n(4164),s=n(3104),i=n(6347),l=n(205),o=n(7485),u=n(1682),c=n(679);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.W6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,s=p(e),[i,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[u,d]=m({queryString:n,groupId:a}),[b,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Dv)(n);return[a,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:a}),v=(()=>{const e=u??b;return h({value:e,tabValues:s})?e:null})();(0,l.A)((()=>{v&&o(v)}),[v]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),f(e)}),[d,f,s]),tabValues:s}}var f=n(2303);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(4848);function j(e){let{className:t,block:n,selectedValue:r,selectValue:i,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.a_)(),c=e=>{const t=e.currentTarget,n=o.indexOf(t),a=l[n].value;a!==r&&(u(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;t=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;t=o[n]??o[o.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>o.push(e),onKeyDown:d,onClick:c,...s,className:(0,a.A)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function g(e){let{lazy:t,children:n,selectedValue:s}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function y(e){const t=b(e);return(0,x.jsxs)("div",{className:(0,a.A)("tabs-container",v.tabList),children:[(0,x.jsx)(j,{...t,...e}),(0,x.jsx)(g,{...t,...e})]})}function k(e){const t=(0,f.A)();return(0,x.jsx)(y,{...e,children:d(e.children)},String(t))}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>l});var r=n(6540);const a={},s=r.createContext(a);function i(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3dd44a97.5a1b1623.js b/assets/js/3dd44a97.5a1b1623.js deleted file mode 100644 index e38f4966..00000000 --- a/assets/js/3dd44a97.5a1b1623.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7679],{2143:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>u,toc:()=>d});var r=n(4848),a=n(8453),s=n(1470),i=n(9365);const l={sidebar_position:2,slug:"apikey",title:"API Keys",description:"R\xe9cuperez le token de connection.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},o=void 0,u={id:"api/02 Apikey",title:"API Keys",description:"R\xe9cuperez le token de connection.",source:"@site/docs/api/02 Apikey.md",sourceDirName:"api",slug:"/api/apikey",permalink:"/docs/api/apikey",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/api/02 Apikey.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"apikey",title:"API Keys",description:"R\xe9cuperez le token de connection.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/docs/api/intro"},next:{title:"Tenants",permalink:"/docs/api/tenants"}},c={},d=[{value:"Testez la cl\xe9 d'api.",id:"testez-la-cl\xe9-dapi",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.admonition,{type:"caution",children:(0,r.jsxs)(t.p,{children:["La documentation est en cours de r\xe9daction.\nN'h\xe9sitez pas \xe0 nous contacter par ",(0,r.jsx)(t.a,{href:"mailto:contact@tibillet.re",children:"mail"}),",\nou sur ",(0,r.jsx)(t.a,{href:"https://discord.gg/ecb5jtP7vY",children:"Discord"})," ou ",(0,r.jsx)(t.a,{href:"https://matrix.to/#/#tibillet:tiers-lieux.org",children:"Matrix"})," si\nvous avez la moindre question."]})}),"\n",(0,r.jsx)(t.p,{children:"Il est possible de g\xe9rerer une cl\xe9 d'api pour certaines actions."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Allez sur votre interface d'administration."}),"\n"]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["Vous pouvez tester sur ",(0,r.jsx)(t.a,{href:"https://demo.betabillet.tech/admin",children:"https://demo.betabillet.tech/admin"})]}),(0,r.jsxs)(t.p,{children:["log / pass : ",(0,r.jsx)(t.a,{href:"mailto:adminou@tibillet.re",children:"adminou@tibillet.re"})," / miaoumiaou"]})]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Allez dans le menu Api Keys"}),"\n",(0,r.jsx)(t.li,{children:'Cliquez sur le bouton en haut \xe0 droite : "AJOUTER API KEY"'}),"\n",(0,r.jsx)(t.li,{children:"Donnez-lui un nom en rapport \xe0 l'application voulue."}),"\n",(0,r.jsx)(t.li,{children:"Choisissez le niveau d'autorisation que vous souhaitez."}),"\n",(0,r.jsx)(t.li,{children:"Entrez l'adresse ip source des futures requetes."}),"\n",(0,r.jsx)(t.li,{children:'Activez la case "Cr\xe9er / R\xe9voquer"'}),"\n",(0,r.jsx)(t.li,{children:"Enregistrez"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"La cl\xe9 appaitra dans un bandeau. Copiez-la et stockez-la en lieu s\xfbr. Elle est stock\xe9e chiffr\xe9e cot\xe9 serveur."}),"\n",(0,r.jsx)(t.h2,{id:"testez-la-cl\xe9-dapi",children:"Testez la cl\xe9 d'api."}),"\n","\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(i.A,{value:"wget",label:"wget",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"wget --quiet \\\n --method GET \\\n --header 'Authorization: Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW' \\\n --output-document \\\n - http://demo.betabillet.tech/api/user/keytest/\n"})})}),(0,r.jsx)(i.A,{value:"curl",label:"cURL",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"curl --request GET \\\n --url https://demo.betabillet.tech/admin/api/user/keytest/ \\\n --header 'Authorization: Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW'\n"})})}),(0,r.jsx)(i.A,{value:"py",label:"Python",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-py",children:'import requests\n\nurl = "https://demo.betabillet.tech/api/user/keytest/"\n\npayload = ""\nheaders = {"Authorization": "Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW"}\n\nresponse = requests.request("GET", url, data=payload, headers=headers)\n\nprint(response.text)\n'})})}),(0,r.jsx)(i.A,{value:"js",label:"Javascript",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",children:'const data = null;\n\nconst xhr = new XMLHttpRequest();\nxhr.withCredentials = true;\n\nxhr.addEventListener("readystatechange", function () {\n if (this.readyState === this.DONE) {\n console.log(this.responseText);\n }\n});\n\nxhr.open("GET", "https://demo.betabillet.tech/api/user/keytest/");\nxhr.setRequestHeader("Authorization", "Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW");\n\nxhr.send(data);\n'})})})]}),"\n",(0,r.jsx)(t.p,{children:"Doit rendre :"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-json",metastring:"title=json response",children:'{\n\t"auth": "event",\n\t"ip_request": "12.34.56.78",\n\t"ip_valid": true\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:"\"ip_valid\" est \xe0 true si l'ip source de la requ\xeate est la m\xeame que celle renseign\xe9e dans l'administration"})]})}function h(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},9365:(e,t,n)=>{n.d(t,{A:()=>i});n(6540);var r=n(4164);const a={tabItem:"tabItem_Ymn6"};var s=n(4848);function i(e){let{children:t,hidden:n,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(a.tabItem,i),hidden:n,children:t})}},1470:(e,t,n)=>{n.d(t,{A:()=>k});var r=n(6540),a=n(4164),s=n(3104),i=n(6347),l=n(205),o=n(7485),u=n(1682),c=n(679);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.W6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,s=p(e),[i,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[u,d]=m({queryString:n,groupId:a}),[b,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Dv)(n);return[a,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:a}),v=(()=>{const e=u??b;return h({value:e,tabValues:s})?e:null})();(0,l.A)((()=>{v&&o(v)}),[v]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),f(e)}),[d,f,s]),tabValues:s}}var f=n(2303);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(4848);function j(e){let{className:t,block:n,selectedValue:r,selectValue:i,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.a_)(),c=e=>{const t=e.currentTarget,n=o.indexOf(t),a=l[n].value;a!==r&&(u(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;t=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;t=o[n]??o[o.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>o.push(e),onKeyDown:d,onClick:c,...s,className:(0,a.A)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function g(e){let{lazy:t,children:n,selectedValue:s}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function y(e){const t=b(e);return(0,x.jsxs)("div",{className:(0,a.A)("tabs-container",v.tabList),children:[(0,x.jsx)(j,{...t,...e}),(0,x.jsx)(g,{...t,...e})]})}function k(e){const t=(0,f.A)();return(0,x.jsx)(y,{...e,children:d(e.children)},String(t))}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>l});var r=n(6540);const a={},s=r.createContext(a);function i(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3f20655a.4d8a1d1c.js b/assets/js/3f20655a.4d8a1d1c.js new file mode 100644 index 00000000..2ba94c23 --- /dev/null +++ b/assets/js/3f20655a.4d8a1d1c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8703],{7374:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>i,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var a=s(4848),o=s(8453);const r={sidebar_position:100,slug:"docker_install",title:"Self hosted TiBillet instances",description:"self hosted TiBillet tools with docker",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas"},t=void 0,l={id:"install/server_install",title:"Self hosted TiBillet instances",description:"self hosted TiBillet tools with docker",source:"@site/docs/install/server_install.md",sourceDirName:"install",slug:"/install/docker_install",permalink:"/docs/install/docker_install",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/install/server_install.md",tags:[],version:"current",sidebarPosition:100,frontMatter:{sidebar_position:100,slug:"docker_install",title:"Self hosted TiBillet instances",description:"self hosted TiBillet tools with docker",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Assembly 10inch",permalink:"/docs/install/Raspberry Box/Hardware/10inch"},next:{title:"Contributing",permalink:"/docs/category/contributing"}},i={},c=[{value:"Legal warning",id:"legal-warning",level:2},{value:"Introduction to Engines",id:"introduction-to-engines",level:2},{value:"Generate many Fernet key and django secret key",id:"generate-many-fernet-key-and-django-secret-key",level:3},{value:"Fedow : One ring to rule them all",id:"fedow--one-ring-to-rule-them-all",level:2},{value:"Environment",id:"environment",level:3},{value:"Nginx rules",id:"nginx-rules",level:3},{value:"Docker compose",id:"docker-compose",level:3},{value:"Launch the rocket !",id:"launch-the-rocket-",level:3},{value:"Backup",id:"backup",level:3},{value:"Lespass : Multi tenant engine for membership, ticketing and online cashless refill.",id:"lespass--multi-tenant-engine-for-membership-ticketing-and-online-cashless-refill",level:2},{value:"Environment",id:"environment-1",level:3},{value:"Nginx rules",id:"nginx-rules-1",level:3},{value:"Docker compose",id:"docker-compose-1",level:3},{value:"Launch the rocket !",id:"launch-the-rocket--1",level:3},{value:"Update",id:"update",level:3},{value:"Backups",id:"backups",level:3},{value:"LaBoutik : Cash and cashless registrer. NFC card reader for cashless, membership or badge scan.",id:"laboutik--cash-and-cashless-registrer-nfc-card-reader-for-cashless-membership-or-badge-scan",level:2},{value:"Environment",id:"environment-2",level:3},{value:"Nginx rules",id:"nginx-rules-2",level:3},{value:"Docker compose",id:"docker-compose-2",level:3},{value:"Launch the rocket !",id:"launch-the-rocket--2",level:3},{value:"Update",id:"update-1",level:3},{value:"Backups",id:"backups-1",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"legal-warning",children:"Legal warning"}),"\n",(0,a.jsxs)(n.admonition,{type:"danger",children:[(0,a.jsxs)(n.p,{children:["Since January 1, 2018, in order to combat VAT fraud, all VAT-registered professionals recording\ncustomer payments using one of these software or systems are required to use secure, ",(0,a.jsx)(n.strong,{children:"certified hardware"}),"."]}),(0,a.jsxs)(n.p,{children:["A measure enshrined in\n",(0,a.jsx)(n.a,{href:"https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042914666",children:"Article 286 3\xb0 bis of the General Tax Code"}),"\nand initially stemming from the 2016 Finance Act,\nwhen ",(0,a.jsx)(n.a,{href:"https://www.april.org/reglementation-des-systemes-de-caisse-les-logiciels-libres-de-mieux-en-mieux-pris-en-compte-par-berc",children:"April"}),"\nbecame involved in promoting and defending open-source\nsoftware with cashiering functions."]}),(0,a.jsxs)(n.p,{children:["If you're using ",(0,a.jsx)(n.a,{href:"/docs/presentation/tarifs",children:"TiBillet's Coop' and SaaS model"}),", you don't need to worry about any of\nthis : We provide you with the certificate."]}),(0,a.jsx)(n.p,{children:"But if you self-host your own cash register instance, you legally become the publisher, and we can't provide you with\nany legal documents to present to the tax authorities."}),(0,a.jsx)(n.p,{children:"I imagine that if you're here, it's to install it yourself ;)"}),(0,a.jsx)(n.p,{children:"Here you are informed!"})]}),"\n",(0,a.jsx)(n.p,{children:"More information here (in french) :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://www.economie.gouv.fr/entreprises/professionnels-logiciels-caisse",children:"https://www.economie.gouv.fr/entreprises/professionnels-logiciels-caisse"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://www.april.org/reglementation-des-systemes-de-caisse-les-logiciels-libres-de-mieux-en-mieux-pris-en-compte-par-berc",children:"https://www.april.org/reglementation-des-systemes-de-caisse-les-logiciels-libres-de-mieux-en-mieux-pris-en-compte-par-berc"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042914666",children:"https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042914666"})}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"introduction-to-engines",children:"Introduction to Engines"}),"\n",(0,a.jsx)(n.p,{children:"Tibillet is a software suite composed of several interoperable building blocks. The engines are :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"https://github.com/TiBillet/Fedow",children:"Fedow"}),": Federated and open wallet, the federation engine. A PoA and Rsa key based\nblockchain to\nshare membership assets, local currencies and\ntime for several Lespass and LaBoutik instances."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"https://github.com/TiBillet/Lespass",children:"Lespass"}),": Ticketing, booking, membership and landing page engines. Usefull too\nfor refill online with self scanned qrcode unique on each card."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"https://github.com/TiBillet/LaBoutik",children:"LaBoutik"}),": Cash register, cashless system with RFID / NFC chip and order-taking\nsystem."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To get the full functionality of TiBillet, you need to install these three engines."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["One ",(0,a.jsx)(n.strong,{children:"Fedow"})," for multiple locations (RSA based PoA blockchain)"]}),"\n",(0,a.jsxs)(n.li,{children:["One ",(0,a.jsx)(n.strong,{children:"Lespass"})," for multiple locations (Django multi-tenant)"]}),"\n",(0,a.jsxs)(n.li,{children:["One ",(0,a.jsx)(n.strong,{children:"Laboutik"})," per location, which connects to a fedow and a lespass to join a federation."]}),"\n"]}),"\n",(0,a.jsx)(n.admonition,{title:"Exemple",type:"note",children:(0,a.jsxs)(n.p,{children:["if you want to use the same NFC card to manage cashless at 2 festivals and 3 community caf\xe9s, you'll need 5\n",(0,a.jsx)(n.strong,{children:"LabouTik"}),", but only one ",(0,a.jsx)(n.strong,{children:"Fedow"})," for the federated asset, and one ",(0,a.jsx)(n.strong,{children:"Lespass"})," for the webpage of each venue.\nThe same applies if you want to manage a co-working subscription for a\ngroup of ",(0,a.jsx)(n.em,{children:"third place"})," in a given city/region/department."]})}),"\n",(0,a.jsx)(n.h1,{id:"requirements-",children:"Requirements :"}),"\n",(0,a.jsxs)(n.p,{children:["For security and performance reasons, we recommend that you separate the ",(0,a.jsx)(n.strong,{children:"Lespass"})," public area from the ",(0,a.jsx)(n.strong,{children:"LaBoutik"}),"\ncheckout and ",(0,a.jsx)(n.strong,{children:"Fedow"})," federation engines."]}),"\n",(0,a.jsx)(n.p,{children:"For dev' and test purpose, you can install everything on one VPS. Here the minimal requirements :"}),"\n",(0,a.jsx)(n.p,{children:"A linux server with :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"2 vCpu / 4Go Ram"}),"\n",(0,a.jsx)(n.li,{children:"Docker & Compose"}),"\n",(0,a.jsx)(n.li,{children:"1 domain with wildcard capacity"}),"\n",(0,a.jsx)(n.li,{children:"A Reverse proxy who handle 443 and 80 port (we use Traefik)"}),"\n",(0,a.jsxs)(n.li,{children:["A valid Stripe account with ",(0,a.jsx)(n.em,{children:"Stripe connect"})]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"You can find some ressource (in french) here :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://codecommun.coop/blog/sysadmin-mon-chaton-part1",children:"https://codecommun.coop/blog/sysadmin-mon-chaton-part1"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://codecommun.coop/blog/sysadmin-mon-chaton-part2",children:"https://codecommun.coop/blog/sysadmin-mon-chaton-part2"})}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"If you're ready for adventure, create a new folder \"TiBillet\", and let's start by installing a Fedow!"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir TiBillet && cd TiBillet\n"})}),"\n",(0,a.jsx)(n.h3,{id:"generate-many-fernet-key-and-django-secret-key",children:"Generate many Fernet key and django secret key"}),"\n",(0,a.jsx)(n.p,{children:"You will need 3 couple of Fernet/Django secret key."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Generate fernet key with the fedow image :\n# Choose one line and fill the .env file\ndocker run --rm tibillet/fedow poetry run python3 -c \"from cryptography.fernet import Fernet; print('\\n'.join([Fernet.generate_key().decode('utf-8') for i in range(0,30)]))\"\n\n# Generate django secret key with the fedow image :\n# Choose one line and fill the .env file\ndocker run --rm tibillet/fedow poetry run python3 -c \"from django.core.management.utils import get_random_secret_key; print('\\n'.join([get_random_secret_key() for i in range(0,30)]))\"\n"})}),"\n",(0,a.jsx)(n.h2,{id:"fedow--one-ring-to-rule-them-all",children:"Fedow : One ring to rule them all"}),"\n",(0,a.jsx)(n.h3,{id:"environment",children:"Environment"}),"\n",(0,a.jsx)(n.p,{children:"Create the Fedow folder :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir -p TiBillet/Fedow && cd TiBillet/Fedow\n"})}),"\n",(0,a.jsx)(n.p,{children:"Create .env file and fill it with your own variable"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano .env\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Create .env and fill with :\nSECRET_KEY='' # see upper to create one\nFERNET_KEY='' # see upper to create one\nDOMAIN='' # ex : fedow.domain.com\nSTRIPE_KEY='' # from your stripe account\n"})}),"\n",(0,a.jsx)(n.p,{children:"Create frontend and backend network with docker if needed"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker network create frontend\ndocker network create fedow_backend\n"})}),"\n",(0,a.jsx)(n.p,{children:"Prepare the logs, assets and database folder"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"mkdir logs www database\n"})}),"\n",(0,a.jsx)(n.h3,{id:"nginx-rules",children:"Nginx rules"}),"\n",(0,a.jsx)(n.p,{children:"Cr\xe9ate the nginx conf file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"nano nginx/django.conf\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"server {\n listen 80;\n server_name localhost;\n\n access_log /logs/nginxAccess.log;\n error_log /logs/nginxError.log;\n\n location /static {\n root /www;\n }\n\n location /media {\n root /www;\n }\n\n location / {\n # everything is passed to Gunicorn\n proxy_pass http://fedow_django:8000;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header Host $host;\n proxy_redirect off;\n }\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose",children:"Docker compose"}),"\n",(0,a.jsx)(n.p,{children:"create the docker compose file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano docker-compose.yml\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'services:\n fedow_memcached:\n image: memcached:1.6\n container_name: fedow_memcached\n hostname: fedow_memcached\n restart: always\n networks:\n - fedow_backend\n\n fedow_django:\n image: tibillet/fedow:latest\n container_name: fedow_django\n hostname: fedow_django\n restart: always\n env_file: .env\n user: fedow\n links:\n - fedow_memcached:memcached\n volumes:\n - ./database:/home/fedow/Fedow/database\n - ./www:/home/fedow/Fedow/www\n - ./logs:/home/fedow/Fedow/logs\n networks:\n - fedow_backend\n\n # only useful for dev purpose :\n extra_hosts:\n - "fedow.tibillet.localhost:172.17.0.1"\n - "lespass.tibillet.localhost:172.17.0.1"\n - "cashless.tibillet.localhost:172.17.0.1"\n\n\n fedow_nginx:\n image: nginx:latest\n restart: always\n container_name: fedow_nginx\n hostname: fedow_nginx\n volumes:\n - ./www:/www\n - ./logs:/logs\n - ./nginx:/etc/nginx/conf.d\n depends_on:\n - fedow_django\n links:\n - fedow_django:fedow_django\n labels:\n - traefik.enable=true\n - traefik.docker.network=frontend\n - traefik.http.routers.fedow_nginx.tls.certresolver=myresolver\n - traefik.http.routers.fedow_nginx.rule=Host(`$DOMAIN`)\n networks:\n - frontend\n - fedow_backend\n\n\nnetworks:\n frontend:\n external: true\n fedow_backend:\n'})}),"\n",(0,a.jsx)(n.h3,{id:"launch-the-rocket-",children:"Launch the rocket !"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose up -d \n# To see the logs :\ndocker compose logs -f \n"})}),"\n",(0,a.jsxs)(n.p,{children:["And check to ",(0,a.jsx)(n.code,{children:"https:///dashboard"})]}),"\n",(0,a.jsx)(n.p,{children:"Congratulation, You own your own blockchain ;)"}),"\n",(0,a.jsx)(n.h3,{id:"backup",children:"Backup"}),"\n",(0,a.jsx)(n.p,{children:"To make a backup, simply back up the database folder regularly."}),"\n",(0,a.jsx)(n.h2,{id:"lespass--multi-tenant-engine-for-membership-ticketing-and-online-cashless-refill",children:"Lespass : Multi tenant engine for membership, ticketing and online cashless refill."}),"\n",(0,a.jsxs)(n.p,{children:["Lespass is a multi-tenant engine. You can run it with or without a wildcard certificate. See\nthe ",(0,a.jsx)(n.a,{href:"https://codecommun.coop/",children:"Code Commun blog"})," for\nexemple : ",(0,a.jsx)(n.a,{href:"https://codecommun.coop/blog/sysadmin-mon-chaton-part2",children:"https://codecommun.coop/blog/sysadmin-mon-chaton-part2"})]}),"\n",(0,a.jsx)(n.p,{children:"In this tutoriel, we work as a mono tenant instance. Contact us if you want start TiBillet as SaaS multi tenant."}),"\n",(0,a.jsx)(n.h3,{id:"environment-1",children:"Environment"}),"\n",(0,a.jsx)(n.p,{children:"Create the Lespass folder :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir TiBillet/Lespass && cd TiBillet/Lespass\n"})}),"\n",(0,a.jsx)(n.p,{children:"Prepare the logs, assets, backup and database folder"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir logs www backup database nginx\n"})}),"\n",(0,a.jsx)(n.p,{children:"create .env file and fill it with your own variable"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano .env\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Secret\nDJANGO_SECRET='' # see upper to create one\nFERNET_KEY='' # see upper to create one\n\nSTRIPE_KEY='' # from your stripe account\n# or \nSTRIPE_KEY_TEST=''\nSTRIPE_TEST=0 # set to 1 for use stripe test env\n\n# Database\nPOSTGRES_USER='lespass_postgres_user'\nPOSTGRES_PASSWORD='' # strong ! generate a new fernet for exemple.\nPOSTGRES_DB='lespass'\n\nADMIN_EMAIL=''\nTIME_ZONE='Europe/Paris' # or where you are\n\nFEDOW_DOMAIN='' # the same as Fedow\n\nDOMAIN='' # for the wildcard : without subdomain ! ex : tibillet.coop, not lespass.tibillet.coop\nPUBLIC='TiBillet Coop.' # The name of the root instance\nSUB='' # the sub domain of your first place ex : if 'festival', it will be accessible on https://festival.tibillet.coop\nMETA='' # the federated agenda for all events on all tenants. If 'agenda', it will be accessible, for exemple, on https://agenda.tibillet.coop\n\n# For transactionnal email : \nEMAIL_HOST=''\nEMAIL_PORT=''\nEMAIL_HOST_USER=''\nEMAIL_HOST_PASSWORD=''\n\n# Change only if needed :\nCELERY_BROKER='redis://redis:6379/0'\nCELERY_BACKEND='redis://redis:6379/0'\n"})}),"\n",(0,a.jsx)(n.h3,{id:"nginx-rules-1",children:"Nginx rules"}),"\n",(0,a.jsx)(n.p,{children:"Create the file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano nginx/lespass.conf\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'server {\n\n listen 80;\n server_name localhost;\n\n access_log /logs/nginxAccess.log;\n error_log /logs/nginxError.log;\n\n location /static {\n root /www;\n }\n\n location /media {\n root /www;\n }\n\n location / {\n # everything is passed to Gunicorn\n proxy_pass http://lespass_django:8002;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header Host $host;\n proxy_redirect off;\n proxy_http_version 1.1;\n client_max_body_size 4M;\n proxy_buffer_size 16k;\n proxy_buffers 32 16k;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-Host $server_name;\n }\n}\n'})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose-1",children:"Docker compose"}),"\n",(0,a.jsx)(n.p,{children:"create the docker compose file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano docker-compose.yml\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'services:\n lespass_postgres:\n image: postgres:13-bookworm\n restart: always\n container_name: lespass_postgres\n hostname: lespass_postgres\n volumes:\n - ./database:/var/lib/postgresql/data\n env_file: .env\n networks:\n - lespass_backend\n\n\n lespass_memcached:\n image: memcached:1.6\n container_name: lespass_memcached\n hostname: lespass_memcached\n restart: always\n networks:\n - lespass_backend\n\n\n lespass_redis:\n container_name: lespass_redis\n hostname: lespass_redis\n image: redis:7.2.3-bookworm\n restart: always\n networks:\n - lespass_backend\n\n lespass_django:\n image: tibillet/lespass:latest\n restart: always\n container_name: lespass_django\n hostname: lespass_django\n volumes:\n - ./www:/DjangoFiles/www\n - ./logs:/DjangoFiles/logs\n - ./backup:/Backup\n - ./ssh:/home/tibillet/.ssh # if you want ssh borgbackup \n env_file: .env\n depends_on:\n - lespass_postgres\n - lespass_redis\n - lespass_memcached\n links:\n - lespass_postgres:postgres\n - lespass_redis:redis\n - lespass_memcached:memcached\n networks:\n - lespass_backend\n # only useful for dev purpose :\n extra_hosts:\n - "fedow.tibillet.localhost:172.17.0.1"\n - "lespass.tibillet.localhost:172.17.0.1"\n - "cashless.tibillet.localhost:172.17.0.1"\n \n lespass_celery:\n image: tibillet/lespass:latest\n restart: always\n container_name: lespass_celery\n hostname: lespass_celery\n env_file: .env\n depends_on:\n - lespass_postgres\n - lespass_redis\n - lespass_memcached\n links:\n - lespass_postgres:postgres\n - lespass_redis:redis\n - lespass_memcached:memcached\n command: "poetry run celery -A TiBillet worker -l INFO"\n networks:\n - lespass_backend\n\n\n lespass_nginx:\n image: nginx:latest\n container_name: lespass_nginx\n hostname: lespass_nginx\n restart: always\n links:\n - lespass_django:lespass_django\n volumes:\n - ./www:/www\n - ./logs:/logs\n - ./nginx:/etc/nginx/conf.d\n labels:\n - traefik.enable=true\n - traefik.docker.network=frontend\n - traefik.http.routers.lespass.tls.certresolver=myresolver\n - traefik.http.routers.lespass.rule=Host(`$DOMAIN`) || Host(`www.$DOMAIN`) || Host(`$META.$DOMAIN`) || Host(`$SUB.$DOMAIN`)\n networks:\n - frontend\n - lespass_backend\n\nnetworks:\n frontend:\n external: true\n lespass_backend:\n'})}),"\n",(0,a.jsx)(n.h3,{id:"launch-the-rocket--1",children:"Launch the rocket !"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose up -d \n# To see the logs :\ndocker compose logs -f \n"})}),"\n",(0,a.jsxs)(n.p,{children:["And check to ",(0,a.jsx)(n.code,{children:"https://."})]}),"\n",(0,a.jsx)(n.p,{children:"Congratulation !"}),"\n",(0,a.jsx)(n.h3,{id:"update",children:"Update"}),"\n",(0,a.jsx)(n.p,{children:"Just update the container :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose pull\ndocker compose up -d\n"})}),"\n",(0,a.jsx)(n.h3,{id:"backups",children:"Backups"}),"\n",(0,a.jsx)(n.p,{children:"TODO : Create a blog note for borgbackup, cron and postgres dump."}),"\n",(0,a.jsx)(n.h2,{id:"laboutik--cash-and-cashless-registrer-nfc-card-reader-for-cashless-membership-or-badge-scan",children:"LaBoutik : Cash and cashless registrer. NFC card reader for cashless, membership or badge scan."}),"\n",(0,a.jsx)(n.h3,{id:"environment-2",children:"Environment"}),"\n",(0,a.jsx)(n.p,{children:"Create the Lespass folder :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir Laboutik && cd Laboutik\n"})}),"\n",(0,a.jsx)(n.p,{children:"Prepare the logs, assets, backup and database folder"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir logs www backup database nginx ssh\n"})}),"\n",(0,a.jsx)(n.p,{children:"create .env file and fill it with your own variable"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano .env\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"DJANGO_SECRET=''\nFERNET_KEY=''\n\nPOSTGRES_USER='laboutik_user'\nPOSTGRES_DB='laboutik'\nPOSTGRES_PASSWORD=''\n\n# The domain of this instance ex : 'cashless.tibillet.localhost'\nDOMAIN=''\n\n# admin email\nADMIN_EMAIL=''\n\n# For transactionnal email :\nEMAIL_HOST=\"\"\nEMAIL_PORT=\"\"\nEMAIL_HOST_USER=\"\"\nEMAIL_HOST_PASSWORD=\"\"\n\nTIME_ZONE='Europe/Paris'\nLANGUAGE_CODE='fr'\n\n########## FOR CASHLESS ##########\n\n# No Cashless if no Fedow nor Lespass tenant manager\nFEDOW_URL='' # ex : https://fedow.tibillet.localhost/\nLESPASS_TENANT_URL='' # ex : https://festival.tibillet.localhost/\n\n# The name of your cashless asset ex : TestCoin, FestivalCoin, etc ....\nMAIN_ASSET_NAME='' \n\n########## FOR SAVE CRON TASK ##########dex\n\n# can be empty if you don't backup\nBORG_REPO=''\nBORG_PASSPHRASE=''\n"})}),"\n",(0,a.jsx)(n.h3,{id:"nginx-rules-2",children:"Nginx rules"}),"\n",(0,a.jsx)(n.p,{children:"Create the file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano nginx/laboutik.conf\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"server {\n\n listen 80;\n server_name localhost;\n\n access_log /DjangoFiles/logs/nginxAccess.log;\n error_log /DjangoFiles/logs/nginxError.log;\n\n # Static and media g\xe9r\xe9 par Nginx :\n location /static {\n root /DjangoFiles/www;\n }\n\n location /media {\n root /DjangoFiles/www;\n }\n\n location / {\n # everything is passed to Gunicorn/Django\n proxy_pass http://laboutik_django:8000;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header Host $host;\n proxy_redirect off;\n }\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose-2",children:"Docker compose"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'services:\n laboutik_postgres:\n image: postgres:11.5-alpine\n restart: always\n env_file: .env\n container_name: laboutik_postgres\n hostname: laboutik_postgres\n volumes:\n - ./database/data:/var/lib/postgresql/data\n networks:\n - laboutik_backend\n\n laboutik_memcached:\n image: memcached:1.6\n container_name: laboutik_memcached\n hostname: laboutik_memcached\n restart: always\n networks:\n - laboutik_backend\n\n laboutik_redis:\n image: redis:6-alpine\n restart: always\n env_file: .env\n container_name: laboutik_redis\n hostname: laboutik_redis\n networks:\n - laboutik_backend\n\n laboutik_django:\n image: tibillet/laboutik:latest\n restart: always\n env_file: .env\n container_name: laboutik_django\n hostname: laboutik_django\n volumes:\n - ./www:/DjangoFiles/www\n - ./logs:/DjangoFiles/logs\n - ./backup:/Backup\n - ./ssh:/home/tibillet/.ssh # if you want to use borgbackup with ssh\n links:\n - laboutik_postgres:postgres\n - laboutik_redis:redis\n - laboutik_memcached:memcached\n depends_on:\n - laboutik_postgres\n - laboutik_redis\n - laboutik_memcached\n networks:\n - laboutik_backend\n # only useful for dev purpose :\n extra_hosts:\n - "fedow.tibillet.localhost:172.17.0.1"\n - "lespass.tibillet.localhost:172.17.0.1"\n - "cashless.tibillet.localhost:172.17.0.1"\n\n\n laboutik_celery:\n image: tibillet/laboutik:latest\n restart: always\n env_file: .env\n container_name: laboutik_celery\n hostname: laboutik_celery\n volumes:\n - ./www:/DjangoFiles/www\n - ./logs:/DjangoFiles/logs\n - ./backup:/Backup\n links:\n - laboutik_postgres:postgres\n - laboutik_redis:redis\n - laboutik_memcached:memcached\n depends_on:\n - laboutik_postgres\n - laboutik_redis\n - laboutik_memcached\n networks:\n - laboutik_backend\n command: "bash start_celery.sh"\n\n laboutik_nginx:\n image: nginx\n restart: always\n container_name: laboutik_nginx\n hostname: laboutik_nginx\n depends_on:\n - laboutik_django\n links:\n - laboutik_django:laboutik_django\n volumes:\n - ./www:/DjangoFiles/www\n - ./logs:/DjangoFiles/logs\n - ./nginx:/etc/nginx/conf.d\n labels:\n - traefik.enable=true\n - traefik.docker.network=frontend\n - traefik.http.routers.laboutik_nginx.tls.certresolver=myresolver\n - traefik.http.routers.laboutik_nginx.rule=Host(`${DOMAIN}`)\n networks:\n - frontend\n - laboutik_backend\n\nnetworks:\n frontend:\n external: true\n laboutik_backend:\n'})}),"\n",(0,a.jsx)(n.h3,{id:"launch-the-rocket--2",children:"Launch the rocket !"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose up -d \n# To see the logs :\ndocker compose logs -f \n"})}),"\n",(0,a.jsx)(n.p,{children:"You should have received an e-mail inviting you to create your administrator password."}),"\n",(0,a.jsx)(n.p,{children:"Congratulations! You can now read\nthrough the documentation and come and see us on discord to tell us you've succeeded!"}),"\n",(0,a.jsx)(n.h3,{id:"update-1",children:"Update"}),"\n",(0,a.jsx)(n.p,{children:"Just pull the latest docker image release :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose pull\ndocker compose up -d \n"})}),"\n",(0,a.jsx)(n.h3,{id:"backups-1",children:"Backups"}),"\n",(0,a.jsx)(n.p,{children:"TODO: A note blog for Syncthing, Borgbackup, Crontab and postgres dump."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>l});var a=s(6540);const o={},r=a.createContext(o);function t(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3f20655a.8d5c49d2.js b/assets/js/3f20655a.8d5c49d2.js deleted file mode 100644 index d8a56de1..00000000 --- a/assets/js/3f20655a.8d5c49d2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8703],{7374:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>i,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var a=s(4848),o=s(8453);const r={sidebar_position:100,slug:"docker_install",title:"Self hosted TiBillet instances",description:"self hosted TiBillet tools with docker",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas"},t=void 0,l={id:"install/server_install",title:"Self hosted TiBillet instances",description:"self hosted TiBillet tools with docker",source:"@site/docs/install/server_install.md",sourceDirName:"install",slug:"/install/docker_install",permalink:"/docs/install/docker_install",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/install/server_install.md",tags:[],version:"current",sidebarPosition:100,frontMatter:{sidebar_position:100,slug:"docker_install",title:"Self hosted TiBillet instances",description:"self hosted TiBillet tools with docker",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Assembly 10inch",permalink:"/docs/install/Raspberry Box/Hardware/10inch"},next:{title:"Contributing",permalink:"/docs/category/contributing"}},i={},c=[{value:"Legal warning",id:"legal-warning",level:2},{value:"Introduction to Engines",id:"introduction-to-engines",level:2},{value:"Generate many Fernet key and django secret key",id:"generate-many-fernet-key-and-django-secret-key",level:3},{value:"Fedow : One ring to rule them all",id:"fedow--one-ring-to-rule-them-all",level:2},{value:"Environment",id:"environment",level:3},{value:"Nginx rules",id:"nginx-rules",level:3},{value:"Docker compose",id:"docker-compose",level:3},{value:"Launch the rocket !",id:"launch-the-rocket-",level:3},{value:"Backup",id:"backup",level:3},{value:"Lespass : Multi tenant engine for membership, ticketing and online cashless refill.",id:"lespass--multi-tenant-engine-for-membership-ticketing-and-online-cashless-refill",level:2},{value:"Environment",id:"environment-1",level:3},{value:"Nginx rules",id:"nginx-rules-1",level:3},{value:"Docker compose",id:"docker-compose-1",level:3},{value:"Launch the rocket !",id:"launch-the-rocket--1",level:3},{value:"Update",id:"update",level:3},{value:"Backups",id:"backups",level:3},{value:"LaBoutik : Cash and cashless registrer. NFC card reader for cashless, membership or badge scan.",id:"laboutik--cash-and-cashless-registrer-nfc-card-reader-for-cashless-membership-or-badge-scan",level:2},{value:"Environment",id:"environment-2",level:3},{value:"Nginx rules",id:"nginx-rules-2",level:3},{value:"Docker compose",id:"docker-compose-2",level:3},{value:"Launch the rocket !",id:"launch-the-rocket--2",level:3},{value:"Update",id:"update-1",level:3},{value:"Backups",id:"backups-1",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"legal-warning",children:"Legal warning"}),"\n",(0,a.jsxs)(n.admonition,{type:"danger",children:[(0,a.jsxs)(n.p,{children:["Since January 1, 2018, in order to combat VAT fraud, all VAT-registered professionals recording\ncustomer payments using one of these software or systems are required to use secure, ",(0,a.jsx)(n.strong,{children:"certified hardware"}),"."]}),(0,a.jsxs)(n.p,{children:["A measure enshrined in\n",(0,a.jsx)(n.a,{href:"https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042914666",children:"Article 286 3\xb0 bis of the General Tax Code"}),"\nand initially stemming from the 2016 Finance Act,\nwhen ",(0,a.jsx)(n.a,{href:"https://www.april.org/reglementation-des-systemes-de-caisse-les-logiciels-libres-de-mieux-en-mieux-pris-en-compte-par-berc",children:"April"}),"\nbecame involved in promoting and defending open-source\nsoftware with cashiering functions."]}),(0,a.jsxs)(n.p,{children:["If you're using ",(0,a.jsx)(n.a,{href:"/docs/presentation/tarifs",children:"TiBillet's Coop' and SaaS model"}),", you don't need to worry about any of\nthis : We provide you with the certificate."]}),(0,a.jsx)(n.p,{children:"But if you self-host your own cash register instance, you legally become the publisher, and we can't provide you with\nany legal documents to present to the tax authorities."}),(0,a.jsx)(n.p,{children:"I imagine that if you're here, it's to install it yourself ;)"}),(0,a.jsx)(n.p,{children:"Here you are informed!"})]}),"\n",(0,a.jsx)(n.p,{children:"More information here (in french) :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://www.economie.gouv.fr/entreprises/professionnels-logiciels-caisse",children:"https://www.economie.gouv.fr/entreprises/professionnels-logiciels-caisse"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://www.april.org/reglementation-des-systemes-de-caisse-les-logiciels-libres-de-mieux-en-mieux-pris-en-compte-par-berc",children:"https://www.april.org/reglementation-des-systemes-de-caisse-les-logiciels-libres-de-mieux-en-mieux-pris-en-compte-par-berc"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042914666",children:"https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042914666"})}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"introduction-to-engines",children:"Introduction to Engines"}),"\n",(0,a.jsx)(n.p,{children:"Tibillet is a software suite composed of several interoperable building blocks. The engines are :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"https://github.com/TiBillet/Fedow",children:"Fedow"}),": Federated and open wallet, the federation engine. A PoA and Rsa key based\nblockchain to\nshare membership assets, local currencies and\ntime for several Lespass and LaBoutik instances."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"https://github.com/TiBillet/Lespass",children:"Lespass"}),": Ticketing, booking, membership and landing page engines. Usefull too\nfor refill online with self scanned qrcode unique on each card."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"https://github.com/TiBillet/LaBoutik",children:"LaBoutik"}),": Cash register, cashless system with RFID / NFC chip and order-taking\nsystem."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"To get the full functionality of TiBillet, you need to install these three engines."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["One ",(0,a.jsx)(n.strong,{children:"Fedow"})," for multiple locations (RSA based PoA blockchain)"]}),"\n",(0,a.jsxs)(n.li,{children:["One ",(0,a.jsx)(n.strong,{children:"Lespass"})," for multiple locations (Django multi-tenant)"]}),"\n",(0,a.jsxs)(n.li,{children:["One ",(0,a.jsx)(n.strong,{children:"Laboutik"})," per location, which connects to a fedow and a lespass to join a federation."]}),"\n"]}),"\n",(0,a.jsx)(n.admonition,{title:"Exemple",type:"note",children:(0,a.jsxs)(n.p,{children:["if you want to use the same NFC card to manage cashless at 2 festivals and 3 community caf\xe9s, you'll need 5\n",(0,a.jsx)(n.strong,{children:"LabouTik"}),", but only one ",(0,a.jsx)(n.strong,{children:"Fedow"})," for the federated asset, and one ",(0,a.jsx)(n.strong,{children:"Lespass"})," for the webpage of each venue.\nThe same applies if you want to manage a co-working subscription for a\ngroup of ",(0,a.jsx)(n.em,{children:"third place"})," in a given city/region/department."]})}),"\n",(0,a.jsx)(n.h1,{id:"requirements-",children:"Requirements :"}),"\n",(0,a.jsxs)(n.p,{children:["For security and performance reasons, we recommend that you separate the ",(0,a.jsx)(n.strong,{children:"Lespass"})," public area from the ",(0,a.jsx)(n.strong,{children:"LaBoutik"}),"\ncheckout and ",(0,a.jsx)(n.strong,{children:"Fedow"})," federation engines."]}),"\n",(0,a.jsx)(n.p,{children:"For dev' and test purpose, you can install everything on one VPS. Here the minimal requirements :"}),"\n",(0,a.jsx)(n.p,{children:"A linux server with :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"2 vCpu / 4Go Ram"}),"\n",(0,a.jsx)(n.li,{children:"Docker & Compose"}),"\n",(0,a.jsx)(n.li,{children:"1 domain with wildcard capacity"}),"\n",(0,a.jsx)(n.li,{children:"A Reverse proxy who handle 443 and 80 port (we use Traefik)"}),"\n",(0,a.jsxs)(n.li,{children:["A valid Stripe account with ",(0,a.jsx)(n.em,{children:"Stripe connect"})]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"You can find some ressource (in french) here :"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://codecommun.coop/blog/sysadmin-mon-chaton-part1",children:"https://codecommun.coop/blog/sysadmin-mon-chaton-part1"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://codecommun.coop/blog/sysadmin-mon-chaton-part2",children:"https://codecommun.coop/blog/sysadmin-mon-chaton-part2"})}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"If you're ready for adventure, create a new folder \"TiBillet\", and let's start by installing a Fedow!"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir TiBillet && cd TiBillet\n"})}),"\n",(0,a.jsx)(n.h3,{id:"generate-many-fernet-key-and-django-secret-key",children:"Generate many Fernet key and django secret key"}),"\n",(0,a.jsx)(n.p,{children:"You will need 3 couple of Fernet/Django secret key."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Generate fernet key with the fedow image :\n# Choose one line and fill the .env file\ndocker run --rm tibillet/fedow poetry run python3 -c \"from cryptography.fernet import Fernet; print('\\n'.join([Fernet.generate_key().decode('utf-8') for i in range(0,30)]))\"\n\n# Generate django secret key with the fedow image :\n# Choose one line and fill the .env file\ndocker run --rm tibillet/fedow poetry run python3 -c \"from django.core.management.utils import get_random_secret_key; print('\\n'.join([get_random_secret_key() for i in range(0,30)]))\"\n"})}),"\n",(0,a.jsx)(n.h2,{id:"fedow--one-ring-to-rule-them-all",children:"Fedow : One ring to rule them all"}),"\n",(0,a.jsx)(n.h3,{id:"environment",children:"Environment"}),"\n",(0,a.jsx)(n.p,{children:"Create the Fedow folder :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir -p TiBillet/Fedow && cd TiBillet/Fedow\n"})}),"\n",(0,a.jsx)(n.p,{children:"Create .env file and fill it with your own variable"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano .env\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Create .env and fill with :\nSECRET_KEY='' # see upper to create one\nFERNET_KEY='' # see upper to create one\nDOMAIN='' # ex : fedow.domain.com\nSTRIPE_KEY='' # from your stripe account\n"})}),"\n",(0,a.jsx)(n.p,{children:"Create frontend and backend network with docker if needed"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker network create frontend\ndocker network create fedow_backend\n"})}),"\n",(0,a.jsx)(n.p,{children:"Prepare the logs, assets and database folder"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"mkdir logs www database\n"})}),"\n",(0,a.jsx)(n.h3,{id:"nginx-rules",children:"Nginx rules"}),"\n",(0,a.jsx)(n.p,{children:"Cr\xe9ate the nginx conf file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"nano nginx/django.conf\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"server {\n listen 80;\n server_name localhost;\n\n access_log /logs/nginxAccess.log;\n error_log /logs/nginxError.log;\n\n location /static {\n root /www;\n }\n\n location /media {\n root /www;\n }\n\n location / {\n # everything is passed to Gunicorn\n proxy_pass http://fedow_django:8000;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header Host $host;\n proxy_redirect off;\n }\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose",children:"Docker compose"}),"\n",(0,a.jsx)(n.p,{children:"create the docker compose file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano docker-compose.yml\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'services:\n fedow_memcached:\n image: memcached:1.6\n container_name: fedow_memcached\n hostname: fedow_memcached\n restart: always\n networks:\n - fedow_backend\n\n fedow_django:\n image: tibillet/fedow:latest\n container_name: fedow_django\n hostname: fedow_django\n restart: always\n env_file: .env\n user: fedow\n links:\n - fedow_memcached:memcached\n volumes:\n - ./database:/home/fedow/Fedow/database\n - ./www:/home/fedow/Fedow/www\n - ./logs:/home/fedow/Fedow/logs\n networks:\n - fedow_backend\n\n # only useful for dev purpose :\n extra_hosts:\n - "fedow.tibillet.localhost:172.17.0.1"\n - "lespass.tibillet.localhost:172.17.0.1"\n - "cashless.tibillet.localhost:172.17.0.1"\n\n\n fedow_nginx:\n image: nginx:latest\n restart: always\n container_name: fedow_nginx\n hostname: fedow_nginx\n volumes:\n - ./www:/www\n - ./logs:/logs\n - ./nginx:/etc/nginx/conf.d\n depends_on:\n - fedow_django\n links:\n - fedow_django:fedow_django\n labels:\n - traefik.enable=true\n - traefik.docker.network=frontend\n - traefik.http.routers.fedow_nginx.tls.certresolver=myresolver\n - traefik.http.routers.fedow_nginx.rule=Host(`$DOMAIN`)\n networks:\n - frontend\n - fedow_backend\n\n\nnetworks:\n frontend:\n external: true\n fedow_backend:\n'})}),"\n",(0,a.jsx)(n.h3,{id:"launch-the-rocket-",children:"Launch the rocket !"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose up -d \n# To see the logs :\ndocker compose logs -f \n"})}),"\n",(0,a.jsxs)(n.p,{children:["And check to ",(0,a.jsx)(n.code,{children:"https:///dashboard"})]}),"\n",(0,a.jsx)(n.p,{children:"Congratulation, You own your own blockchain ;)"}),"\n",(0,a.jsx)(n.h3,{id:"backup",children:"Backup"}),"\n",(0,a.jsx)(n.p,{children:"To make a backup, simply back up the database folder regularly."}),"\n",(0,a.jsx)(n.h2,{id:"lespass--multi-tenant-engine-for-membership-ticketing-and-online-cashless-refill",children:"Lespass : Multi tenant engine for membership, ticketing and online cashless refill."}),"\n",(0,a.jsxs)(n.p,{children:["Lespass is a multi-tenant engine. You can run it with or without a wildcard certificate. See\nthe ",(0,a.jsx)(n.a,{href:"https://codecommun.coop/",children:"Code Commun blog"})," for\nexemple : ",(0,a.jsx)(n.a,{href:"https://codecommun.coop/blog/sysadmin-mon-chaton-part2",children:"https://codecommun.coop/blog/sysadmin-mon-chaton-part2"})]}),"\n",(0,a.jsx)(n.p,{children:"In this tutoriel, we work as a mono tenant instance. Contact us if you want start TiBillet as SaaS multi tenant."}),"\n",(0,a.jsx)(n.h3,{id:"environment-1",children:"Environment"}),"\n",(0,a.jsx)(n.p,{children:"Create the Lespass folder :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir TiBillet/Lespass && cd TiBillet/Lespass\n"})}),"\n",(0,a.jsx)(n.p,{children:"Prepare the logs, assets, backup and database folder"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir logs www backup database nginx\n"})}),"\n",(0,a.jsx)(n.p,{children:"create .env file and fill it with your own variable"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano .env\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Secret\nDJANGO_SECRET='' # see upper to create one\nFERNET_KEY='' # see upper to create one\n\nSTRIPE_KEY='' # from your stripe account\n# or \nSTRIPE_KEY_TEST=''\nSTRIPE_TEST=0 # set to 1 for use stripe test env\n\n# Database\nPOSTGRES_USER='lespass_postgres_user'\nPOSTGRES_PASSWORD='' # strong ! generate a new fernet for exemple.\nPOSTGRES_DB='lespass'\n\nADMIN_EMAIL=''\nTIME_ZONE='Europe/Paris' # or where you are\n\nFEDOW_DOMAIN='' # the same as Fedow\n\nDOMAIN='' # for the wildcard : without subdomain ! ex : tibillet.coop, not lespass.tibillet.coop\nPUBLIC='TiBillet Coop.' # The name of the root instance\nSUB='' # the sub domain of your first place ex : if 'festival', it will be accessible on https://festival.tibillet.coop\nMETA='' # the federated agenda for all events on all tenants. If 'agenda', it will be accessible, for exemple, on https://agenda.tibillet.coop\n\n# For transactionnal email : \nEMAIL_HOST=''\nEMAIL_PORT=''\nEMAIL_HOST_USER=''\nEMAIL_HOST_PASSWORD=''\n\n# Change only if needed :\nCELERY_BROKER='redis://redis:6379/0'\nCELERY_BACKEND='redis://redis:6379/0'\n"})}),"\n",(0,a.jsx)(n.h3,{id:"nginx-rules-1",children:"Nginx rules"}),"\n",(0,a.jsx)(n.p,{children:"Create the file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano nginx/lespass.conf\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'server {\n\n listen 80;\n server_name localhost;\n\n access_log /logs/nginxAccess.log;\n error_log /logs/nginxError.log;\n\n location /static {\n root /www;\n }\n\n location /media {\n root /www;\n }\n\n location / {\n # everything is passed to Gunicorn\n proxy_pass http://lespass_django:8002;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header Host $host;\n proxy_redirect off;\n proxy_http_version 1.1;\n client_max_body_size 4M;\n proxy_buffer_size 16k;\n proxy_buffers 32 16k;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-Host $server_name;\n }\n}\n'})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose-1",children:"Docker compose"}),"\n",(0,a.jsx)(n.p,{children:"create the docker compose file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano docker-compose.yml\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'services:\n lespass_postgres:\n image: postgres:13-bookworm\n restart: always\n container_name: lespass_postgres\n hostname: lespass_postgres\n volumes:\n - ./database:/var/lib/postgresql/data\n env_file: .env\n networks:\n - lespass_backend\n\n\n lespass_memcached:\n image: memcached:1.6\n container_name: lespass_memcached\n hostname: lespass_memcached\n restart: always\n networks:\n - lespass_backend\n\n\n lespass_redis:\n container_name: lespass_redis\n hostname: lespass_redis\n image: redis:7.2.3-bookworm\n restart: always\n networks:\n - lespass_backend\n\n lespass_django:\n image: tibillet/lespass:latest\n restart: always\n container_name: lespass_django\n hostname: lespass_django\n volumes:\n - ./www:/DjangoFiles/www\n - ./logs:/DjangoFiles/logs\n - ./backup:/Backup\n - ./ssh:/home/tibillet/.ssh # if you want ssh borgbackup \n env_file: .env\n depends_on:\n - lespass_postgres\n - lespass_redis\n - lespass_memcached\n links:\n - lespass_postgres:postgres\n - lespass_redis:redis\n - lespass_memcached:memcached\n networks:\n - lespass_backend\n # only useful for dev purpose :\n extra_hosts:\n - "fedow.tibillet.localhost:172.17.0.1"\n - "lespass.tibillet.localhost:172.17.0.1"\n - "cashless.tibillet.localhost:172.17.0.1"\n \n lespass_celery:\n image: tibillet/lespass:latest\n restart: always\n container_name: lespass_celery\n hostname: lespass_celery\n env_file: .env\n depends_on:\n - lespass_postgres\n - lespass_redis\n - lespass_memcached\n links:\n - lespass_postgres:postgres\n - lespass_redis:redis\n - lespass_memcached:memcached\n command: "poetry run celery -A TiBillet worker -l INFO"\n networks:\n - lespass_backend\n\n\n lespass_nginx:\n image: nginx:latest\n container_name: lespass_nginx\n hostname: lespass_nginx\n restart: always\n links:\n - lespass_django:lespass_django\n volumes:\n - ./www:/www\n - ./logs:/logs\n - ./nginx:/etc/nginx/conf.d\n labels:\n - traefik.enable=true\n - traefik.docker.network=frontend\n - traefik.http.routers.lespass.tls.certresolver=myresolver\n - traefik.http.routers.lespass.rule=Host(`$DOMAIN`) || Host(`www.$DOMAIN`) || Host(`$META.$DOMAIN`) || Host(`$SUB.$DOMAIN`)\n networks:\n - frontend\n - lespass_backend\n\nnetworks:\n frontend:\n external: true\n lespass_backend:\n'})}),"\n",(0,a.jsx)(n.h3,{id:"launch-the-rocket--1",children:"Launch the rocket !"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose up -d \n# To see the logs :\ndocker compose logs -f \n"})}),"\n",(0,a.jsxs)(n.p,{children:["And check to ",(0,a.jsx)(n.code,{children:"https://."})]}),"\n",(0,a.jsx)(n.p,{children:"Congratulation !"}),"\n",(0,a.jsx)(n.h3,{id:"update",children:"Update"}),"\n",(0,a.jsx)(n.p,{children:"Just update the container :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose pull\ndocker compose up -d\n"})}),"\n",(0,a.jsx)(n.h3,{id:"backups",children:"Backups"}),"\n",(0,a.jsx)(n.p,{children:"TODO : Create a blog note for borgbackup, cron and postgres dump."}),"\n",(0,a.jsx)(n.h2,{id:"laboutik--cash-and-cashless-registrer-nfc-card-reader-for-cashless-membership-or-badge-scan",children:"LaBoutik : Cash and cashless registrer. NFC card reader for cashless, membership or badge scan."}),"\n",(0,a.jsx)(n.h3,{id:"environment-2",children:"Environment"}),"\n",(0,a.jsx)(n.p,{children:"Create the Lespass folder :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir Laboutik && cd Laboutik\n"})}),"\n",(0,a.jsx)(n.p,{children:"Prepare the logs, assets, backup and database folder"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"mkdir logs www backup database nginx ssh\n"})}),"\n",(0,a.jsx)(n.p,{children:"create .env file and fill it with your own variable"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano .env\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"DJANGO_SECRET=''\nFERNET_KEY=''\n\nPOSTGRES_USER='laboutik_user'\nPOSTGRES_DB='laboutik'\nPOSTGRES_PASSWORD=''\n\n# The domain of this instance ex : 'cashless.tibillet.localhost'\nDOMAIN=''\n\n# admin email\nADMIN_EMAIL=''\n\n# For transactionnal email :\nEMAIL_HOST=\"\"\nEMAIL_PORT=\"\"\nEMAIL_HOST_USER=\"\"\nEMAIL_HOST_PASSWORD=\"\"\n\nTIME_ZONE='Europe/Paris'\nLANGUAGE_CODE='fr'\n\n########## FOR CASHLESS ##########\n\n# No Cashless if no Fedow nor Lespass tenant manager\nFEDOW_URL='' # ex : https://fedow.tibillet.localhost/\nLESPASS_TENANT_URL='' # ex : https://festival.tibillet.localhost/\n\n# The name of your cashless asset ex : TestCoin, FestivalCoin, etc ....\nMAIN_ASSET_NAME='' \n\n########## FOR SAVE CRON TASK ##########dex\n\n# can be empty if you don't backup\nBORG_REPO=''\nBORG_PASSPHRASE=''\n"})}),"\n",(0,a.jsx)(n.h3,{id:"nginx-rules-2",children:"Nginx rules"}),"\n",(0,a.jsx)(n.p,{children:"Create the file :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano nginx/laboutik.conf\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"server {\n\n listen 80;\n server_name localhost;\n\n access_log /DjangoFiles/logs/nginxAccess.log;\n error_log /DjangoFiles/logs/nginxError.log;\n\n # Static and media g\xe9r\xe9 par Nginx :\n location /static {\n root /DjangoFiles/www;\n }\n\n location /media {\n root /DjangoFiles/www;\n }\n\n location / {\n # everything is passed to Gunicorn/Django\n proxy_pass http://laboutik_django:8000;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header Host $host;\n proxy_redirect off;\n }\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"docker-compose-2",children:"Docker compose"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'services:\n laboutik_postgres:\n image: postgres:11.5-alpine\n restart: always\n env_file: .env\n container_name: laboutik_postgres\n hostname: laboutik_postgres\n volumes:\n - ./database/data:/var/lib/postgresql/data\n networks:\n - laboutik_backend\n\n laboutik_memcached:\n image: memcached:1.6\n container_name: laboutik_memcached\n hostname: laboutik_memcached\n restart: always\n networks:\n - laboutik_backend\n\n laboutik_redis:\n image: redis:6-alpine\n restart: always\n env_file: .env\n container_name: laboutik_redis\n hostname: laboutik_redis\n networks:\n - laboutik_backend\n\n laboutik_django:\n image: tibillet/laboutik:latest\n restart: always\n env_file: .env\n container_name: laboutik_django\n hostname: laboutik_django\n volumes:\n - ./www:/DjangoFiles/www\n - ./logs:/DjangoFiles/logs\n - ./backup:/Backup\n - ./ssh:/home/tibillet/.ssh # if you want to use borgbackup with ssh\n links:\n - laboutik_postgres:postgres\n - laboutik_redis:redis\n - laboutik_memcached:memcached\n depends_on:\n - laboutik_postgres\n - laboutik_redis\n - laboutik_memcached\n networks:\n - laboutik_backend\n # only useful for dev purpose :\n extra_hosts:\n - "fedow.tibillet.localhost:172.17.0.1"\n - "lespass.tibillet.localhost:172.17.0.1"\n - "cashless.tibillet.localhost:172.17.0.1"\n\n\n laboutik_celery:\n image: tibillet/laboutik:latest\n restart: always\n env_file: .env\n container_name: laboutik_celery\n hostname: laboutik_celery\n volumes:\n - ./www:/DjangoFiles/www\n - ./logs:/DjangoFiles/logs\n - ./backup:/Backup\n links:\n - laboutik_postgres:postgres\n - laboutik_redis:redis\n - laboutik_memcached:memcached\n depends_on:\n - laboutik_postgres\n - laboutik_redis\n - laboutik_memcached\n networks:\n - laboutik_backend\n command: "bash start_celery.sh"\n\n laboutik_nginx:\n image: nginx\n restart: always\n container_name: laboutik_nginx\n hostname: laboutik_nginx\n depends_on:\n - laboutik_django\n links:\n - laboutik_django:laboutik_django\n volumes:\n - ./www:/DjangoFiles/www\n - ./logs:/DjangoFiles/logs\n - ./nginx:/etc/nginx/conf.d\n labels:\n - traefik.enable=true\n - traefik.docker.network=frontend\n - traefik.http.routers.laboutik_nginx.tls.certresolver=myresolver\n - traefik.http.routers.laboutik_nginx.rule=Host(`${DOMAIN}`)\n networks:\n - frontend\n - laboutik_backend\n\nnetworks:\n frontend:\n external: true\n laboutik_backend:\n'})}),"\n",(0,a.jsx)(n.h3,{id:"launch-the-rocket--2",children:"Launch the rocket !"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose up -d \n# To see the logs :\ndocker compose logs -f \n"})}),"\n",(0,a.jsx)(n.p,{children:"You should have received an e-mail inviting you to create your administrator password."}),"\n",(0,a.jsx)(n.p,{children:"Congratulations! You can now read\nthrough the documentation and come and see us on discord to tell us you've succeeded!"}),"\n",(0,a.jsx)(n.h3,{id:"update-1",children:"Update"}),"\n",(0,a.jsx)(n.p,{children:"Just pull the latest docker image release :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"docker compose pull\ndocker compose up -d \n"})}),"\n",(0,a.jsx)(n.h3,{id:"backups-1",children:"Backups"}),"\n",(0,a.jsx)(n.p,{children:"TODO: A note blog for Syncthing, Borgbackup, Crontab and postgres dump."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>l});var a=s(6540);const o={},r=a.createContext(o);function t(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fd7c400.193c7ea5.js b/assets/js/3fd7c400.193c7ea5.js deleted file mode 100644 index c8922d3f..00000000 --- a/assets/js/3fd7c400.193c7ea5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[6142],{4716:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var i=n(4848),o=n(8453);const s={sidebar_position:2,slug:"admin_add_new_event",title:"Create a new event from A to Z",description:"Create a new event in detail.",keywords:["billetterie","ticketing","event","new"],wiktags:["billetterie","ticketing","event"],authors:"Axel"},r=void 0,l={id:"Utilisateur/Billetterie/60 creation event",title:"Create a new event from A to Z",description:"Create a new event in detail.",source:"@site/docs/Utilisateur/Billetterie/60 creation event.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/admin_add_new_event",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_event",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Billetterie/60 creation event.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"admin_add_new_event",title:"Create a new event from A to Z",description:"Create a new event in detail.",keywords:["billetterie","ticketing","event","new"],wiktags:["billetterie","ticketing","event"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Billetterie",permalink:"/docs/category/billetterie"},next:{title:"Create a free event",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_free_event"}},a={},c=[{value:"1- Add a new event",id:"1--add-a-new-event",level:2},{value:"2- Choose items",id:"2--choose-items",level:2},{value:"3- Setting options",id:"3--setting-options",level:2},{value:"4- Cashless",id:"4--cashless",level:2},{value:"5- Publish your event",id:"5--publish-your-event",level:2}];function d(e){const t={admonition:"admonition",h2:"h2",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"First, you will need to log in to the administration page of your ticketing instance."}),"\n",(0,i.jsx)(t.h2,{id:"1--add-a-new-event",children:"1- Add a new event"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:'Click on the "Events" category in the left column under the Ticketing tab'}),"\n",(0,i.jsx)(t.li,{children:"Click on the \u201cADD EVENT +\u201d button at the top right"}),"\n",(0,i.jsx)(t.li,{children:"Complete the form.\n*The image serves as a thumbnail on the home page and as a background on your event page\n*The short description is a catchphrase in the thumbnail on the home page\n*The long description allows you to provide more information on your event page\n*The \u201cpublish\u201d button allows you to display or not your event on the home page"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"2--choose-items",children:"2- Choose items"}),"\n",(0,i.jsx)(t.p,{children:"This section allows you to display products on the event booking page\nThese products can be prices, memberships, subscriptions, cashless recharges, merchandising or other..."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:'Click on the green "+" to add a product\n*product type allows you to sort products by category to subsequently assign a price to them\n*weight allows you to choose the order of product display on the reservation page (the smallest will be first)'}),"\n",(0,i.jsx)(t.li,{children:"Click on the save button at the bottom of this new window to validate\nYour products should now appear in the list in the \u201cItems\u201d section."}),"\n",(0,i.jsx)(t.li,{children:"Select the ones you want to display on your booking page by holding the ctrl key and clicking on them. They will be highlighted in blue\n*you can deselect in the same way: ctrl and right click"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"3--setting-options",children:"3- Setting options"}),"\n",(0,i.jsx)(t.p,{children:'Options can be selected or created in the same way as "products" by clicking on the green "+".'}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"\u201csingle choice\u201d requires the person reserving to select one (and only one) option among those offered"}),"\n",(0,i.jsx)(t.li,{children:"\u201cmultiple choice\u201d allows the public to freely add or not this option"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"4--cashless",children:"4- Cashless"}),"\n",(0,i.jsx)(t.p,{children:"This last section makes it possible to condition the ticket reservation on a cashless recharge."}),"\n",(0,i.jsx)(t.h2,{id:"5--publish-your-event",children:"5- Publish your event"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Click on the save button to validate the addition of your new event"}),"\n"]}),"\n",(0,i.jsxs)(t.admonition,{type:"danger",children:[(0,i.jsx)(t.p,{children:"Attention ! After creating products (step 2) you need to think about assigning a price to it.\nTo do this :"}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Click on the \u201cPrices\u201d category in the left column under the Ticketing tab"}),"\n",(0,i.jsx)(t.li,{children:"Click on the \u201cADD RATE +\u201d button at the top right"}),"\n",(0,i.jsx)(t.li,{children:"Select the previously created product"}),"\n",(0,i.jsx)(t.li,{children:"Complete the rest of the form (descriptions, prices, stock, etc.)\n*this is when you can choose to condition the ticket reservation on membership.\n*reminder: memberships must be created in the \u201cProducts\u201d section."}),"\n",(0,i.jsx)(t.li,{children:"Click on the \u201csave\u201d button at the bottom of the page"}),"\n"]})]}),"\n",(0,i.jsx)("video",{width:"100%",controls:!0,src:"/img/addevent.mp4"})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>l});var i=n(6540);const o={},s=i.createContext(o);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fd7c400.4dbd0d59.js b/assets/js/3fd7c400.4dbd0d59.js new file mode 100644 index 00000000..b7dc77b2 --- /dev/null +++ b/assets/js/3fd7c400.4dbd0d59.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[6142],{4716:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var i=n(4848),o=n(8453);const s={sidebar_position:2,slug:"admin_add_new_event",title:"Create a new event from A to Z",description:"Create a new event in detail.",keywords:["billetterie","ticketing","event","new"],wiktags:["billetterie","ticketing","event"],authors:"Axel"},r=void 0,l={id:"Utilisateur/Billetterie/60 creation event",title:"Create a new event from A to Z",description:"Create a new event in detail.",source:"@site/docs/Utilisateur/Billetterie/60 creation event.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/admin_add_new_event",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_event",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Billetterie/60 creation event.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"admin_add_new_event",title:"Create a new event from A to Z",description:"Create a new event in detail.",keywords:["billetterie","ticketing","event","new"],wiktags:["billetterie","ticketing","event"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Billetterie",permalink:"/docs/category/billetterie"},next:{title:"Create a free event",permalink:"/docs/Utilisateur/Billetterie/admin_add_new_free_event"}},a={},c=[{value:"1- Add a new event",id:"1--add-a-new-event",level:2},{value:"2- Choose items",id:"2--choose-items",level:2},{value:"3- Setting options",id:"3--setting-options",level:2},{value:"4- Cashless",id:"4--cashless",level:2},{value:"5- Publish your event",id:"5--publish-your-event",level:2}];function d(e){const t={admonition:"admonition",h2:"h2",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"First, you will need to log in to the administration page of your ticketing instance."}),"\n",(0,i.jsx)(t.h2,{id:"1--add-a-new-event",children:"1- Add a new event"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:'Click on the "Events" category in the left column under the Ticketing tab'}),"\n",(0,i.jsx)(t.li,{children:"Click on the \u201cADD EVENT +\u201d button at the top right"}),"\n",(0,i.jsx)(t.li,{children:"Complete the form.\n*The image serves as a thumbnail on the home page and as a background on your event page\n*The short description is a catchphrase in the thumbnail on the home page\n*The long description allows you to provide more information on your event page\n*The \u201cpublish\u201d button allows you to display or not your event on the home page"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"2--choose-items",children:"2- Choose items"}),"\n",(0,i.jsx)(t.p,{children:"This section allows you to display products on the event booking page\nThese products can be prices, memberships, subscriptions, cashless recharges, merchandising or other..."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:'Click on the green "+" to add a product\n*product type allows you to sort products by category to subsequently assign a price to them\n*weight allows you to choose the order of product display on the reservation page (the smallest will be first)'}),"\n",(0,i.jsx)(t.li,{children:"Click on the save button at the bottom of this new window to validate\nYour products should now appear in the list in the \u201cItems\u201d section."}),"\n",(0,i.jsx)(t.li,{children:"Select the ones you want to display on your booking page by holding the ctrl key and clicking on them. They will be highlighted in blue\n*you can deselect in the same way: ctrl and right click"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"3--setting-options",children:"3- Setting options"}),"\n",(0,i.jsx)(t.p,{children:'Options can be selected or created in the same way as "products" by clicking on the green "+".'}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"\u201csingle choice\u201d requires the person reserving to select one (and only one) option among those offered"}),"\n",(0,i.jsx)(t.li,{children:"\u201cmultiple choice\u201d allows the public to freely add or not this option"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"4--cashless",children:"4- Cashless"}),"\n",(0,i.jsx)(t.p,{children:"This last section makes it possible to condition the ticket reservation on a cashless recharge."}),"\n",(0,i.jsx)(t.h2,{id:"5--publish-your-event",children:"5- Publish your event"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Click on the save button to validate the addition of your new event"}),"\n"]}),"\n",(0,i.jsxs)(t.admonition,{type:"danger",children:[(0,i.jsx)(t.p,{children:"Attention ! After creating products (step 2) you need to think about assigning a price to it.\nTo do this :"}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Click on the \u201cPrices\u201d category in the left column under the Ticketing tab"}),"\n",(0,i.jsx)(t.li,{children:"Click on the \u201cADD RATE +\u201d button at the top right"}),"\n",(0,i.jsx)(t.li,{children:"Select the previously created product"}),"\n",(0,i.jsx)(t.li,{children:"Complete the rest of the form (descriptions, prices, stock, etc.)\n*this is when you can choose to condition the ticket reservation on membership.\n*reminder: memberships must be created in the \u201cProducts\u201d section."}),"\n",(0,i.jsx)(t.li,{children:"Click on the \u201csave\u201d button at the bottom of the page"}),"\n"]})]}),"\n",(0,i.jsx)("video",{width:"100%",controls:!0,src:"/img/addevent.mp4"})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>l});var i=n(6540);const o={},s=i.createContext(o);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/512b8e12.265a40ad.js b/assets/js/512b8e12.265a40ad.js new file mode 100644 index 00000000..ad4aa923 --- /dev/null +++ b/assets/js/512b8e12.265a40ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[6557],{3982:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>r,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var t=n(4848),s=n(8453);const o={sidebar_position:150,slug:"badge",title:"Time clock machine",description:"Time clock machine, clocking, counting, door opening with NFC cards.",keywords:["badgeuse","badge","pointeuse","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","time clock","machine","time punch machine"],wiktags:["badgeuse","badge","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","time clock","machine","time punch machine"]},a="Time clock machine",c={id:"Utilisateur/Cashless/150 Badgeuse",title:"Time clock machine",description:"Time clock machine, clocking, counting, door opening with NFC cards.",source:"@site/docs/Utilisateur/Cashless/150 Badgeuse.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/badge",permalink:"/docs/Utilisateur/Cashless/badge",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/150 Badgeuse.md",tags:[],version:"current",sidebarPosition:150,frontMatter:{sidebar_position:150,slug:"badge",title:"Time clock machine",description:"Time clock machine, clocking, counting, door opening with NFC cards.",keywords:["badgeuse","badge","pointeuse","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","time clock","machine","time punch machine"],wiktags:["badgeuse","badge","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","time clock","machine","time punch machine"]},sidebar:"tutorialSidebar",previous:{title:"Removing Orders",permalink:"/docs/Utilisateur/Cashless/admin_supp"},next:{title:"Loyalty points",permalink:"/docs/Utilisateur/Cashless/fidelity"}},r={},d=[{value:"Configuration",id:"configuration",level:2},{value:"Action !",id:"action-",level:2},{value:"Report",id:"report",level:2},{value:"Pooling with FEDOW",id:"pooling-with-fedow",level:2},{value:"Go further with Dokos",id:"go-further-with-dokos",level:2},{value:"Contribution",id:"contribution",level:2}];function l(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"time-clock-machine",children:"Time clock machine"})}),"\n",(0,t.jsx)(i.p,{children:"A time clocking system has been developed to count passages at a given point. There are multiple use cases, from simple validation of presence for co-working to recording time spent using a room :"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Access to a location (climbing, rehearsal or dance room, etc.)"}),"\n",(0,t.jsx)(i.li,{children:"Counting time spent using a location (Fablab, meeting room, training room, etc.)"}),"\n",(0,t.jsx)(i.li,{children:"Certificate of presence"}),"\n",(0,t.jsx)(i.li,{children:"Time currency counts (ex: 1 hour of meeting room = 1 token)"}),"\n",(0,t.jsx)(i.li,{children:"Door opening (need a webhook to a connected lock)"}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(i.p,{children:"Enable the option in the setup menu. This will create the \u201cTime-clock machine\u201d asset and the corresponding item."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(5800).A+"",width:"1176",height:"446"})}),"\n",(0,t.jsx)(i.p,{children:'You can now add the "Time-clock machine" item to any point of sale.'}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(8119).A+"",width:"1172",height:"749"})}),"\n",(0,t.jsx)(i.p,{children:'For greater clarity, you can deactivate "Show prices" if your point of sale only includes the "Time-clock machine" item'}),"\n",(0,t.jsx)(i.h2,{id:"action-",children:"Action !"}),"\n",(0,t.jsx)(i.p,{children:"If you have created a new point of sale for the Time Clock card reader, remember to link this point of sale to the primary cards."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(3828).A+"",width:"1172",height:"749"})}),"\n",(0,t.jsx)(i.p,{children:"To punch a card, select the \u201cTime-clock machine\u201d box, validate, then scan the card."}),"\n",(0,t.jsx)(i.h2,{id:"report",children:"Report"}),"\n",(0,t.jsxs)(i.p,{children:["On the main page (Dashboard), you will find the link to the time spend reports.\nYou can also access it via the address ",(0,t.jsx)(i.code,{children:"https:///rapport/badgeuse/"})]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(939).A+"",width:"1333",height:"358"})}),"\n",(0,t.jsx)(i.p,{children:"Passages are sorted by entry/exit pair."}),"\n",(0,t.jsx)(i.h2,{id:"pooling-with-fedow",children:"Pooling with FEDOW"}),"\n",(0,t.jsx)(i.p,{children:"A single NFC card for several locations, it's possible!\nYou can connect your Time-clocking machine to FEDOW and thus share the same time system with other third parties.\nOnce the connection is made, the passages will be recorded in the FEDOW blockchain."}),"\n",(0,t.jsx)(i.p,{children:"Join a TiBillet/Fedow federation, configure the time-clock asset as federated, and you will be able to find it in your cashless instance."}),"\n",(0,t.jsx)(i.p,{children:'Configure the "Time-clock machine" item on the federated asset. In the Item/Special menu:'}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(3307).A+"",width:"927",height:"516"})}),"\n",(0,t.jsx)(i.p,{children:"You can now punch a card, and the passages will be recorded in the FEDOW blockchain:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(9945).A+"",width:"1340",height:"401"})}),"\n",(0,t.jsx)(i.h2,{id:"go-further-with-dokos",children:"Go further with Dokos"}),"\n",(0,t.jsxs)(i.p,{children:["You can use TiBillet in solo mode or Fedow for the (Inter-venue badge) ",(0,t.jsx)(i.a,{href:"https://badge.tiers-lieux.org/",children:"Badge inter lieux"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["See the corresponding Dokos configuration: ",(0,t.jsx)(i.a,{href:"https://doc.dokos.io/federation-lieux/federation-de-lieux/api/",children:"\nhttps://doc.dokos.io/federation-lieux/federation-de-lieux/api/"})]}),"\n",(0,t.jsx)(i.h2,{id:"contribution",children:"Contribution"}),"\n",(0,t.jsx)(i.p,{children:"These features were developed by, for and with the help of :"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://codecommun.coop/",children:"Coop\xe9rative Code Commun"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://badge.tiers-lieux.org/",children:"Badge Inter Lieux"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://compagnie.tiers-lieux.org/",children:"La compagnie des tiers lieux"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://adopteuncommun.communecter.org/#",children:"Les communs des tiers lieux"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://www.cooperativebaraka.fr/",children:"Coop\xe9rative Baraka"})}),"\n",(0,t.jsxs)(i.li,{children:["Simon Sarazin & ",(0,t.jsx)(i.a,{href:"https://laplumealoup.fr/",children:"La Plume \xe0 Loup"})]}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://dokos.io/",children:"Dokos"})}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},5800:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/badge1-83aa332363ff6798e373273283c5df6e.jpg"},8119:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/badge2-0f72d32115c3135b2df465f8f0fc473b.jpg"},3307:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/config_asset_fedow-6df42cc6bdacd0f83e9e56ea86f0035a.jpg"},939:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/rapport_badgeuse-e806c33c95c8a6bb48e95cf2dc27bb34.jpg"},9945:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/rapport_badgeuse_fedow-5b6f883a172961bf99bf963656fd9337.jpg"},3828:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/vuecashless_pdv_badgeuse-830600621e52e0ede5152d0ddda7a6b9.jpg"},8453:(e,i,n)=>{n.d(i,{R:()=>a,x:()=>c});var t=n(6540);const s={},o=t.createContext(s);function a(e){const i=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/512b8e12.851dbfc7.js b/assets/js/512b8e12.851dbfc7.js deleted file mode 100644 index 8d19df09..00000000 --- a/assets/js/512b8e12.851dbfc7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[6557],{3982:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>r,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=n(4848),s=n(8453);const o={sidebar_position:150,slug:"badge",title:"Time clock machine",description:"Time clock machine, clocking, counting, door opening with NFC cards.",keywords:["badgeuse","badge","pointeuse","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","time clock","machine","time punch machine"],wiktags:["badgeuse","badge","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","time clock","machine","time punch machine"]},c="Time clock machine",a={id:"Utilisateur/Cashless/150 Badgeuse",title:"Time clock machine",description:"Time clock machine, clocking, counting, door opening with NFC cards.",source:"@site/docs/Utilisateur/Cashless/150 Badgeuse.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/badge",permalink:"/docs/Utilisateur/Cashless/badge",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/150 Badgeuse.md",tags:[],version:"current",sidebarPosition:150,frontMatter:{sidebar_position:150,slug:"badge",title:"Time clock machine",description:"Time clock machine, clocking, counting, door opening with NFC cards.",keywords:["badgeuse","badge","pointeuse","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","time clock","machine","time punch machine"],wiktags:["badgeuse","badge","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","time clock","machine","time punch machine"]},sidebar:"tutorialSidebar",previous:{title:"Removing Orders",permalink:"/docs/Utilisateur/Cashless/admin_supp"},next:{title:"Loyalty points",permalink:"/docs/Utilisateur/Cashless/fidelity"}},r={},d=[{value:"Configuration",id:"configuration",level:2},{value:"Action !",id:"action-",level:2},{value:"Report",id:"report",level:2},{value:"Pooling with FEDOW",id:"pooling-with-fedow",level:2},{value:"Go further with Dokos",id:"go-further-with-dokos",level:2},{value:"Contribution",id:"contribution",level:2}];function l(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"time-clock-machine",children:"Time clock machine"})}),"\n",(0,t.jsx)(i.p,{children:"A time clocking system has been developed to count passages at a given point. There are multiple use cases, from simple validation of presence for co-working to recording time spent using a room :"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Access to a location (climbing, rehearsal or dance room, etc.)"}),"\n",(0,t.jsx)(i.li,{children:"Counting time spent using a location (Fablab, meeting room, training room, etc.)"}),"\n",(0,t.jsx)(i.li,{children:"Certificate of presence"}),"\n",(0,t.jsx)(i.li,{children:"Time currency counts (ex: 1 hour of meeting room = 1 token)"}),"\n",(0,t.jsx)(i.li,{children:"Door opening (need a webhook to a connected lock)"}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(i.p,{children:"Enable the option in the setup menu. This will create the \u201cTime-clock machine\u201d asset and the corresponding item."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(5800).A+"",width:"1176",height:"446"})}),"\n",(0,t.jsx)(i.p,{children:'You can now add the "Time-clock machine" item to any point of sale.'}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(8119).A+"",width:"1172",height:"749"})}),"\n",(0,t.jsx)(i.p,{children:'For greater clarity, you can deactivate "Show prices" if your point of sale only includes the "Time-clock machine" item'}),"\n",(0,t.jsx)(i.h2,{id:"action-",children:"Action !"}),"\n",(0,t.jsx)(i.p,{children:"If you have created a new point of sale for the Time Clock card reader, remember to link this point of sale to the primary cards."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(3828).A+"",width:"1172",height:"749"})}),"\n",(0,t.jsx)(i.p,{children:"To punch a card, select the \u201cTime-clock machine\u201d box, validate, then scan the card."}),"\n",(0,t.jsx)(i.h2,{id:"report",children:"Report"}),"\n",(0,t.jsxs)(i.p,{children:["On the main page (Dashboard), you will find the link to the time spend reports.\nYou can also access it via the address ",(0,t.jsx)(i.code,{children:"https:///rapport/badgeuse/"})]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(939).A+"",width:"1333",height:"358"})}),"\n",(0,t.jsx)(i.p,{children:"Passages are sorted by entry/exit pair."}),"\n",(0,t.jsx)(i.h2,{id:"pooling-with-fedow",children:"Pooling with FEDOW"}),"\n",(0,t.jsx)(i.p,{children:"A single NFC card for several locations, it's possible!\nYou can connect your Time-clocking machine to FEDOW and thus share the same time system with other third parties.\nOnce the connection is made, the passages will be recorded in the FEDOW blockchain."}),"\n",(0,t.jsx)(i.p,{children:"Join a TiBillet/Fedow federation, configure the time-clock asset as federated, and you will be able to find it in your cashless instance."}),"\n",(0,t.jsx)(i.p,{children:'Configure the "Time-clock machine" item on the federated asset. In the Item/Special menu:'}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(3307).A+"",width:"927",height:"516"})}),"\n",(0,t.jsx)(i.p,{children:"You can now punch a card, and the passages will be recorded in the FEDOW blockchain:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Config Badge",src:n(9945).A+"",width:"1340",height:"401"})}),"\n",(0,t.jsx)(i.h2,{id:"go-further-with-dokos",children:"Go further with Dokos"}),"\n",(0,t.jsxs)(i.p,{children:["You can use TiBillet in solo mode or Fedow for the (Inter-venue badge) ",(0,t.jsx)(i.a,{href:"https://badge.tiers-lieux.org/",children:"Badge inter lieux"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["See the corresponding Dokos configuration: ",(0,t.jsx)(i.a,{href:"https://doc.dokos.io/federation-lieux/federation-de-lieux/api/",children:"\nhttps://doc.dokos.io/federation-lieux/federation-de-lieux/api/"})]}),"\n",(0,t.jsx)(i.h2,{id:"contribution",children:"Contribution"}),"\n",(0,t.jsx)(i.p,{children:"These features were developed by, for and with the help of :"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://codecommun.coop/",children:"Coop\xe9rative Code Commun"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://badge.tiers-lieux.org/",children:"Badge Inter Lieux"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://compagnie.tiers-lieux.org/",children:"La compagnie des tiers lieux"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://adopteuncommun.communecter.org/#",children:"Les communs des tiers lieux"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://www.cooperativebaraka.fr/",children:"Coop\xe9rative Baraka"})}),"\n",(0,t.jsxs)(i.li,{children:["Simon Sarazin & ",(0,t.jsx)(i.a,{href:"https://laplumealoup.fr/",children:"La Plume \xe0 Loup"})]}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"https://dokos.io/",children:"Dokos"})}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},5800:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/badge1-83aa332363ff6798e373273283c5df6e.jpg"},8119:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/badge2-0f72d32115c3135b2df465f8f0fc473b.jpg"},3307:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/config_asset_fedow-6df42cc6bdacd0f83e9e56ea86f0035a.jpg"},939:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/rapport_badgeuse-e806c33c95c8a6bb48e95cf2dc27bb34.jpg"},9945:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/rapport_badgeuse_fedow-5b6f883a172961bf99bf963656fd9337.jpg"},3828:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/vuecashless_pdv_badgeuse-830600621e52e0ede5152d0ddda7a6b9.jpg"},8453:(e,i,n)=>{n.d(i,{R:()=>c,x:()=>a});var t=n(6540);const s={},o=t.createContext(s);function c(e){const i=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/57b2c8d2.d73f8f60.js b/assets/js/57b2c8d2.d73f8f60.js new file mode 100644 index 00000000..afe64692 --- /dev/null +++ b/assets/js/57b2c8d2.d73f8f60.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[6604],{2193:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var s=n(4848),r=n(8453),i=n(1470),a=n(9365);const l={sidebar_position:10,slug:"events",title:"\xc9v\xe8nements",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},o=void 0,d={id:"api/10 Event",title:"\xc9v\xe8nements",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",source:"@site/docs/api/10 Event.md",sourceDirName:"api",slug:"/api/events",permalink:"/docs/api/events",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/api/10 Event.md",tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10,slug:"events",title:"\xc9v\xe8nements",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Produits",permalink:"/docs/api/products"},next:{title:"R\xe9servations et billets",permalink:"/docs/api/reservations"}},c={},u=[{value:"Tips :",id:"tips-",level:4},{value:"\xc9v\xe8nement sans artiste avec entr\xe9e libre",id:"\xe9v\xe8nement-sans-artiste-avec-entr\xe9e-libre",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.admonition,{type:"caution",children:[(0,s.jsx)(t.p,{children:"La documentation est en cours de r\xe9daction."}),(0,s.jsxs)(t.p,{children:["N'h\xe9sitez pas \xe0 venir discuter avec nous sur ",(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.a,{href:"https://discord.gg/7FJvtYx",children:"Discord"})})," pour avoir plus d'informations !"]})]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:"POST /api/events/\n"})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Item"}),(0,s.jsx)(t.th,{children:"type"}),(0,s.jsx)(t.th,{children:"Requis"}),(0,s.jsx)(t.th,{children:"Exemple"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"datetime"}),(0,s.jsx)(t.td,{children:"datetime"}),(0,s.jsx)(t.td,{children:"Y"}),(0,s.jsx)(t.td,{children:"2029-12-21T18:30"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"name"}),(0,s.jsx)(t.td,{children:"text"}),(0,s.jsx)(t.td,{children:"Y"}),(0,s.jsx)(t.td,{children:"42\xe8me anniversaire d'Adam"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"short_description"}),(0,s.jsx)(t.td,{children:"text"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:"Pas de panique !"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"long_description"}),(0,s.jsx)(t.td,{children:"text"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:"Un dernier restaurant avant la fin du monde ?"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"img_url"}),(0,s.jsx)(t.td,{children:"url"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"https://picsum.photos/1920/1080",children:"https://picsum.photos/1920/1080"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"category"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:"LIV"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"max_per_ser"}),(0,s.jsx)(t.td,{children:"int"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:"10"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"tags"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["Rock","D\xe9guis\xe9"]'})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"artists"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["uuid4","uuid4"]'})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"products"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["uuid4","uuid4"]'})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"options_radio"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["uuid4","uuid4"]'})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"options_checkbox"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["uuid4","uuid4"]'})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"liste des cat\xe9gories disponibles :"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:' CONCERT = "LIV" #Default\n FESTIVAL = "FES"\n REUNION = "REU"\n CONFERENCE = "CON"\n RESTAURATION = "RES"\n'})}),"\n",(0,s.jsx)(t.h4,{id:"tips-",children:"Tips :"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Si aucun ",(0,s.jsx)(t.strong,{children:"products"})," : l'\xe9v\xe8nement sera consid\xe9r\xe9 comme entr\xe9e libre."]}),"\n",(0,s.jsxs)(t.li,{children:["Si ",(0,s.jsx)(t.strong,{children:"artist"})," : les informations de l'\xe9v\xe8nement seront automatiquement compl\xe9t\xe9es avec les informations de l'artiste, pas besoin de renseigner ",(0,s.jsx)(t.strong,{children:"name"}),", ",(0,s.jsx)(t.strong,{children:"short_description"}),", ",(0,s.jsx)(t.strong,{children:"long_description"})," et ",(0,s.jsx)(t.strong,{children:"img_url"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"options_radio"})," et ",(0,s.jsx)(t.strong,{children:"options_checkbox"})," : uuid des options \xe0 ajouter \xe0 l'\xe9v\xe8nement. Les options peuvent \xeatre cr\xe9\xe9es au pr\xe9alable via l'api ou l'administration.","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"radio : une option \xe0 choix unique parmis plusieurs ( ex : taille de t-shirt, etc... )"}),"\n",(0,s.jsx)(t.li,{children:"checkbox : une option \xe0 choix multiple parmis plusieurs ( ex : repas v\xe9g\xe9tarien, newsletter, etc... )"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"tags"})," : liste de tags \xe0 ajouter \xe0 l'\xe9v\xe8nement. Renseignez le nom du tag. Les tags sont cr\xe9\xe9s automatiquement si ils n'existent pas d\xe9j\xe0."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"max_per_user"})," : D\xe9faut \xe0 10 si non renseign\xe9. Si == 1, et si tarifs == 1 alors le champs nom/premon sera automatiquement affich\xe9 lors de la commande et il n'y aura pas de choix de quantit\xe9."]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"\xe9v\xe8nement-sans-artiste-avec-entr\xe9e-libre",children:"\xc9v\xe8nement sans artiste avec entr\xe9e libre"}),"\n","\n",(0,s.jsxs)(i.A,{children:[(0,s.jsx)(a.A,{value:"Python",label:"Python",children:(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:'import requests\n\nurl = "https://demo.betabillet.tech/api/events/"\n\ndata = {\n "datetime": "2029-12-21T18:30",\n "name": "42\xe8me anniversaire d\'Adam",\n "short_description": "Pas de panique ! Un dernier restaurant avant la fin du monde ?",\n "long_description": "J\'adore les dates limites. J\'aime le son qu\'elles font lorsque on les d\xe9passe \xe0 toute allure.",\n "img_url": "https://picsum.photos/1920/1080"\n}\nheaders = {\n "Authorization": "Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW",\n "Content-Type": "application/json"\n}\n\nresponse = requests.request("POST", url, json=data, headers=headers)\n\nprint(response.text)\n'})})}),(0,s.jsx)(a.A,{value:"Javascript",label:"json",children:(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",metastring:'title="Json (Postman body)"',children:'{\n "datetime": "{{random_date}}T18:30",\n "name": "{{$randomWords}}",\n "short_description": "{{$randomLoremSentence}}",\n "long_description": "{{$randomLoremParagraph}}",\n "img_url": "https://picsum.photos/1920/1080"\n}\n'})})})]}),"\n",(0,s.jsx)(t.p,{children:"Exemple de r\xe9ponse :"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",metastring:'title="HTTP Response (json)"',children:'{\n\t"uuid": "24b96716-c676-43e8-904f-baa93f66968a",\n\t"name": "42\xe8me anniversaire d\'Adam",\n\t"slug": "42eme-anniversaire-dadam-122129-1830",\n\t"short_description": "Pas de panique ! Un dernier restaurant avant la fin du monde ?",\n\t"long_description": "J\'adore les dates limites. J\'aime le son qu\'elles font lorsque on les d\xe9passe \xe0 toute allure.",\n\t"event_facebook_url": null,\n\t"datetime": "2029-12-21T18:30:00+04:00",\n\t"products": [\n\t\t{\n\t\t\t"uuid": "06948793-da03-47c4-9d56-6350b7e87034",\n\t\t\t"name": "Reservation",\n\t\t\t"short_description": null,\n\t\t\t"long_description": null,\n\t\t\t"terms_and_conditions_document": null,\n\t\t\t"publish": false,\n\t\t\t"img": null,\n\t\t\t"categorie_article": "F",\n\t\t\t"send_to_cashless": false,\n\t\t\t"prices": [\n\t\t\t\t{\n\t\t\t\t\t"uuid": "b4086a22-fee6-4a85-81bb-3b85a8e19d74",\n\t\t\t\t\t"short_description": null,\n\t\t\t\t\t"long_description": null,\n\t\t\t\t\t"name": "gratuite",\n\t\t\t\t\t"prix": 0.0,\n\t\t\t\t\t"vat": "NA",\n\t\t\t\t\t"stock": null,\n\t\t\t\t\t"max_per_user": 10,\n\t\t\t\t\t"subscription_type": "N",\n\t\t\t\t\t"product": "06948793-da03-47c4-9d56-6350b7e87034",\n\t\t\t\t\t"adhesion_obligatoire": null\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t"options_radio": [],\n\t"options_checkbox": [],\n\t"img_variations": {\n\t\t"fhd": "/media/images/c371b9a0d21391a6998150ec49e6c833.fhd.png",\n\t\t"hdr": "/media/images/c371b9a0d21391a6998150ec49e6c833.hdr.png",\n\t\t"med": "/media/images/c371b9a0d21391a6998150ec49e6c833.med.png",\n\t\t"thumbnail": "/media/images/c371b9a0d21391a6998150ec49e6c833.thumbnail.png"\n\t},\n\t"reservations": 0,\n\t"complet": false,\n\t"artists": [],\n\t"url": "https://demo.betabillet.tech/event/42eme-anniversaire-dadam-122129-1830/",\n\t"place": "DemoSt\xe8ne"\n}\n'})})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},9365:(e,t,n)=>{n.d(t,{A:()=>a});n(6540);var s=n(4164);const r={tabItem:"tabItem_Ymn6"};var i=n(4848);function a(e){let{children:t,hidden:n,className:a}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,s.A)(r.tabItem,a),hidden:n,children:t})}},1470:(e,t,n)=>{n.d(t,{A:()=>y});var s=n(6540),r=n(4164),i=n(3104),a=n(6347),l=n(205),o=n(7485),d=n(1682),c=n(679);function u(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:n,attributes:s,default:r}}=e;return{value:t,label:n,attributes:s,default:r}}))}(n);return function(e){const t=(0,d.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const r=(0,a.W6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o.aZ)(i),(0,s.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(r.location.search);t.set(i,e),r.replace({...r.location,search:t.toString()})}),[i,r])]}function x(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,i=h(e),[a,o]=(0,s.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:t,tabValues:i}))),[d,u]=m({queryString:n,groupId:r}),[x,j]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,i]=(0,c.Dv)(n);return[r,(0,s.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),b=(()=>{const e=d??x;return p({value:e,tabValues:i})?e:null})();(0,l.A)((()=>{b&&o(b)}),[b]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),j(e)}),[u,j,i]),tabValues:i}}var j=n(2303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(4848);function g(e){let{className:t,block:n,selectedValue:s,selectValue:a,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.a_)(),c=e=>{const t=e.currentTarget,n=o.indexOf(t),r=l[n].value;r!==s&&(d(t),a(r))},u=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;t=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;t=o[n]??o[o.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,ref:e=>o.push(e),onKeyDown:u,onClick:c,...i,className:(0,r.A)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":s===t}),children:n??t},t)}))})}function f(e){let{lazy:t,children:n,selectedValue:i}=e;const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===i));return e?(0,s.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function _(e){const t=x(e);return(0,v.jsxs)("div",{className:(0,r.A)("tabs-container",b.tabList),children:[(0,v.jsx)(g,{...t,...e}),(0,v.jsx)(f,{...t,...e})]})}function y(e){const t=(0,j.A)();return(0,v.jsx)(_,{...e,children:u(e.children)},String(t))}},8453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>l});var s=n(6540);const r={},i=s.createContext(r);function a(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/57b2c8d2.eaa96567.js b/assets/js/57b2c8d2.eaa96567.js deleted file mode 100644 index a08eb901..00000000 --- a/assets/js/57b2c8d2.eaa96567.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[6604],{2193:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var s=n(4848),r=n(8453),i=n(1470),a=n(9365);const l={sidebar_position:10,slug:"events",title:"\xc9v\xe8nements",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},o=void 0,d={id:"api/10 Event",title:"\xc9v\xe8nements",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",source:"@site/docs/api/10 Event.md",sourceDirName:"api",slug:"/api/events",permalink:"/docs/api/events",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/api/10 Event.md",tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10,slug:"events",title:"\xc9v\xe8nements",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Produits",permalink:"/docs/api/products"},next:{title:"R\xe9servations et billets",permalink:"/docs/api/reservations"}},c={},u=[{value:"Tips :",id:"tips-",level:4},{value:"\xc9v\xe8nement sans artiste avec entr\xe9e libre",id:"\xe9v\xe8nement-sans-artiste-avec-entr\xe9e-libre",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.admonition,{type:"caution",children:[(0,s.jsx)(t.p,{children:"La documentation est en cours de r\xe9daction."}),(0,s.jsxs)(t.p,{children:["N'h\xe9sitez pas \xe0 venir discuter avec nous sur ",(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.a,{href:"https://discord.gg/7FJvtYx",children:"Discord"})})," pour avoir plus d'informations !"]})]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:"POST /api/events/\n"})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Item"}),(0,s.jsx)(t.th,{children:"type"}),(0,s.jsx)(t.th,{children:"Requis"}),(0,s.jsx)(t.th,{children:"Exemple"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"datetime"}),(0,s.jsx)(t.td,{children:"datetime"}),(0,s.jsx)(t.td,{children:"Y"}),(0,s.jsx)(t.td,{children:"2029-12-21T18:30"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"name"}),(0,s.jsx)(t.td,{children:"text"}),(0,s.jsx)(t.td,{children:"Y"}),(0,s.jsx)(t.td,{children:"42\xe8me anniversaire d'Adam"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"short_description"}),(0,s.jsx)(t.td,{children:"text"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:"Pas de panique !"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"long_description"}),(0,s.jsx)(t.td,{children:"text"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:"Un dernier restaurant avant la fin du monde ?"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"img_url"}),(0,s.jsx)(t.td,{children:"url"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"https://picsum.photos/1920/1080",children:"https://picsum.photos/1920/1080"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"category"}),(0,s.jsx)(t.td,{children:"string"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:"LIV"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"max_per_ser"}),(0,s.jsx)(t.td,{children:"int"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:"10"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"tags"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["Rock","D\xe9guis\xe9"]'})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"artists"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["uuid4","uuid4"]'})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"products"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["uuid4","uuid4"]'})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"options_radio"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["uuid4","uuid4"]'})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"options_checkbox"}),(0,s.jsx)(t.td,{children:"list"}),(0,s.jsx)(t.td,{children:"N"}),(0,s.jsx)(t.td,{children:'["uuid4","uuid4"]'})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"liste des cat\xe9gories disponibles :"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:' CONCERT = "LIV" #Default\n FESTIVAL = "FES"\n REUNION = "REU"\n CONFERENCE = "CON"\n RESTAURATION = "RES"\n'})}),"\n",(0,s.jsx)(t.h4,{id:"tips-",children:"Tips :"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Si aucun ",(0,s.jsx)(t.strong,{children:"products"})," : l'\xe9v\xe8nement sera consid\xe9r\xe9 comme entr\xe9e libre."]}),"\n",(0,s.jsxs)(t.li,{children:["Si ",(0,s.jsx)(t.strong,{children:"artist"})," : les informations de l'\xe9v\xe8nement seront automatiquement compl\xe9t\xe9es avec les informations de l'artiste, pas besoin de renseigner ",(0,s.jsx)(t.strong,{children:"name"}),", ",(0,s.jsx)(t.strong,{children:"short_description"}),", ",(0,s.jsx)(t.strong,{children:"long_description"})," et ",(0,s.jsx)(t.strong,{children:"img_url"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"options_radio"})," et ",(0,s.jsx)(t.strong,{children:"options_checkbox"})," : uuid des options \xe0 ajouter \xe0 l'\xe9v\xe8nement. Les options peuvent \xeatre cr\xe9\xe9es au pr\xe9alable via l'api ou l'administration.","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"radio : une option \xe0 choix unique parmis plusieurs ( ex : taille de t-shirt, etc... )"}),"\n",(0,s.jsx)(t.li,{children:"checkbox : une option \xe0 choix multiple parmis plusieurs ( ex : repas v\xe9g\xe9tarien, newsletter, etc... )"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"tags"})," : liste de tags \xe0 ajouter \xe0 l'\xe9v\xe8nement. Renseignez le nom du tag. Les tags sont cr\xe9\xe9s automatiquement si ils n'existent pas d\xe9j\xe0."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"max_per_user"})," : D\xe9faut \xe0 10 si non renseign\xe9. Si == 1, et si tarifs == 1 alors le champs nom/premon sera automatiquement affich\xe9 lors de la commande et il n'y aura pas de choix de quantit\xe9."]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"\xe9v\xe8nement-sans-artiste-avec-entr\xe9e-libre",children:"\xc9v\xe8nement sans artiste avec entr\xe9e libre"}),"\n","\n",(0,s.jsxs)(i.A,{children:[(0,s.jsx)(a.A,{value:"Python",label:"Python",children:(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:'import requests\n\nurl = "https://demo.betabillet.tech/api/events/"\n\ndata = {\n "datetime": "2029-12-21T18:30",\n "name": "42\xe8me anniversaire d\'Adam",\n "short_description": "Pas de panique ! Un dernier restaurant avant la fin du monde ?",\n "long_description": "J\'adore les dates limites. J\'aime le son qu\'elles font lorsque on les d\xe9passe \xe0 toute allure.",\n "img_url": "https://picsum.photos/1920/1080"\n}\nheaders = {\n "Authorization": "Api-Key Map0K71T.rcs82Q66NuCUCuyTmnjVhmwhfl0VnOsW",\n "Content-Type": "application/json"\n}\n\nresponse = requests.request("POST", url, json=data, headers=headers)\n\nprint(response.text)\n'})})}),(0,s.jsx)(a.A,{value:"Javascript",label:"json",children:(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",metastring:'title="Json (Postman body)"',children:'{\n "datetime": "{{random_date}}T18:30",\n "name": "{{$randomWords}}",\n "short_description": "{{$randomLoremSentence}}",\n "long_description": "{{$randomLoremParagraph}}",\n "img_url": "https://picsum.photos/1920/1080"\n}\n'})})})]}),"\n",(0,s.jsx)(t.p,{children:"Exemple de r\xe9ponse :"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",metastring:'title="HTTP Response (json)"',children:'{\n\t"uuid": "24b96716-c676-43e8-904f-baa93f66968a",\n\t"name": "42\xe8me anniversaire d\'Adam",\n\t"slug": "42eme-anniversaire-dadam-122129-1830",\n\t"short_description": "Pas de panique ! Un dernier restaurant avant la fin du monde ?",\n\t"long_description": "J\'adore les dates limites. J\'aime le son qu\'elles font lorsque on les d\xe9passe \xe0 toute allure.",\n\t"event_facebook_url": null,\n\t"datetime": "2029-12-21T18:30:00+04:00",\n\t"products": [\n\t\t{\n\t\t\t"uuid": "06948793-da03-47c4-9d56-6350b7e87034",\n\t\t\t"name": "Reservation",\n\t\t\t"short_description": null,\n\t\t\t"long_description": null,\n\t\t\t"terms_and_conditions_document": null,\n\t\t\t"publish": false,\n\t\t\t"img": null,\n\t\t\t"categorie_article": "F",\n\t\t\t"send_to_cashless": false,\n\t\t\t"prices": [\n\t\t\t\t{\n\t\t\t\t\t"uuid": "b4086a22-fee6-4a85-81bb-3b85a8e19d74",\n\t\t\t\t\t"short_description": null,\n\t\t\t\t\t"long_description": null,\n\t\t\t\t\t"name": "gratuite",\n\t\t\t\t\t"prix": 0.0,\n\t\t\t\t\t"vat": "NA",\n\t\t\t\t\t"stock": null,\n\t\t\t\t\t"max_per_user": 10,\n\t\t\t\t\t"subscription_type": "N",\n\t\t\t\t\t"product": "06948793-da03-47c4-9d56-6350b7e87034",\n\t\t\t\t\t"adhesion_obligatoire": null\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t"options_radio": [],\n\t"options_checkbox": [],\n\t"img_variations": {\n\t\t"fhd": "/media/images/c371b9a0d21391a6998150ec49e6c833.fhd.png",\n\t\t"hdr": "/media/images/c371b9a0d21391a6998150ec49e6c833.hdr.png",\n\t\t"med": "/media/images/c371b9a0d21391a6998150ec49e6c833.med.png",\n\t\t"thumbnail": "/media/images/c371b9a0d21391a6998150ec49e6c833.thumbnail.png"\n\t},\n\t"reservations": 0,\n\t"complet": false,\n\t"artists": [],\n\t"url": "https://demo.betabillet.tech/event/42eme-anniversaire-dadam-122129-1830/",\n\t"place": "DemoSt\xe8ne"\n}\n'})})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},9365:(e,t,n)=>{n.d(t,{A:()=>a});n(6540);var s=n(4164);const r={tabItem:"tabItem_Ymn6"};var i=n(4848);function a(e){let{children:t,hidden:n,className:a}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,s.A)(r.tabItem,a),hidden:n,children:t})}},1470:(e,t,n)=>{n.d(t,{A:()=>y});var s=n(6540),r=n(4164),i=n(3104),a=n(6347),l=n(205),o=n(7485),d=n(1682),c=n(679);function u(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:n,attributes:s,default:r}}=e;return{value:t,label:n,attributes:s,default:r}}))}(n);return function(e){const t=(0,d.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const r=(0,a.W6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o.aZ)(i),(0,s.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(r.location.search);t.set(i,e),r.replace({...r.location,search:t.toString()})}),[i,r])]}function x(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,i=h(e),[a,o]=(0,s.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:t,tabValues:i}))),[d,u]=m({queryString:n,groupId:r}),[x,j]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,i]=(0,c.Dv)(n);return[r,(0,s.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),b=(()=>{const e=d??x;return p({value:e,tabValues:i})?e:null})();(0,l.A)((()=>{b&&o(b)}),[b]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),j(e)}),[u,j,i]),tabValues:i}}var j=n(2303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(4848);function g(e){let{className:t,block:n,selectedValue:s,selectValue:a,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.a_)(),c=e=>{const t=e.currentTarget,n=o.indexOf(t),r=l[n].value;r!==s&&(d(t),a(r))},u=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;t=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;t=o[n]??o[o.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,ref:e=>o.push(e),onKeyDown:u,onClick:c,...i,className:(0,r.A)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":s===t}),children:n??t},t)}))})}function f(e){let{lazy:t,children:n,selectedValue:i}=e;const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===i));return e?(0,s.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function _(e){const t=x(e);return(0,v.jsxs)("div",{className:(0,r.A)("tabs-container",b.tabList),children:[(0,v.jsx)(g,{...t,...e}),(0,v.jsx)(f,{...t,...e})]})}function y(e){const t=(0,j.A)();return(0,v.jsx)(_,{...e,children:u(e.children)},String(t))}},8453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>l});var s=n(6540);const r={},i=s.createContext(r);function a(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/731a8187.98304e04.js b/assets/js/731a8187.98304e04.js new file mode 100644 index 00000000..675f04bf --- /dev/null +++ b/assets/js/731a8187.98304e04.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[2365],{6931:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var n=i(4848),o=i(8453);const s={sidebar_position:10,slug:"tarifs",title:"Prices, conditions and licenses",authors:"jonas",wiktags:["cashless","billetterie","ticketing","features","princing","prices","licences"]},r="Social and solidarity-based economic model.",a={id:"presentation/eco",title:"Prices, conditions and licenses",description:"TiBillet is a suite of free/open source software.",source:"@site/docs/presentation/eco.md",sourceDirName:"presentation",slug:"/presentation/tarifs",permalink:"/docs/presentation/tarifs",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/presentation/eco.md",tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10,slug:"tarifs",title:"Prices, conditions and licenses",authors:"jonas",wiktags:["cashless","billetterie","ticketing","features","princing","prices","licences"]},sidebar:"tutorialSidebar",previous:{title:"Philosophy",permalink:"/docs/presentation/philosophie"},next:{title:"Documentation utilisateur",permalink:"/docs/category/documentation-utilisateur"}},l={},c=[{value:"AGPLv3 license",id:"agplv3-license",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"social-and-solidarity-based-economic-model",children:"Social and solidarity-based economic model."})}),"\n",(0,n.jsx)(t.p,{children:"TiBillet is a suite of free/open source software."}),"\n",(0,n.jsx)(t.p,{children:"We do not charge a subscription or percentage on transactions:\nNo commission is taken from sales and\nyou receive all of your ticketing and point of sale revenue."}),"\n",(0,n.jsx)(t.p,{children:"You purchase the equipment you need, at cost price.\nWe support you in the implementation and use of those tools and we are particularly attentive to your needs and possible custom modifications."}),"\n",(0,n.jsx)(t.p,{children:"You are still responsible for financial transactions within your establishment (TiBillet does not\nact as a bank) but your users now have a card valid across the entire TiBillet network.\nTheir wallet is valid for life, with no subscription or reload fees, provided they use it regularly."}),"\n",(0,n.jsx)(t.p,{children:"Your events benefit from all of our communication tools (local and federated calendar, social networks, mailing list, etc.) and we regularly invite network users to take advantage of your events throughout the year."}),"\n",(0,n.jsx)(t.p,{children:"Only condition: to finance the activities of the cooperative and the maintenance of the network, we re-inject part of the money into the wallets which have been inactive for more than a year."}),"\n",(0,n.jsx)(t.p,{children:"Finally, if you wish, we will invite you to become a member of the cooperative (SCIC) so that you become an integral part of the TiBillet project and its entire network."}),"\n",(0,n.jsx)(t.h1,{id:"solo-model",children:"Solo model"}),"\n",(0,n.jsx)(t.p,{children:"You want to use TiBillet tools for your event, your venue or your association but without joining the network ?"}),"\n",(0,n.jsx)(t.p,{children:"No problem: All the TiBillet tools just for you, in a kit sent by post. Contact us !"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"mailto:contact@tibillet.re",children:"contact@tibillet.re"})}),"\n",(0,n.jsx)(t.h2,{id:"agplv3-license",children:"AGPLv3 license"}),"\n",(0,n.jsx)(t.p,{children:"The source code for all of the project's building blocks is open and available under the AGPLv3 license."}),"\n",(0,n.jsxs)(t.p,{children:["The code is published on Github: ",(0,n.jsx)(t.a,{href:"https://github.com/TiBillet",children:"https://github.com/TiBillet"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"The GNU Affero General Public License (GNU AGPL) is a modified version of version 3 of the regular GNU GPL."}),"\n",(0,n.jsx)(t.p,{children:"It has just one additional requirement: if you run a modified program on a server and let other users communicate with it, your server must also allow them to download the source code for the modified version while it is running."}),"\n",(0,n.jsxs)(t.p,{children:["Find out more : ",(0,n.jsx)(t.a,{href:"https://www.gnu.org/licenses/why-affero-gpl.fr.html",children:"https://www.gnu.org/licenses/why-affero-gpl.fr.html"})]}),"\n",(0,n.jsx)(t.p,{children:"The solution can be installed as is without any operational guarantee or after-sales service."}),"\n",(0,n.jsxs)(t.p,{children:["Do not hesitate to contact us by ",(0,n.jsx)(t.a,{href:"mailto:contact@tibillet.re",children:"mail"}),", or on ",(0,n.jsx)(t.a,{href:"https://discord.gg/ecb5jtP7vY",children:"Discord"})," if you have any questions."]}),"\n",(0,n.jsx)(t.p,{children:"Freely yours :)"})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>a});var n=i(6540);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/731a8187.ae3cce67.js b/assets/js/731a8187.ae3cce67.js deleted file mode 100644 index 3f0d9ffd..00000000 --- a/assets/js/731a8187.ae3cce67.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[2365],{6931:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var n=i(4848),o=i(8453);const s={sidebar_position:10,slug:"tarifs",title:"Prices, conditions and licenses",authors:"jonas",wiktags:["cashless","billetterie","ticketing","features","princing","prices","licences"]},r="Social and solidarity-based economic model.",a={id:"presentation/eco",title:"Prices, conditions and licenses",description:"TiBillet is a suite of free/open source software.",source:"@site/docs/presentation/eco.md",sourceDirName:"presentation",slug:"/presentation/tarifs",permalink:"/docs/presentation/tarifs",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/presentation/eco.md",tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10,slug:"tarifs",title:"Prices, conditions and licenses",authors:"jonas",wiktags:["cashless","billetterie","ticketing","features","princing","prices","licences"]},sidebar:"tutorialSidebar",previous:{title:"Philosophy",permalink:"/docs/presentation/philosophie"},next:{title:"Documentation utilisateur",permalink:"/docs/category/documentation-utilisateur"}},l={},c=[{value:"AGPLv3 license",id:"agplv3-license",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"social-and-solidarity-based-economic-model",children:"Social and solidarity-based economic model."})}),"\n",(0,n.jsx)(t.p,{children:"TiBillet is a suite of free/open source software."}),"\n",(0,n.jsx)(t.p,{children:"We do not charge a subscription or percentage on transactions:\nNo commission is taken from sales and\nyou receive all of your ticketing and point of sale revenue."}),"\n",(0,n.jsx)(t.p,{children:"You purchase the equipment you need, at cost price.\nWe support you in the implementation and use of those tools and we are particularly attentive to your needs and possible custom modifications."}),"\n",(0,n.jsx)(t.p,{children:"You are still responsible for financial transactions within your establishment (TiBillet does not\nact as a bank) but your users now have a card valid across the entire TiBillet network.\nTheir wallet is valid for life, with no subscription or reload fees, provided they use it regularly."}),"\n",(0,n.jsx)(t.p,{children:"Your events benefit from all of our communication tools (local and federated calendar, social networks, mailing list, etc.) and we regularly invite network users to take advantage of your events throughout the year."}),"\n",(0,n.jsx)(t.p,{children:"Only condition: to finance the activities of the cooperative and the maintenance of the network, we re-inject part of the money into the wallets which have been inactive for more than a year."}),"\n",(0,n.jsx)(t.p,{children:"Finally, if you wish, we will invite you to become a member of the cooperative (SCIC) so that you become an integral part of the TiBillet project and its entire network."}),"\n",(0,n.jsx)(t.h1,{id:"solo-model",children:"Solo model"}),"\n",(0,n.jsx)(t.p,{children:"You want to use TiBillet tools for your event, your venue or your association but without joining the network ?"}),"\n",(0,n.jsx)(t.p,{children:"No problem: All the TiBillet tools just for you, in a kit sent by post. Contact us !"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"mailto:contact@tibillet.re",children:"contact@tibillet.re"})}),"\n",(0,n.jsx)(t.h2,{id:"agplv3-license",children:"AGPLv3 license"}),"\n",(0,n.jsx)(t.p,{children:"The source code for all of the project's building blocks is open and available under the AGPLv3 license."}),"\n",(0,n.jsxs)(t.p,{children:["The code is published on Github: ",(0,n.jsx)(t.a,{href:"https://github.com/TiBillet",children:"https://github.com/TiBillet"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"The GNU Affero General Public License (GNU AGPL) is a modified version of version 3 of the regular GNU GPL."}),"\n",(0,n.jsx)(t.p,{children:"It has just one additional requirement: if you run a modified program on a server and let other users communicate with it, your server must also allow them to download the source code for the modified version while it is running."}),"\n",(0,n.jsxs)(t.p,{children:["Find out more : ",(0,n.jsx)(t.a,{href:"https://www.gnu.org/licenses/why-affero-gpl.fr.html",children:"https://www.gnu.org/licenses/why-affero-gpl.fr.html"})]}),"\n",(0,n.jsx)(t.p,{children:"The solution can be installed as is without any operational guarantee or after-sales service."}),"\n",(0,n.jsxs)(t.p,{children:["Do not hesitate to contact us by ",(0,n.jsx)(t.a,{href:"mailto:contact@tibillet.re",children:"mail"}),", or on ",(0,n.jsx)(t.a,{href:"https://discord.gg/ecb5jtP7vY",children:"Discord"})," if you have any questions."]}),"\n",(0,n.jsx)(t.p,{children:"Freely yours :)"})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>a});var n=i(6540);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7424cbe5.a4d2fc5b.js b/assets/js/7424cbe5.a4d2fc5b.js new file mode 100644 index 00000000..823f3f52 --- /dev/null +++ b/assets/js/7424cbe5.a4d2fc5b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[9833],{6875:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>h,contentTitle:()=>a,default:()=>d,frontMatter:()=>c,metadata:()=>r,toc:()=>o});var n=t(4848),i=t(8453);const c={sidebar_position:5,slug:"10inch",title:"Assembly 10inch",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},a="Body assembly 10inch :",r={id:"install/Raspberry Box/Hardware/05_10inch",title:"Assembly 10inch",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/05_10inch.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/10inch",permalink:"/docs/install/Raspberry Box/Hardware/10inch",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/install/Raspberry Box/Hardware/05_10inch.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"10inch",title:"Assembly 10inch",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Assembly 7inch back fix screw",permalink:"/docs/install/Raspberry Box/Hardware/7inchBackFix"},next:{title:"Self hosted TiBillet instances",permalink:"/docs/install/docker_install"}},h={},o=[];function l(e){const s={blockquote:"blockquote",br:"br",h1:"h1",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"body-assembly-10inch-",children:"Body assembly 10inch :"})}),"\n",(0,n.jsxs)(s.p,{children:["The assembly procedure remains more or less the same as 7inch back fix, so we'll go through it more quickly .",(0,n.jsx)(s.br,{}),"\n","The main difference is the screen mounting system,",(0,n.jsx)(s.br,{}),"\n","but remember:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"don't overtighten the Roofing bolt & nut 5X16"}),"\n",(0,n.jsx)(s.li,{children:"Use spacers to fix the NFC card."}),"\n"]}),"\n",(0,n.jsxs)(s.blockquote,{children:["\n",(0,n.jsx)(s.p,{children:"Note: you'll need an additional USB-MicroUSB cable, because this time it's not the Pi that powers the screen, but the screen that powers the Pi."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"10inch_1.jpg",src:t(673).A+"",width:"1612",height:"1209"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the screen on the foam :\n",(0,n.jsx)(s.img,{alt:"10inch_2.jpg",src:t(326).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:['Attach the "VESA" plate :',(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"10inch_3.jpg",src:t(6787).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.blockquote,{children:["\n",(0,n.jsxs)(s.blockquote,{children:["\n",(0,n.jsxs)(s.p,{children:["Note: If, like me, the screws you have are too long, use the screw nuts:\n",(0,n.jsx)(s.img,{alt:"10inch_4.jpg",src:t(3952).A+"",width:"1612",height:"1209"}),(0,n.jsx)(s.br,{}),"\n","Be careful not to tighten it too much, as this could press the buttons on the back of the screen."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the sides in the notches on the front panel and on the VESA plate :\n",(0,n.jsx)(s.img,{alt:"10inch_7.jpg",src:t(7567).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Take the assembly, taking care that the parts do not come loose, then position it normally :",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"10inch_8.jpg",src:t(5852).A+"",width:"4032",height:"3024"})]}),"\n"]}),"\n",(0,n.jsx)(s.li,{}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the front planel Roofing bolt & nut 5X16 :\n",(0,n.jsx)(s.img,{alt:"10inch_9.jpg",src:t(6278).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the top :\n",(0,n.jsx)(s.img,{alt:"10inch_10.jpg",src:t(7085).A+"",width:"4032",height:"3024"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Fix the raspberry support and the NFC card using the 2X10 screws and the spacers :\n",(0,n.jsx)(s.img,{alt:"Fix_support.png",src:t(1897).A+"",width:"1292",height:"1064"}),"\n",(0,n.jsx)(s.img,{alt:"Coner_support_pi.png",src:t(5783).A+"",width:"1612",height:"1209"}),"\n",(0,n.jsx)(s.img,{alt:"Fix_NFC_card.png",src:t(9086).A+"",width:"884",height:"1050"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["like for the 7 inch Slightly bend the part of the back face to relax the part that will be curved.",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"Assembly_13.jpg",src:t(5779).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the rear panel in the notches (the sides must be able to move slightly, if you have tightened the Roofing bolt & nut 5X16 too much, loosen them slightly).",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"Assembly_14.jpg",src:t(2467).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Position the curved part of the rear face, you will have to force a little, but be careful not like a barbarian :)",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"Assembly_15.jpg",src:t(4077).A+"",width:"1612",height:"1209"}),"\n",(0,n.jsx)(s.img,{alt:"Assembly_16.jpg",src:t(4178).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},673:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_1-af7f28ae25cd0072a76da0c13ba34cc3.jpg"},7085:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_10-0bafe70c9869f7f65b63173d9754be4d.jpg"},326:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_2-c695cbde3ee9bba8281b044b2d4fd960.jpg"},6787:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_3-b9ac55164e8dd35c98c92d0e4931a960.jpg"},3952:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_4-b536093e454739359f7a1e2fe556275b.jpg"},7567:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_7-a729ec33cdc75cf88c289d5fc992e26f.jpg"},5852:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_8-559d4cb591bb4ba6b5a10472f222b484.jpg"},6278:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_9-e60a8e82cd9ecf5585a2d5864d1c878e.jpg"},5779:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Assembly_13-ddf211b5c59fb90e9c754cc17390e6e9.jpg"},2467:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Assembly_14-01b508b89ea5216614809ff469f1beda.jpg"},4077:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Assembly_15-1223d2ba39b4be4ccbaf14ffdaf3fa51.jpg"},4178:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Assembly_16-14035a9abcc167c6f10bb18d6bf28b49.jpg"},5783:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Coner_support_pi-522b3b3a0d46742fa95a66843084c17b.png"},9086:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Fix_NFC_card-5d5a011bf17102e789eae57bf585f416.png"},1897:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Fix_support-4e0cb01471e80c3acaed255a3654bdc3.png"},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>r});var n=t(6540);const i={},c=n.createContext(i);function a(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7424cbe5.c4ed633e.js b/assets/js/7424cbe5.c4ed633e.js deleted file mode 100644 index 99cffce7..00000000 --- a/assets/js/7424cbe5.c4ed633e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[9833],{6875:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>h,contentTitle:()=>a,default:()=>d,frontMatter:()=>c,metadata:()=>r,toc:()=>o});var n=t(4848),i=t(8453);const c={sidebar_position:5,slug:"10inch",title:"Assembly 10inch",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},a="Body assembly 10inch :",r={id:"install/Raspberry Box/Hardware/05_10inch",title:"Assembly 10inch",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/05_10inch.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/10inch",permalink:"/docs/install/Raspberry Box/Hardware/10inch",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/install/Raspberry Box/Hardware/05_10inch.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"10inch",title:"Assembly 10inch",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Assembly 7inch back fix screw",permalink:"/docs/install/Raspberry Box/Hardware/7inchBackFix"},next:{title:"Self hosted TiBillet instances",permalink:"/docs/install/docker_install"}},h={},o=[];function l(e){const s={blockquote:"blockquote",br:"br",h1:"h1",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"body-assembly-10inch-",children:"Body assembly 10inch :"})}),"\n",(0,n.jsxs)(s.p,{children:["The assembly procedure remains more or less the same as 7inch back fix, so we'll go through it more quickly .",(0,n.jsx)(s.br,{}),"\n","The main difference is the screen mounting system,",(0,n.jsx)(s.br,{}),"\n","but remember:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"don't overtighten the Roofing bolt & nut 5X16"}),"\n",(0,n.jsx)(s.li,{children:"Use spacers to fix the NFC card."}),"\n"]}),"\n",(0,n.jsxs)(s.blockquote,{children:["\n",(0,n.jsx)(s.p,{children:"Note: you'll need an additional USB-MicroUSB cable, because this time it's not the Pi that powers the screen, but the screen that powers the Pi."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"10inch_1.jpg",src:t(673).A+"",width:"1612",height:"1209"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the screen on the foam :\n",(0,n.jsx)(s.img,{alt:"10inch_2.jpg",src:t(326).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:['Attach the "VESA" plate :',(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"10inch_3.jpg",src:t(6787).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.blockquote,{children:["\n",(0,n.jsxs)(s.blockquote,{children:["\n",(0,n.jsxs)(s.p,{children:["Note: If, like me, the screws you have are too long, use the screw nuts:\n",(0,n.jsx)(s.img,{alt:"10inch_4.jpg",src:t(3952).A+"",width:"1612",height:"1209"}),(0,n.jsx)(s.br,{}),"\n","Be careful not to tighten it too much, as this could press the buttons on the back of the screen."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the sides in the notches on the front panel and on the VESA plate :\n",(0,n.jsx)(s.img,{alt:"10inch_7.jpg",src:t(7567).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Take the assembly, taking care that the parts do not come loose, then position it normally :",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"10inch_8.jpg",src:t(5852).A+"",width:"4032",height:"3024"})]}),"\n"]}),"\n",(0,n.jsx)(s.li,{}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the front planel Roofing bolt & nut 5X16 :\n",(0,n.jsx)(s.img,{alt:"10inch_9.jpg",src:t(6278).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the top :\n",(0,n.jsx)(s.img,{alt:"10inch_10.jpg",src:t(7085).A+"",width:"4032",height:"3024"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Fix the raspberry support and the NFC card using the 2X10 screws and the spacers :\n",(0,n.jsx)(s.img,{alt:"Fix_support.png",src:t(1897).A+"",width:"1292",height:"1064"}),"\n",(0,n.jsx)(s.img,{alt:"Coner_support_pi.png",src:t(5783).A+"",width:"1612",height:"1209"}),"\n",(0,n.jsx)(s.img,{alt:"Fix_NFC_card.png",src:t(9086).A+"",width:"884",height:"1050"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["like for the 7 inch Slightly bend the part of the back face to relax the part that will be curved.",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"Assembly_13.jpg",src:t(5779).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Place the rear panel in the notches (the sides must be able to move slightly, if you have tightened the Roofing bolt & nut 5X16 too much, loosen them slightly).",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"Assembly_14.jpg",src:t(2467).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Position the curved part of the rear face, you will have to force a little, but be careful not like a barbarian :)",(0,n.jsx)(s.br,{}),"\n",(0,n.jsx)(s.img,{alt:"Assembly_15.jpg",src:t(4077).A+"",width:"1612",height:"1209"}),"\n",(0,n.jsx)(s.img,{alt:"Assembly_16.jpg",src:t(4178).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},673:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_1-af7f28ae25cd0072a76da0c13ba34cc3.jpg"},7085:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_10-0bafe70c9869f7f65b63173d9754be4d.jpg"},326:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_2-c695cbde3ee9bba8281b044b2d4fd960.jpg"},6787:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_3-b9ac55164e8dd35c98c92d0e4931a960.jpg"},3952:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_4-b536093e454739359f7a1e2fe556275b.jpg"},7567:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_7-a729ec33cdc75cf88c289d5fc992e26f.jpg"},5852:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_8-559d4cb591bb4ba6b5a10472f222b484.jpg"},6278:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/10inch_9-e60a8e82cd9ecf5585a2d5864d1c878e.jpg"},5779:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Assembly_13-ddf211b5c59fb90e9c754cc17390e6e9.jpg"},2467:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Assembly_14-01b508b89ea5216614809ff469f1beda.jpg"},4077:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Assembly_15-1223d2ba39b4be4ccbaf14ffdaf3fa51.jpg"},4178:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Assembly_16-14035a9abcc167c6f10bb18d6bf28b49.jpg"},5783:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Coner_support_pi-522b3b3a0d46742fa95a66843084c17b.png"},9086:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Fix_NFC_card-5d5a011bf17102e789eae57bf585f416.png"},1897:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Fix_support-4e0cb01471e80c3acaed255a3654bdc3.png"},8453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>r});var n=t(6540);const i={},c=n.createContext(i);function a(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/74b3184d.eea355dc.js b/assets/js/74b3184d.eea355dc.js deleted file mode 100644 index 3fec0652..00000000 --- a/assets/js/74b3184d.eea355dc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7972],{977:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var s=i(4848),n=i(8453);const a={sidebar_position:20,slug:"admin_add_article",title:"Articles",description:"Add one or more items in categories and points of sale and assign them a price.",keywords:["cashless","android","articles","items"],wiktags:["cashless","android","articles","items"],authors:"Axel"},r=void 0,o={id:"Utilisateur/Cashless/20 Articles",title:"Articles",description:"Add one or more items in categories and points of sale and assign them a price.",source:"@site/docs/Utilisateur/Cashless/20 Articles.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_add_article",permalink:"/docs/Utilisateur/Cashless/admin_add_article",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/20 Articles.md",tags:[],version:"current",sidebarPosition:20,frontMatter:{sidebar_position:20,slug:"admin_add_article",title:"Articles",description:"Add one or more items in categories and points of sale and assign them a price.",keywords:["cashless","android","articles","items"],wiktags:["cashless","android","articles","items"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Article categories",permalink:"/docs/Utilisateur/Cashless/admin_add_categorie"},next:{title:"Printing orders",permalink:"/docs/Utilisateur/Cashless/impression_preparation"}},l={},c=[{value:"1- Create a new article",id:"1--create-a-new-article",level:2},{value:"2- Add it to a point of sale",id:"2--add-it-to-a-point-of-sale",level:2}];function d(e){const t={admonition:"admonition",h2:"h2",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"This is where you choose which items will be present in your interfaces as well as their price and the points\nof sale to which they are attached."}),"\n",(0,s.jsx)(t.h2,{id:"1--create-a-new-article",children:"1- Create a new article"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Click on \u201cArticles and prices\u201d in the left menu."}),"\n",(0,s.jsx)(t.li,{children:'Click on the "Add article" button at the top right.'}),"\n",(0,s.jsx)(t.li,{children:"Enter the sale price."}),"\n",(0,s.jsx)(t.li,{children:"The purchase price is used to estimate the profits of an evening displayed on the daily accounting report. This is not a mandatory value."}),"\n",(0,s.jsx)(t.li,{children:"Enter the category of the item (This determines how it is displayed on the cashless interface. See Category.)"}),"\n",(0,s.jsx)(t.li,{children:"Change the text color if you want better display contrast."}),"\n",(0,s.jsx)(t.li,{children:"Save"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"2--add-it-to-a-point-of-sale",children:"2- Add it to a point of sale"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Click on the \u201cPoints of sale\u201d category in the left column."}),"\n",(0,s.jsx)(t.li,{children:"Click on the name of an existing point of sale to which you want to add your item."}),"\n",(0,s.jsx)(t.li,{children:'Enter the articles that will be available in the "Articles" field. You can select several by holding the ctrl key.'}),"\n",(0,s.jsx)(t.li,{children:"Save"}),"\n"]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsx)(t.p,{children:"For a point of sale to be visible in the interface, it must contain articles.\nIt is best to create the items first and then assign them to a point of sale."})}),"\n",(0,s.jsx)("video",{width:"100%",controls:!0,src:"/img/addarticles.mp4"})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>o});var s=i(6540);const n={},a=s.createContext(n);function r(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/74b3184d.f93c323a.js b/assets/js/74b3184d.f93c323a.js new file mode 100644 index 00000000..1875a7d2 --- /dev/null +++ b/assets/js/74b3184d.f93c323a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7972],{977:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var s=i(4848),n=i(8453);const a={sidebar_position:20,slug:"admin_add_article",title:"Articles",description:"Add one or more items in categories and points of sale and assign them a price.",keywords:["cashless","android","articles","items"],wiktags:["cashless","android","articles","items"],authors:"Axel"},r=void 0,o={id:"Utilisateur/Cashless/20 Articles",title:"Articles",description:"Add one or more items in categories and points of sale and assign them a price.",source:"@site/docs/Utilisateur/Cashless/20 Articles.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_add_article",permalink:"/docs/Utilisateur/Cashless/admin_add_article",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/20 Articles.md",tags:[],version:"current",sidebarPosition:20,frontMatter:{sidebar_position:20,slug:"admin_add_article",title:"Articles",description:"Add one or more items in categories and points of sale and assign them a price.",keywords:["cashless","android","articles","items"],wiktags:["cashless","android","articles","items"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Article categories",permalink:"/docs/Utilisateur/Cashless/admin_add_categorie"},next:{title:"Printing orders",permalink:"/docs/Utilisateur/Cashless/impression_preparation"}},l={},c=[{value:"1- Create a new article",id:"1--create-a-new-article",level:2},{value:"2- Add it to a point of sale",id:"2--add-it-to-a-point-of-sale",level:2}];function d(e){const t={admonition:"admonition",h2:"h2",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"This is where you choose which items will be present in your interfaces as well as their price and the points\nof sale to which they are attached."}),"\n",(0,s.jsx)(t.h2,{id:"1--create-a-new-article",children:"1- Create a new article"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Click on \u201cArticles and prices\u201d in the left menu."}),"\n",(0,s.jsx)(t.li,{children:'Click on the "Add article" button at the top right.'}),"\n",(0,s.jsx)(t.li,{children:"Enter the sale price."}),"\n",(0,s.jsx)(t.li,{children:"The purchase price is used to estimate the profits of an evening displayed on the daily accounting report. This is not a mandatory value."}),"\n",(0,s.jsx)(t.li,{children:"Enter the category of the item (This determines how it is displayed on the cashless interface. See Category.)"}),"\n",(0,s.jsx)(t.li,{children:"Change the text color if you want better display contrast."}),"\n",(0,s.jsx)(t.li,{children:"Save"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"2--add-it-to-a-point-of-sale",children:"2- Add it to a point of sale"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Click on the \u201cPoints of sale\u201d category in the left column."}),"\n",(0,s.jsx)(t.li,{children:"Click on the name of an existing point of sale to which you want to add your item."}),"\n",(0,s.jsx)(t.li,{children:'Enter the articles that will be available in the "Articles" field. You can select several by holding the ctrl key.'}),"\n",(0,s.jsx)(t.li,{children:"Save"}),"\n"]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsx)(t.p,{children:"For a point of sale to be visible in the interface, it must contain articles.\nIt is best to create the items first and then assign them to a point of sale."})}),"\n",(0,s.jsx)("video",{width:"100%",controls:!0,src:"/img/addarticles.mp4"})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>o});var s=i(6540);const n={},a=s.createContext(n);function r(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/79300ddd.7ed17a5a.js b/assets/js/79300ddd.7ed17a5a.js deleted file mode 100644 index 30b65502..00000000 --- a/assets/js/79300ddd.7ed17a5a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[4078],{3834:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>n,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>m});var r=i(4848),s=i(8453);const o={sidebar_position:41,slug:"iframe",title:"Integration",description:"Integrate your reservations on your website.",keywords:["ticketing","billetterie","webhook","api","reservations","booking"],wiktags:["ticketing","billetterie","webhook","api","reservations","booking"],image:"https://tibillet.org/img/embed_email.jpg",authors:"Jonas"},n=void 0,l={id:"Utilisateur/Billetterie/41 Int\xe9gration",title:"Integration",description:"Integrate your reservations on your website.",source:"@site/docs/Utilisateur/Billetterie/41 Int\xe9gration.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/iframe",permalink:"/docs/Utilisateur/Billetterie/iframe",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Billetterie/41 Int\xe9gration.md",tags:[],version:"current",sidebarPosition:41,frontMatter:{sidebar_position:41,slug:"iframe",title:"Integration",description:"Integrate your reservations on your website.",keywords:["ticketing","billetterie","webhook","api","reservations","booking"],wiktags:["ticketing","billetterie","webhook","api","reservations","booking"],image:"https://tibillet.org/img/embed_email.jpg",authors:"Jonas"},sidebar:"tutorialSidebar",previous:{title:"Webhook",permalink:"/docs/Utilisateur/Billetterie/webhook"},next:{title:"RSS Feed",permalink:"/docs/Utilisateur/Billetterie/rss"}},a={},m=[];function d(e){const t={a:"a",code:"code",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"You can integrate ticketing into your website using an iframe tag by modifying the appropriate route."}),"\n",(0,r.jsx)(t.p,{children:"Exemple :"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Membership : ",(0,r.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/memberships/",children:"https://lespass.demo.tibillet.org/memberships/"})]}),"\n",(0,r.jsxs)(t.li,{children:["embed : ",(0,r.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/memberships/?embed=true",children:"https://lespass.demo.tibillet.org/memberships/?embed=true"})]}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-html",metastring:'title="iframe"',children:'\n'})}),"\n",(0,r.jsx)("iframe",{src:"https://lespass.demo.tibillet.org/memberships/?embed=true",width:"100%",height:"1000px",frameborder:"0"})]})}function c(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>n,x:()=>l});var r=i(6540);const s={},o=r.createContext(s);function n(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:n(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/79300ddd.eb0ee53c.js b/assets/js/79300ddd.eb0ee53c.js new file mode 100644 index 00000000..0130b1db --- /dev/null +++ b/assets/js/79300ddd.eb0ee53c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[4078],{3834:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>m});var r=i(4848),s=i(8453);const o={sidebar_position:41,slug:"iframe",title:"Integration",description:"Integrate your reservations on your website.",keywords:["ticketing","billetterie","webhook","api","reservations","booking"],wiktags:["ticketing","billetterie","webhook","api","reservations","booking"],image:"https://tibillet.org/img/embed_email.jpg",authors:"Jonas"},n=void 0,a={id:"Utilisateur/Billetterie/41 Int\xe9gration",title:"Integration",description:"Integrate your reservations on your website.",source:"@site/docs/Utilisateur/Billetterie/41 Int\xe9gration.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/iframe",permalink:"/docs/Utilisateur/Billetterie/iframe",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Billetterie/41 Int\xe9gration.md",tags:[],version:"current",sidebarPosition:41,frontMatter:{sidebar_position:41,slug:"iframe",title:"Integration",description:"Integrate your reservations on your website.",keywords:["ticketing","billetterie","webhook","api","reservations","booking"],wiktags:["ticketing","billetterie","webhook","api","reservations","booking"],image:"https://tibillet.org/img/embed_email.jpg",authors:"Jonas"},sidebar:"tutorialSidebar",previous:{title:"Webhook",permalink:"/docs/Utilisateur/Billetterie/webhook"},next:{title:"RSS Feed",permalink:"/docs/Utilisateur/Billetterie/rss"}},l={},m=[];function d(e){const t={a:"a",code:"code",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"You can integrate ticketing into your website using an iframe tag by modifying the appropriate route."}),"\n",(0,r.jsx)(t.p,{children:"Exemple :"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Membership : ",(0,r.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/memberships/",children:"https://lespass.demo.tibillet.org/memberships/"})]}),"\n",(0,r.jsxs)(t.li,{children:["embed : ",(0,r.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/memberships/?embed=true",children:"https://lespass.demo.tibillet.org/memberships/?embed=true"})]}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-html",metastring:'title="iframe"',children:'\n'})}),"\n",(0,r.jsx)("iframe",{src:"https://lespass.demo.tibillet.org/memberships/?embed=true",width:"100%",height:"1000px",frameborder:"0"})]})}function c(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>n,x:()=>a});var r=i(6540);const s={},o=r.createContext(s);function n(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:n(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ec4066a.a36e4cdd.js b/assets/js/7ec4066a.a36e4cdd.js deleted file mode 100644 index abac9945..00000000 --- a/assets/js/7ec4066a.a36e4cdd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7967],{4774:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>n,toc:()=>l});var s=i(4848),r=i(8453);const o={sidebar_position:15,slug:"admin_add_categorie",title:"Article categories",description:"Add one or more article categories.",keywords:["cashless","android","articles","categories"],wiktags:["cashless","android","articles","categories"],authors:"Axel"},a=void 0,n={id:"Utilisateur/Cashless/15 Categories",title:"Article categories",description:"Add one or more article categories.",source:"@site/docs/Utilisateur/Cashless/15 Categories.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_add_categorie",permalink:"/docs/Utilisateur/Cashless/admin_add_categorie",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/15 Categories.md",tags:[],version:"current",sidebarPosition:15,frontMatter:{sidebar_position:15,slug:"admin_add_categorie",title:"Article categories",description:"Add one or more article categories.",keywords:["cashless","android","articles","categories"],wiktags:["cashless","android","articles","categories"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Points of sale",permalink:"/docs/Utilisateur/Cashless/admin_add_pos"},next:{title:"Articles",permalink:"/docs/Utilisateur/Cashless/admin_add_article"}},c={},l=[{value:"Create a new article category",id:"create-a-new-article-category",level:2}];function d(e){const t={a:"a",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"Article categories are useful for:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Sort by category on the cashless interface."}),"\n",(0,s.jsx)(t.li,{children:"Determine the background colors of the article icon."}),"\n",(0,s.jsx)(t.li,{children:"Categorize items for preparations. For example for printing orders in the kitchen or at the bar."}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"create-a-new-article-category",children:"Create a new article category"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Click on the \u201cItem Category\u201d category in the left column."}),"\n",(0,s.jsx)(t.li,{children:'Click on the "Add Article Category" button at the top right.'}),"\n",(0,s.jsx)(t.li,{children:"Enter the category name, text and background color for the corresponding articles."}),"\n",(0,s.jsxs)(t.li,{children:["Choose an icon that will be displayed on the cashless interface shortcuts.","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["All icons are listed on ",(0,s.jsx)(t.a,{href:"https://fontawesome.com/v4/icons/",children:"https://fontawesome.com/v4/icons/"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)("video",{width:"100%",controls:!0,src:"/img/addcategories.mp4"})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>a,x:()=>n});var s=i(6540);const r={},o=s.createContext(r);function a(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function n(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ec4066a.aac526ff.js b/assets/js/7ec4066a.aac526ff.js new file mode 100644 index 00000000..9902ba15 --- /dev/null +++ b/assets/js/7ec4066a.aac526ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7967],{4774:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>n,toc:()=>l});var s=i(4848),r=i(8453);const o={sidebar_position:15,slug:"admin_add_categorie",title:"Article categories",description:"Add one or more article categories.",keywords:["cashless","android","articles","categories"],wiktags:["cashless","android","articles","categories"],authors:"Axel"},a=void 0,n={id:"Utilisateur/Cashless/15 Categories",title:"Article categories",description:"Add one or more article categories.",source:"@site/docs/Utilisateur/Cashless/15 Categories.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_add_categorie",permalink:"/docs/Utilisateur/Cashless/admin_add_categorie",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/15 Categories.md",tags:[],version:"current",sidebarPosition:15,frontMatter:{sidebar_position:15,slug:"admin_add_categorie",title:"Article categories",description:"Add one or more article categories.",keywords:["cashless","android","articles","categories"],wiktags:["cashless","android","articles","categories"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Points of sale",permalink:"/docs/Utilisateur/Cashless/admin_add_pos"},next:{title:"Articles",permalink:"/docs/Utilisateur/Cashless/admin_add_article"}},c={},l=[{value:"Create a new article category",id:"create-a-new-article-category",level:2}];function d(e){const t={a:"a",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"Article categories are useful for:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Sort by category on the cashless interface."}),"\n",(0,s.jsx)(t.li,{children:"Determine the background colors of the article icon."}),"\n",(0,s.jsx)(t.li,{children:"Categorize items for preparations. For example for printing orders in the kitchen or at the bar."}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"create-a-new-article-category",children:"Create a new article category"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Click on the \u201cItem Category\u201d category in the left column."}),"\n",(0,s.jsx)(t.li,{children:'Click on the "Add Article Category" button at the top right.'}),"\n",(0,s.jsx)(t.li,{children:"Enter the category name, text and background color for the corresponding articles."}),"\n",(0,s.jsxs)(t.li,{children:["Choose an icon that will be displayed on the cashless interface shortcuts.","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["All icons are listed on ",(0,s.jsx)(t.a,{href:"https://fontawesome.com/v4/icons/",children:"https://fontawesome.com/v4/icons/"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)("video",{width:"100%",controls:!0,src:"/img/addcategories.mp4"})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>a,x:()=>n});var s=i(6540);const r={},o=s.createContext(r);function a(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function n(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7f42cc60.19e19eea.js b/assets/js/7f42cc60.19e19eea.js new file mode 100644 index 00000000..3a61a8c5 --- /dev/null +++ b/assets/js/7f42cc60.19e19eea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[2074],{5748:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>o});var i=t(4848),s=t(8453);const r={sidebar_position:3,slug:"tenants",title:"Tenants",description:"Cr\xe9ez et listez les instances de votre serveur multi-tenant",keywords:["cashless","billetterie","ticketing","cli","curl","python","tenant","saas"],wiktags:["cashless","billetterie","ticketing","curl","python","tenant","saas"],authors:"jonas"},a=void 0,l={id:"api/03 Tenants",title:"Tenants",description:"Cr\xe9ez et listez les instances de votre serveur multi-tenant",source:"@site/docs/api/03 Tenants.md",sourceDirName:"api",slug:"/api/tenants",permalink:"/docs/api/tenants",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/api/03 Tenants.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,slug:"tenants",title:"Tenants",description:"Cr\xe9ez et listez les instances de votre serveur multi-tenant",keywords:["cashless","billetterie","ticketing","cli","curl","python","tenant","saas"],wiktags:["cashless","billetterie","ticketing","curl","python","tenant","saas"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"API Keys",permalink:"/docs/api/apikey"},next:{title:"Produits",permalink:"/docs/api/products"}},d={},o=[{value:"Base de donn\xe9es partag\xe9e, sch\xe9mas distincts.",id:"base-de-donn\xe9es-partag\xe9e-sch\xe9mas-distincts",level:2},{value:"Cat\xe9gories",id:"cat\xe9gories",level:2},{value:"Lieu",id:"lieu",level:3},{value:"Festival",id:"festival",level:3},{value:"Projet",id:"projet",level:3},{value:"Producteurs",id:"producteurs",level:3},{value:"Meta : L'agenda f\xe9d\xe9r\xe9",id:"meta--lagenda-f\xe9d\xe9r\xe9",level:3},{value:"Root",id:"root",level:3},{value:"Donn\xe9es initiales",id:"donn\xe9es-initiales",level:2},{value:"Lister les tenants",id:"lister-les-tenants",level:2},{value:"Cr\xe9ation de nouveau tenant",id:"cr\xe9ation-de-nouveau-tenant",level:2},{value:"example",id:"example",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"base-de-donn\xe9es-partag\xe9e-sch\xe9mas-distincts",children:"Base de donn\xe9es partag\xe9e, sch\xe9mas distincts."}),"\n",(0,i.jsx)(n.p,{children:"TiBillet est construit autour d'une architecture multi-tenant. Il s'agit d'une fonctionnalit\xe9 essentielle pour toute\napplication de type \"Software-as-a-Service\"."}),"\n",(0,i.jsx)(n.p,{children:"C'est une approche semi-isol\xe9e : Base de donn\xe9es partag\xe9e, sch\xe9mas distincts. Une base de donn\xe9es pour tous les\nlocataires, mais un sch\xe9ma par locataire."}),"\n",(0,i.jsxs)(n.p,{children:["Pour plus d'information : ",(0,i.jsx)(n.a,{href:"https://django-tenants.readthedocs.io/",children:"https://django-tenants.readthedocs.io/"})]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsx)(n.p,{children:"Pour cr\xe9er de nouveaux tenants, vous pouvez utiliser l'api, mais tout aussi bien rediriger vers le formulaire de cr\xe9ation en ligne."}),(0,i.jsxs)(n.p,{children:["ex : ",(0,i.jsx)(n.a,{href:"https://agenda.tibillet.ovh/tenant/new/?email=jturbeaux@pm.me&name=jojo",children:"https://agenda.tibillet.ovh/tenant/new/?email=jturbeaux@pm.me&name=jojo"}),"\nEn option, vous pouvez ajouter les arguments :"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"name = Nom de la structure"}),"\n",(0,i.jsx)(n.li,{children:"email = Email du futur administrateur"}),"\n"]}),(0,i.jsxs)(n.p,{children:["N'h\xe9sitez pas \xe0 venir discuter avec nous sur ",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://discord.gg/7FJvtYx",children:"Discord"})})," ou ",(0,i.jsx)(n.a,{href:"https://matrix.to/#/#tibillet:tiers-lieux.org",children:"Matrix"})," pour avoir plus d'informations !"]})]}),"\n",(0,i.jsx)(n.h2,{id:"cat\xe9gories",children:"Cat\xe9gories"}),"\n",(0,i.jsx)(n.p,{children:"Nous avons d\xe9fini plusieurs cat\xe9gories de tenant qui determinent les comportements et templates."}),"\n",(0,i.jsx)(n.h3,{id:"lieu",children:"Lieu"}),"\n",(0,i.jsx)(n.p,{children:"Une salle de spectacle, un caf\xe9 concert, un tiers lieux..."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Un nom."}),"\n",(0,i.jsx)(n.li,{children:"Un lieu."}),"\n",(0,i.jsx)(n.li,{children:"Une sc\xe8ne."}),"\n",(0,i.jsx)(n.li,{children:"Un ou plusieurs artistes par soir."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "S"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"festival",children:"Festival"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Un nom."}),"\n",(0,i.jsx)(n.li,{children:"Un ou plusieurs lieux."}),"\n",(0,i.jsx)(n.li,{children:"Une ou plusieurs sc\xe8nes."}),"\n",(0,i.jsx)(n.li,{children:"Un ou plusieurs artistes par soir."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "F"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"projet",children:"Projet"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Un nom."}),"\n",(0,i.jsx)(n.li,{children:"Plusieurs lieux et sc\xe8nes sur plusieurs dates."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "A"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"producteurs",children:"Producteurs"}),"\n",(0,i.jsx)(n.p,{children:"Ex : Boite de production, agent, compagnie de th\xe9atre, tourneur"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Plusieurs projets."}),"\n",(0,i.jsx)(n.li,{children:"Plusieurs lieux et sc\xe8nes."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "P"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"meta--lagenda-f\xe9d\xe9r\xe9",children:"Meta : L'agenda f\xe9d\xe9r\xe9"}),"\n",(0,i.jsx)(n.p,{children:"Plusieurs instances se f\xe9d\xe8rent pour cr\xe9er un agenda \xe9v\xe8nementiel commun."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Plusieurs lieux"}),"\n",(0,i.jsx)(n.li,{children:"Plusieurs projets"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "M"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"root",children:"Root"}),"\n",(0,i.jsx)(n.p,{children:"Une seule instance par serveur.\nG\xe8re les tables communes \xe0 tous les tenants :"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Cartes NFC"}),"\n",(0,i.jsx)(n.li,{children:"Utilisateurs"}),"\n",(0,i.jsx)(n.li,{children:"Super-users"}),"\n",(0,i.jsx)(n.li,{children:"Gestion des domaines principaux et sous domaines multi tenant."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "R"\n'})}),"\n",(0,i.jsx)(n.h2,{id:"donn\xe9es-initiales",children:"Donn\xe9es initiales"}),"\n",(0,i.jsx)(n.p,{children:"Lors de l'installation d'un nouveau serveur Django, une instance ROOT et une META sont d\xe9ja pr\xe9sente."}),"\n",(0,i.jsx)(n.p,{children:"S'il ne peut y avoir qu'un seul ROOT, plusieurs instances META sont possibles pour un agenda f\xe9d\xe9r\xe9 autour d'une\ncommunaut\xe9 interne."}),"\n",(0,i.jsx)(n.p,{children:"La premi\xe8re META initalement cr\xe9\xe9e est utile pour lister toutes les autres instances du serveur Django. Le sous domaine\npar defauilt est \"meta\". Il est possible de changer l'adresse avant l'installation : modifiez le fichier .env pr\xe9sent \xe0\nla racine du docker-compose. Il est aussi possible de changer l'adresse post install dans l'administration ROOT."}),"\n",(0,i.jsx)(n.h2,{id:"lister-les-tenants",children:"Lister les tenants"}),"\n",(0,i.jsx)(n.p,{children:"\xc0 lancer sur la premi\xe8re META."}),"\n",(0,i.jsx)(n.p,{children:"Aucune autorisation n'est n\xe9c\xe9ssaire pour lister les tenants d'un serveur."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:"# all tenant :\nGET https://meta./api/place/\n\n# retrieve one tenant :\nGET https://meta./api/place/\n"})}),"\n",(0,i.jsx)(n.h2,{id:"cr\xe9ation-de-nouveau-tenant",children:"Cr\xe9ation de nouveau tenant"}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["BETA en cours : En plus de l'autorisation sp\xe9ficifique de la cl\xe9 d'Api, l'utilisateur enregistr\xe9 doit avoir une\nautorisation sp\xe9ciale pour la cr\xe9ation de tenant. La case \"Peux cr\xe9er des tenants\" doit \xeatre coch\xe9 dans l'interface d'administration ROOT : ",(0,i.jsx)(n.code,{children:"https://www./admin/"}),"."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"POST https://meta./api/place/\n"})}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"type"}),(0,i.jsx)(n.th,{children:"Requis"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"organisation"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"short_description"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"long_description"}),(0,i.jsx)(n.td,{children:"decimal"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"phone"}),(0,i.jsx)(n.td,{children:"int"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"email"}),(0,i.jsx)(n.td,{children:"email"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"site_web"}),(0,i.jsx)(n.td,{children:"url"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"postal_code"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"img_url"}),(0,i.jsx)(n.td,{children:"url"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"logo_url"}),(0,i.jsx)(n.td,{children:"url"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"categorie"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"adress"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"N"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"city"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"N"})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"example",children:"example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'import requests\n\nurl = "http://meta.tibillet.local/api/place/"\n\npayload = {\n "organisation": "Le Bisik",\n "short_description": " Le lieu des musiques actuelles de Saint-Beno\xeet",\n "long_description": "ACTER (Agir pour la Culture et le Tourisme dans l\u2019Est de La R\xe9union) est n\xe9e il y cinq ans de la volont\xe9 farouche de porter un projet culturel populaire et de cr\xe9er un lieu de diffusion original de Musiques Actuelles dans l\u2019Est de La R\xe9union. Avec le Bisik nous avons invent\xe9 un tiers-lieu original, un espace de convivialit\xe9 pluriel qui pourrait pr\xe9figurer une Sc\xe8ne De Musiques Actuelles adapt\xe9e au territoire souhait\xe9e par notre \xe9quipe et d\u2019ores et d\xe9j\xe0 par nombre de nos partenaires avec qui nous signerons prochainement un conventionnement pluriannuel.",\n "phone": "0692929292",\n "email": "contact+bisik@tibillet.re",\n "site_web": "http://bisik.re",\n "postal_code": "97410",\n "img_url": "http://bisik.re/wp-content/uploads/2019/01/MayaBisik.jpg",\n "logo_url": "http://bisik.re/wp-content/uploads/2017/05/logo-Bisik.png",\n "categorie": "S"\n}\nheaders = {\n "Content-Type": "application/json",\n "Authorization": "Api-Key NvGv0CHV.aQGS09HOQuF14sqfez8132jhEd8UAcBsp"\n}\n\nresponse = requests.request("POST", url, json=payload, headers=headers)\n\nprint(response.text)\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="HTTP json response"',children:'{\n\t"uuid": "1cf9889c-3414-4a39-bdde-1a36e1f97b96",\n\t"organisation": "Le Bisik",\n\t"slug": "le-bisik",\n\t"short_description": "Le lieu des musiques actuelles de Saint-Beno\xeet",\n\t"long_description": "ACTER (Agir pour la Culture et le Tourisme dans l\u2019Est de La R\xe9union) est n\xe9e il y cinq ans de la volont\xe9 farouche de porter un projet culturel populaire et de cr\xe9er un lieu de diffusion original de Musiques Actuelles dans l\u2019Est de La R\xe9union. Avec le Bisik nous avons invent\xe9 un tiers-lieu original, un espace de convivialit\xe9 pluriel qui pourrait pr\xe9figurer une Sc\xe8ne De Musiques Actuelles adapt\xe9e au territoire souhait\xe9e par notre \xe9quipe et d\u2019ores et d\xe9j\xe0 par nombre de nos partenaires avec qui nous signerons prochainement un conventionnement pluriannuel.",\n\t"adress": null,\n\t"postal_code": 97410,\n\t"city": null,\n\t"phone": "0692929292",\n\t"email": "contact@tibillet.re",\n\t"site_web": "http://bisik.re",\n\t"legal_documents": null,\n\t"twitter": null,\n\t"facebook": null,\n\t"instagram": null,\n\t"adhesion_obligatoire": false,\n\t"button_adhesion": false,\n\t"map_img": null,\n\t"carte_restaurant": null,\n\t"img_variations": {\n\t\t"fhd": "/media/images/MayaBisik_shOX4fO.fhd.jpg",\n\t\t"hdr": "/media/images/MayaBisik_shOX4fO.hdr.jpg",\n\t\t"med": "/media/images/MayaBisik_shOX4fO.med.jpg",\n\t\t"thumbnail": "/media/images/MayaBisik_shOX4fO.thumbnail.jpg"\n\t},\n\t"logo_variations": {\n\t\t"fhd": "/media/images/MayaBisik_shOX4fO.fhd.jpg",\n\t\t"hdr": "/media/images/MayaBisik_shOX4fO.hdr.jpg",\n\t\t"med": "/media/images/MayaBisik_shOX4fO.med.jpg",\n\t\t"thumbnail": "/media/images/MayaBisik_shOX4fO.thumbnail.jpg"\n\t},\n\t"categorie": "S"\n}\n'})})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>l});var i=t(6540);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7f42cc60.515adf83.js b/assets/js/7f42cc60.515adf83.js deleted file mode 100644 index d350f356..00000000 --- a/assets/js/7f42cc60.515adf83.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[2074],{5748:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>o});var i=t(4848),s=t(8453);const r={sidebar_position:3,slug:"tenants",title:"Tenants",description:"Cr\xe9ez et listez les instances de votre serveur multi-tenant",keywords:["cashless","billetterie","ticketing","cli","curl","python","tenant","saas"],wiktags:["cashless","billetterie","ticketing","curl","python","tenant","saas"],authors:"jonas"},l=void 0,a={id:"api/03 Tenants",title:"Tenants",description:"Cr\xe9ez et listez les instances de votre serveur multi-tenant",source:"@site/docs/api/03 Tenants.md",sourceDirName:"api",slug:"/api/tenants",permalink:"/docs/api/tenants",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/api/03 Tenants.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,slug:"tenants",title:"Tenants",description:"Cr\xe9ez et listez les instances de votre serveur multi-tenant",keywords:["cashless","billetterie","ticketing","cli","curl","python","tenant","saas"],wiktags:["cashless","billetterie","ticketing","curl","python","tenant","saas"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"API Keys",permalink:"/docs/api/apikey"},next:{title:"Produits",permalink:"/docs/api/products"}},d={},o=[{value:"Base de donn\xe9es partag\xe9e, sch\xe9mas distincts.",id:"base-de-donn\xe9es-partag\xe9e-sch\xe9mas-distincts",level:2},{value:"Cat\xe9gories",id:"cat\xe9gories",level:2},{value:"Lieu",id:"lieu",level:3},{value:"Festival",id:"festival",level:3},{value:"Projet",id:"projet",level:3},{value:"Producteurs",id:"producteurs",level:3},{value:"Meta : L'agenda f\xe9d\xe9r\xe9",id:"meta--lagenda-f\xe9d\xe9r\xe9",level:3},{value:"Root",id:"root",level:3},{value:"Donn\xe9es initiales",id:"donn\xe9es-initiales",level:2},{value:"Lister les tenants",id:"lister-les-tenants",level:2},{value:"Cr\xe9ation de nouveau tenant",id:"cr\xe9ation-de-nouveau-tenant",level:2},{value:"example",id:"example",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"base-de-donn\xe9es-partag\xe9e-sch\xe9mas-distincts",children:"Base de donn\xe9es partag\xe9e, sch\xe9mas distincts."}),"\n",(0,i.jsx)(n.p,{children:"TiBillet est construit autour d'une architecture multi-tenant. Il s'agit d'une fonctionnalit\xe9 essentielle pour toute\napplication de type \"Software-as-a-Service\"."}),"\n",(0,i.jsx)(n.p,{children:"C'est une approche semi-isol\xe9e : Base de donn\xe9es partag\xe9e, sch\xe9mas distincts. Une base de donn\xe9es pour tous les\nlocataires, mais un sch\xe9ma par locataire."}),"\n",(0,i.jsxs)(n.p,{children:["Pour plus d'information : ",(0,i.jsx)(n.a,{href:"https://django-tenants.readthedocs.io/",children:"https://django-tenants.readthedocs.io/"})]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsx)(n.p,{children:"Pour cr\xe9er de nouveaux tenants, vous pouvez utiliser l'api, mais tout aussi bien rediriger vers le formulaire de cr\xe9ation en ligne."}),(0,i.jsxs)(n.p,{children:["ex : ",(0,i.jsx)(n.a,{href:"https://agenda.tibillet.ovh/tenant/new/?email=jturbeaux@pm.me&name=jojo",children:"https://agenda.tibillet.ovh/tenant/new/?email=jturbeaux@pm.me&name=jojo"}),"\nEn option, vous pouvez ajouter les arguments :"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"name = Nom de la structure"}),"\n",(0,i.jsx)(n.li,{children:"email = Email du futur administrateur"}),"\n"]}),(0,i.jsxs)(n.p,{children:["N'h\xe9sitez pas \xe0 venir discuter avec nous sur ",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://discord.gg/7FJvtYx",children:"Discord"})})," ou ",(0,i.jsx)(n.a,{href:"https://matrix.to/#/#tibillet:tiers-lieux.org",children:"Matrix"})," pour avoir plus d'informations !"]})]}),"\n",(0,i.jsx)(n.h2,{id:"cat\xe9gories",children:"Cat\xe9gories"}),"\n",(0,i.jsx)(n.p,{children:"Nous avons d\xe9fini plusieurs cat\xe9gories de tenant qui determinent les comportements et templates."}),"\n",(0,i.jsx)(n.h3,{id:"lieu",children:"Lieu"}),"\n",(0,i.jsx)(n.p,{children:"Une salle de spectacle, un caf\xe9 concert, un tiers lieux..."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Un nom."}),"\n",(0,i.jsx)(n.li,{children:"Un lieu."}),"\n",(0,i.jsx)(n.li,{children:"Une sc\xe8ne."}),"\n",(0,i.jsx)(n.li,{children:"Un ou plusieurs artistes par soir."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "S"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"festival",children:"Festival"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Un nom."}),"\n",(0,i.jsx)(n.li,{children:"Un ou plusieurs lieux."}),"\n",(0,i.jsx)(n.li,{children:"Une ou plusieurs sc\xe8nes."}),"\n",(0,i.jsx)(n.li,{children:"Un ou plusieurs artistes par soir."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "F"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"projet",children:"Projet"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Un nom."}),"\n",(0,i.jsx)(n.li,{children:"Plusieurs lieux et sc\xe8nes sur plusieurs dates."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "A"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"producteurs",children:"Producteurs"}),"\n",(0,i.jsx)(n.p,{children:"Ex : Boite de production, agent, compagnie de th\xe9atre, tourneur"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Plusieurs projets."}),"\n",(0,i.jsx)(n.li,{children:"Plusieurs lieux et sc\xe8nes."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "P"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"meta--lagenda-f\xe9d\xe9r\xe9",children:"Meta : L'agenda f\xe9d\xe9r\xe9"}),"\n",(0,i.jsx)(n.p,{children:"Plusieurs instances se f\xe9d\xe8rent pour cr\xe9er un agenda \xe9v\xe8nementiel commun."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Plusieurs lieux"}),"\n",(0,i.jsx)(n.li,{children:"Plusieurs projets"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "M"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"root",children:"Root"}),"\n",(0,i.jsx)(n.p,{children:"Une seule instance par serveur.\nG\xe8re les tables communes \xe0 tous les tenants :"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Cartes NFC"}),"\n",(0,i.jsx)(n.li,{children:"Utilisateurs"}),"\n",(0,i.jsx)(n.li,{children:"Super-users"}),"\n",(0,i.jsx)(n.li,{children:"Gestion des domaines principaux et sous domaines multi tenant."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'categorie = "R"\n'})}),"\n",(0,i.jsx)(n.h2,{id:"donn\xe9es-initiales",children:"Donn\xe9es initiales"}),"\n",(0,i.jsx)(n.p,{children:"Lors de l'installation d'un nouveau serveur Django, une instance ROOT et une META sont d\xe9ja pr\xe9sente."}),"\n",(0,i.jsx)(n.p,{children:"S'il ne peut y avoir qu'un seul ROOT, plusieurs instances META sont possibles pour un agenda f\xe9d\xe9r\xe9 autour d'une\ncommunaut\xe9 interne."}),"\n",(0,i.jsx)(n.p,{children:"La premi\xe8re META initalement cr\xe9\xe9e est utile pour lister toutes les autres instances du serveur Django. Le sous domaine\npar defauilt est \"meta\". Il est possible de changer l'adresse avant l'installation : modifiez le fichier .env pr\xe9sent \xe0\nla racine du docker-compose. Il est aussi possible de changer l'adresse post install dans l'administration ROOT."}),"\n",(0,i.jsx)(n.h2,{id:"lister-les-tenants",children:"Lister les tenants"}),"\n",(0,i.jsx)(n.p,{children:"\xc0 lancer sur la premi\xe8re META."}),"\n",(0,i.jsx)(n.p,{children:"Aucune autorisation n'est n\xe9c\xe9ssaire pour lister les tenants d'un serveur."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:"# all tenant :\nGET https://meta./api/place/\n\n# retrieve one tenant :\nGET https://meta./api/place/\n"})}),"\n",(0,i.jsx)(n.h2,{id:"cr\xe9ation-de-nouveau-tenant",children:"Cr\xe9ation de nouveau tenant"}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["BETA en cours : En plus de l'autorisation sp\xe9ficifique de la cl\xe9 d'Api, l'utilisateur enregistr\xe9 doit avoir une\nautorisation sp\xe9ciale pour la cr\xe9ation de tenant. La case \"Peux cr\xe9er des tenants\" doit \xeatre coch\xe9 dans l'interface d'administration ROOT : ",(0,i.jsx)(n.code,{children:"https://www./admin/"}),"."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"POST https://meta./api/place/\n"})}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"type"}),(0,i.jsx)(n.th,{children:"Requis"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"organisation"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"short_description"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"long_description"}),(0,i.jsx)(n.td,{children:"decimal"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"phone"}),(0,i.jsx)(n.td,{children:"int"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"email"}),(0,i.jsx)(n.td,{children:"email"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"site_web"}),(0,i.jsx)(n.td,{children:"url"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"postal_code"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"img_url"}),(0,i.jsx)(n.td,{children:"url"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"logo_url"}),(0,i.jsx)(n.td,{children:"url"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"categorie"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"Y"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"adress"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"N"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"city"}),(0,i.jsx)(n.td,{children:"text"}),(0,i.jsx)(n.td,{children:"N"})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"example",children:"example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'import requests\n\nurl = "http://meta.tibillet.local/api/place/"\n\npayload = {\n "organisation": "Le Bisik",\n "short_description": " Le lieu des musiques actuelles de Saint-Beno\xeet",\n "long_description": "ACTER (Agir pour la Culture et le Tourisme dans l\u2019Est de La R\xe9union) est n\xe9e il y cinq ans de la volont\xe9 farouche de porter un projet culturel populaire et de cr\xe9er un lieu de diffusion original de Musiques Actuelles dans l\u2019Est de La R\xe9union. Avec le Bisik nous avons invent\xe9 un tiers-lieu original, un espace de convivialit\xe9 pluriel qui pourrait pr\xe9figurer une Sc\xe8ne De Musiques Actuelles adapt\xe9e au territoire souhait\xe9e par notre \xe9quipe et d\u2019ores et d\xe9j\xe0 par nombre de nos partenaires avec qui nous signerons prochainement un conventionnement pluriannuel.",\n "phone": "0692929292",\n "email": "contact+bisik@tibillet.re",\n "site_web": "http://bisik.re",\n "postal_code": "97410",\n "img_url": "http://bisik.re/wp-content/uploads/2019/01/MayaBisik.jpg",\n "logo_url": "http://bisik.re/wp-content/uploads/2017/05/logo-Bisik.png",\n "categorie": "S"\n}\nheaders = {\n "Content-Type": "application/json",\n "Authorization": "Api-Key NvGv0CHV.aQGS09HOQuF14sqfez8132jhEd8UAcBsp"\n}\n\nresponse = requests.request("POST", url, json=payload, headers=headers)\n\nprint(response.text)\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="HTTP json response"',children:'{\n\t"uuid": "1cf9889c-3414-4a39-bdde-1a36e1f97b96",\n\t"organisation": "Le Bisik",\n\t"slug": "le-bisik",\n\t"short_description": "Le lieu des musiques actuelles de Saint-Beno\xeet",\n\t"long_description": "ACTER (Agir pour la Culture et le Tourisme dans l\u2019Est de La R\xe9union) est n\xe9e il y cinq ans de la volont\xe9 farouche de porter un projet culturel populaire et de cr\xe9er un lieu de diffusion original de Musiques Actuelles dans l\u2019Est de La R\xe9union. Avec le Bisik nous avons invent\xe9 un tiers-lieu original, un espace de convivialit\xe9 pluriel qui pourrait pr\xe9figurer une Sc\xe8ne De Musiques Actuelles adapt\xe9e au territoire souhait\xe9e par notre \xe9quipe et d\u2019ores et d\xe9j\xe0 par nombre de nos partenaires avec qui nous signerons prochainement un conventionnement pluriannuel.",\n\t"adress": null,\n\t"postal_code": 97410,\n\t"city": null,\n\t"phone": "0692929292",\n\t"email": "contact@tibillet.re",\n\t"site_web": "http://bisik.re",\n\t"legal_documents": null,\n\t"twitter": null,\n\t"facebook": null,\n\t"instagram": null,\n\t"adhesion_obligatoire": false,\n\t"button_adhesion": false,\n\t"map_img": null,\n\t"carte_restaurant": null,\n\t"img_variations": {\n\t\t"fhd": "/media/images/MayaBisik_shOX4fO.fhd.jpg",\n\t\t"hdr": "/media/images/MayaBisik_shOX4fO.hdr.jpg",\n\t\t"med": "/media/images/MayaBisik_shOX4fO.med.jpg",\n\t\t"thumbnail": "/media/images/MayaBisik_shOX4fO.thumbnail.jpg"\n\t},\n\t"logo_variations": {\n\t\t"fhd": "/media/images/MayaBisik_shOX4fO.fhd.jpg",\n\t\t"hdr": "/media/images/MayaBisik_shOX4fO.hdr.jpg",\n\t\t"med": "/media/images/MayaBisik_shOX4fO.med.jpg",\n\t\t"thumbnail": "/media/images/MayaBisik_shOX4fO.thumbnail.jpg"\n\t},\n\t"categorie": "S"\n}\n'})})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>a});var i=t(6540);const s={},r=i.createContext(s);function l(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/86b2e310.7fcc4838.js b/assets/js/86b2e310.7fcc4838.js new file mode 100644 index 00000000..7f1e9fa2 --- /dev/null +++ b/assets/js/86b2e310.7fcc4838.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8198],{1795:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>r,contentTitle:()=>n,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var s=t(4848),l=t(8453);const a={sidebar_position:160,slug:"fidelity",title:"Loyalty points",description:"PLoyalty points on your federated card !",keywords:["fidelity","fid\xe9lit\xe9","badge","pointeuse","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","ticketing","loyalty","federated","card"],tags:["fidelity","fid\xe9lit\xe9","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","ticketing","loyalty","federated","card"]},n="Loyalty point",o={id:"Utilisateur/Cashless/160 Fidelity",title:"Loyalty points",description:"PLoyalty points on your federated card !",source:"@site/docs/Utilisateur/Cashless/160 Fidelity.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/fidelity",permalink:"/docs/Utilisateur/Cashless/fidelity",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/160 Fidelity.md",tags:[{inline:!0,label:"fidelity",permalink:"/docs/tags/fidelity"},{inline:!0,label:"fid\xe9lit\xe9",permalink:"/docs/tags/fidelite"},{inline:!0,label:"access card",permalink:"/docs/tags/access-card"},{inline:!0,label:"cashless",permalink:"/docs/tags/cashless"},{inline:!0,label:"billetterie",permalink:"/docs/tags/billetterie"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"cashback",permalink:"/docs/tags/cashback"},{inline:!0,label:"stripe",permalink:"/docs/tags/stripe"},{inline:!0,label:"badge inter-lieux",permalink:"/docs/tags/badge-inter-lieux"},{inline:!0,label:"dokos",permalink:"/docs/tags/dokos"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"loyalty",permalink:"/docs/tags/loyalty"},{inline:!0,label:"federated",permalink:"/docs/tags/federated"},{inline:!0,label:"card",permalink:"/docs/tags/card"}],version:"current",sidebarPosition:160,frontMatter:{sidebar_position:160,slug:"fidelity",title:"Loyalty points",description:"PLoyalty points on your federated card !",keywords:["fidelity","fid\xe9lit\xe9","badge","pointeuse","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","ticketing","loyalty","federated","card"],tags:["fidelity","fid\xe9lit\xe9","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","ticketing","loyalty","federated","card"]},sidebar:"tutorialSidebar",previous:{title:"Time clock machine",permalink:"/docs/Utilisateur/Cashless/badge"},next:{title:"Cashback",permalink:"/docs/Utilisateur/Cashless/cashback"}},r={},d=[{value:"Pooling with FEDOW",id:"pooling-with-fedow",level:2},{value:"Contribution",id:"contribution",level:2}];function c(e){const i={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"loyalty-point",children:"Loyalty point"})}),"\n",(0,s.jsx)(i.p,{children:"Add loyalty points for each sale made cashless or other !"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Config Badge",src:t(5187).A+"",width:"1172",height:"749"})}),"\n",(0,s.jsx)(i.p,{children:"Choose one or more trigger assets as well as the points factor.\nExample, for 10 tokens for 1\u20ac spent, choose the \u20ac token and the factor 10."}),"\n",(0,s.jsx)(i.h2,{id:"pooling-with-fedow",children:"Pooling with FEDOW"}),"\n",(0,s.jsx)(i.p,{children:"You can change the loyalty asset to a FEDOW asset. The loyalty points will then be visible and spendable in your FEDOW federation."}),"\n",(0,s.jsx)(i.p,{children:"Example: A menu for a restaurant chain"}),"\n",(0,s.jsx)(i.h2,{id:"contribution",children:"Contribution"}),"\n",(0,s.jsx)(i.p,{children:"These features were developed by, for and with the help of :"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://codecommun.coop/",children:"Coop\xe9rative Code Commun"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://ledemeter.fr/",children:"Le Demeter"})}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,l.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},5187:(e,i,t)=>{t.d(i,{A:()=>s});const s=t.p+"assets/images/config-c0786136c1b72b613af04942dcf2000b.jpg"},8453:(e,i,t)=>{t.d(i,{R:()=>n,x:()=>o});var s=t(6540);const l={},a=s.createContext(l);function n(e){const i=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:n(e.components),s.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/86b2e310.ede35b60.js b/assets/js/86b2e310.ede35b60.js deleted file mode 100644 index 9c59f38e..00000000 --- a/assets/js/86b2e310.ede35b60.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8198],{1795:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>r,contentTitle:()=>n,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var s=t(4848),l=t(8453);const a={sidebar_position:160,slug:"fidelity",title:"Loyalty points",description:"PLoyalty points on your federated card !",keywords:["fidelity","fid\xe9lit\xe9","badge","pointeuse","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","ticketing","loyalty","federated","card"],tags:["fidelity","fid\xe9lit\xe9","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","ticketing","loyalty","federated","card"]},n="Loyalty point",o={id:"Utilisateur/Cashless/160 Fidelity",title:"Loyalty points",description:"PLoyalty points on your federated card !",source:"@site/docs/Utilisateur/Cashless/160 Fidelity.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/fidelity",permalink:"/docs/Utilisateur/Cashless/fidelity",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/160 Fidelity.md",tags:[{inline:!0,label:"fidelity",permalink:"/docs/tags/fidelity"},{inline:!0,label:"fid\xe9lit\xe9",permalink:"/docs/tags/fidelite"},{inline:!0,label:"access card",permalink:"/docs/tags/access-card"},{inline:!0,label:"cashless",permalink:"/docs/tags/cashless"},{inline:!0,label:"billetterie",permalink:"/docs/tags/billetterie"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"cashback",permalink:"/docs/tags/cashback"},{inline:!0,label:"stripe",permalink:"/docs/tags/stripe"},{inline:!0,label:"badge inter-lieux",permalink:"/docs/tags/badge-inter-lieux"},{inline:!0,label:"dokos",permalink:"/docs/tags/dokos"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"loyalty",permalink:"/docs/tags/loyalty"},{inline:!0,label:"federated",permalink:"/docs/tags/federated"},{inline:!0,label:"card",permalink:"/docs/tags/card"}],version:"current",sidebarPosition:160,frontMatter:{sidebar_position:160,slug:"fidelity",title:"Loyalty points",description:"PLoyalty points on your federated card !",keywords:["fidelity","fid\xe9lit\xe9","badge","pointeuse","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","ticketing","loyalty","federated","card"],tags:["fidelity","fid\xe9lit\xe9","access card","cashless","billetterie","ticketing","cashback","stripe","badge inter-lieux","dokos","ticketing","loyalty","federated","card"]},sidebar:"tutorialSidebar",previous:{title:"Time clock machine",permalink:"/docs/Utilisateur/Cashless/badge"},next:{title:"Cashback",permalink:"/docs/Utilisateur/Cashless/cashback"}},r={},d=[{value:"Pooling with FEDOW",id:"pooling-with-fedow",level:2},{value:"Contribution",id:"contribution",level:2}];function c(e){const i={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"loyalty-point",children:"Loyalty point"})}),"\n",(0,s.jsx)(i.p,{children:"Add loyalty points for each sale made cashless or other !"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Config Badge",src:t(5187).A+"",width:"1172",height:"749"})}),"\n",(0,s.jsx)(i.p,{children:"Choose one or more trigger assets as well as the points factor.\nExample, for 10 tokens for 1\u20ac spent, choose the \u20ac token and the factor 10."}),"\n",(0,s.jsx)(i.h2,{id:"pooling-with-fedow",children:"Pooling with FEDOW"}),"\n",(0,s.jsx)(i.p,{children:"You can change the loyalty asset to a FEDOW asset. The loyalty points will then be visible and spendable in your FEDOW federation."}),"\n",(0,s.jsx)(i.p,{children:"Example: A menu for a restaurant chain"}),"\n",(0,s.jsx)(i.h2,{id:"contribution",children:"Contribution"}),"\n",(0,s.jsx)(i.p,{children:"These features were developed by, for and with the help of :"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://codecommun.coop/",children:"Coop\xe9rative Code Commun"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://ledemeter.fr/",children:"Le Demeter"})}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,l.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},5187:(e,i,t)=>{t.d(i,{A:()=>s});const s=t.p+"assets/images/config-c0786136c1b72b613af04942dcf2000b.jpg"},8453:(e,i,t)=>{t.d(i,{R:()=>n,x:()=>o});var s=t(6540);const l={},a=s.createContext(l);function n(e){const i=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:n(e.components),s.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8daeed5c.45b9bcb0.js b/assets/js/8daeed5c.45b9bcb0.js new file mode 100644 index 00000000..18dc9268 --- /dev/null +++ b/assets/js/8daeed5c.45b9bcb0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[26],{5647:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>l,toc:()=>o});var t=i(4848),s=i(8453);const d={sidebar_position:5,slug:"products",title:"Produits",description:"Cr\xe9ez et listez les produits",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},r=void 0,l={id:"api/05 Products",title:"Produits",description:"Cr\xe9ez et listez les produits",source:"@site/docs/api/05 Products.md",sourceDirName:"api",slug:"/api/products",permalink:"/docs/api/products",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/api/05 Products.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"products",title:"Produits",description:"Cr\xe9ez et listez les produits",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Tenants",permalink:"/docs/api/tenants"},next:{title:"\xc9v\xe8nements",permalink:"/docs/api/events"}},c={},o=[{value:"Lister les produits",id:"lister-les-produits",level:2},{value:"Lister les tarifs",id:"lister-les-tarifs",level:2},{value:"Cr\xe9ation de produit",id:"cr\xe9ation-de-produit",level:2},{value:"Type de produits possible",id:"type-de-produits-possible",level:3},{value:"Cr\xe9ation de tarif",id:"cr\xe9ation-de-tarif",level:2},{value:"subscription_type",id:"subscription_type",level:3},{value:"adhesion_obligatoire",id:"adhesion_obligatoire",level:3}];function a(e){const n={code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"lister-les-produits",children:"Lister les produits"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"GET /api/products/\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'[\n {\n "uuid": "ac87a79f-792a-4c68-9ad3-2e04b417078e",\n "name": "Adh\xe9sion Asso",\n "short_description": null,\n "long_description": null,\n "terms_and_conditions_document": null,\n "publish": true,\n "img": "http://billetistan.django-local.org/media/images/300_CQusv1A.jpg",\n "categorie_article": "A",\n "send_to_cashless": true,\n "prices": [\n {\n "uuid": "989f53f7-7241-4b56-8c85-410edda76d2f",\n "short_description": null,\n "long_description": null,\n "name": "Tarif solidaires",\n "prix": 10.0,\n "vat": "NA",\n "stock": null,\n "max_per_user": 10,\n "subscription_type": "Y",\n "product": "ac87a79f-792a-4c68-9ad3-2e04b417078e",\n "adhesion_obligatoire": null\n },\n {\n "uuid": "9a719f4e-2d14-4e5c-8963-14d9d726bd79",\n "short_description": null,\n "long_description": null,\n "name": "Plein Tarif",\n "prix": 20.0,\n "vat": "NA",\n "stock": null,\n "max_per_user": 10,\n "subscription_type": "Y",\n "product": "ac87a79f-792a-4c68-9ad3-2e04b417078e",\n "adhesion_obligatoire": null\n }\n ]\n }\n]\n'})}),"\n",(0,t.jsx)(n.h2,{id:"lister-les-tarifs",children:"Lister les tarifs"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"POST /api/prices/\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'[\n {\n "uuid": "e4980a38-e8ec-4bca-ad8c-59f9a64646c2",\n "product": "bd8bcd60-0a5f-4fdb-bdb1-1fa12392d56a",\n "name": "Par mois",\n "short_description": "Payez au mois",\n "long_description": null,\n "prix": 30.0,\n "vat": "NA",\n "stock": null,\n "max_per_user": 10,\n "adhesion_obligatoire": null,\n "subscription_type": "M"\n },\n {\n "uuid": "6c2456d7-585c-4e33-9a4d-27ff38932481",\n "product": "bd8bcd60-0a5f-4fdb-bdb1-1fa12392d56a",\n "name": "A l\'ann\xe9e Y",\n "short_description": "Payez \xe0 l\'ann\xe9e",\n "long_description": null,\n "prix": 360.0,\n "vat": "NA",\n "stock": null,\n "max_per_user": 10,\n "adhesion_obligatoire": null,\n "subscription_type": "Y"\n }\n]\n'})}),"\n",(0,t.jsx)(n.h2,{id:"cr\xe9ation-de-produit",children:"Cr\xe9ation de produit"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"POST /api/products/\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Item"}),(0,t.jsx)(n.th,{children:"type"}),(0,t.jsx)(n.th,{children:"Requis"}),(0,t.jsx)(n.th,{children:"Exemple"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"name"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"Billet"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"categorie_article"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"B"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"send_to_cashless"}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"false"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"img"}),(0,t.jsx)(n.td,{children:"binary"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"/home/jojo/img.jpg"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"send_to_cashless : Pour indiquer une adh\xe9sion associative enregistr\xe9e sur carte cashless TiBillet. Un seul produit\npossible par instance."}),"\n",(0,t.jsx)(n.h3,{id:"type-de-produits-possible",children:"Type de produits possible"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"String"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Billet"}),(0,t.jsx)(n.td,{children:"B"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Pack d'objets"}),(0,t.jsx)(n.td,{children:"P"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Recharge cashless"}),(0,t.jsx)(n.td,{children:"R"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Vetement"}),(0,t.jsx)(n.td,{children:"T"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Merchandasing"}),(0,t.jsx)(n.td,{children:"M"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Abonnement / Adh\xe9sion"}),(0,t.jsx)(n.td,{children:"A"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Gratuit / Free"}),(0,t.jsx)(n.td,{children:"F"})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"cr\xe9ation-de-tarif",children:"Cr\xe9ation de tarif"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"POST /api/prices/\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Item"}),(0,t.jsx)(n.th,{children:"type"}),(0,t.jsx)(n.th,{children:"Requis"}),(0,t.jsx)(n.th,{children:"Exemple"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"product"}),(0,t.jsx)(n.td,{children:"int"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"uuid4"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"name"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"Demi tarif"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"prix"}),(0,t.jsx)(n.td,{children:"decimal"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"5"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"vat"}),(0,t.jsx)(n.td,{children:"decimal"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"NA"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"max_per_ser"}),(0,t.jsx)(n.td,{children:"int"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"10"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"stock"}),(0,t.jsx)(n.td,{children:"int"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"300"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"subscription_type"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"Null / Y / M"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"adhesion_obligatoire"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"uuid4 product"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"subscription_type",children:"subscription_type"}),"\n",(0,t.jsx)(n.p,{children:"Y for years\nM for Month"}),"\n",(0,t.jsx)(n.h3,{id:"adhesion_obligatoire",children:"adhesion_obligatoire"}),"\n",(0,t.jsx)(n.p,{children:"Exemple : Tarif abonn\xe9 disponible uniquement si utilisateur connect\xe9 et ayant souscrit \xe0 l'abonnement correspondant."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>l});var t=i(6540);const s={},d=t.createContext(s);function r(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8daeed5c.f9891f1a.js b/assets/js/8daeed5c.f9891f1a.js deleted file mode 100644 index 33a1ea9e..00000000 --- a/assets/js/8daeed5c.f9891f1a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[26],{5647:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>l,toc:()=>o});var t=i(4848),s=i(8453);const d={sidebar_position:5,slug:"products",title:"Produits",description:"Cr\xe9ez et listez les produits",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},r=void 0,l={id:"api/05 Products",title:"Produits",description:"Cr\xe9ez et listez les produits",source:"@site/docs/api/05 Products.md",sourceDirName:"api",slug:"/api/products",permalink:"/docs/api/products",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/api/05 Products.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"products",title:"Produits",description:"Cr\xe9ez et listez les produits",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Tenants",permalink:"/docs/api/tenants"},next:{title:"\xc9v\xe8nements",permalink:"/docs/api/events"}},c={},o=[{value:"Lister les produits",id:"lister-les-produits",level:2},{value:"Lister les tarifs",id:"lister-les-tarifs",level:2},{value:"Cr\xe9ation de produit",id:"cr\xe9ation-de-produit",level:2},{value:"Type de produits possible",id:"type-de-produits-possible",level:3},{value:"Cr\xe9ation de tarif",id:"cr\xe9ation-de-tarif",level:2},{value:"subscription_type",id:"subscription_type",level:3},{value:"adhesion_obligatoire",id:"adhesion_obligatoire",level:3}];function a(e){const n={code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"lister-les-produits",children:"Lister les produits"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"GET /api/products/\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'[\n {\n "uuid": "ac87a79f-792a-4c68-9ad3-2e04b417078e",\n "name": "Adh\xe9sion Asso",\n "short_description": null,\n "long_description": null,\n "terms_and_conditions_document": null,\n "publish": true,\n "img": "http://billetistan.django-local.org/media/images/300_CQusv1A.jpg",\n "categorie_article": "A",\n "send_to_cashless": true,\n "prices": [\n {\n "uuid": "989f53f7-7241-4b56-8c85-410edda76d2f",\n "short_description": null,\n "long_description": null,\n "name": "Tarif solidaires",\n "prix": 10.0,\n "vat": "NA",\n "stock": null,\n "max_per_user": 10,\n "subscription_type": "Y",\n "product": "ac87a79f-792a-4c68-9ad3-2e04b417078e",\n "adhesion_obligatoire": null\n },\n {\n "uuid": "9a719f4e-2d14-4e5c-8963-14d9d726bd79",\n "short_description": null,\n "long_description": null,\n "name": "Plein Tarif",\n "prix": 20.0,\n "vat": "NA",\n "stock": null,\n "max_per_user": 10,\n "subscription_type": "Y",\n "product": "ac87a79f-792a-4c68-9ad3-2e04b417078e",\n "adhesion_obligatoire": null\n }\n ]\n }\n]\n'})}),"\n",(0,t.jsx)(n.h2,{id:"lister-les-tarifs",children:"Lister les tarifs"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"POST /api/prices/\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'[\n {\n "uuid": "e4980a38-e8ec-4bca-ad8c-59f9a64646c2",\n "product": "bd8bcd60-0a5f-4fdb-bdb1-1fa12392d56a",\n "name": "Par mois",\n "short_description": "Payez au mois",\n "long_description": null,\n "prix": 30.0,\n "vat": "NA",\n "stock": null,\n "max_per_user": 10,\n "adhesion_obligatoire": null,\n "subscription_type": "M"\n },\n {\n "uuid": "6c2456d7-585c-4e33-9a4d-27ff38932481",\n "product": "bd8bcd60-0a5f-4fdb-bdb1-1fa12392d56a",\n "name": "A l\'ann\xe9e Y",\n "short_description": "Payez \xe0 l\'ann\xe9e",\n "long_description": null,\n "prix": 360.0,\n "vat": "NA",\n "stock": null,\n "max_per_user": 10,\n "adhesion_obligatoire": null,\n "subscription_type": "Y"\n }\n]\n'})}),"\n",(0,t.jsx)(n.h2,{id:"cr\xe9ation-de-produit",children:"Cr\xe9ation de produit"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"POST /api/products/\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Item"}),(0,t.jsx)(n.th,{children:"type"}),(0,t.jsx)(n.th,{children:"Requis"}),(0,t.jsx)(n.th,{children:"Exemple"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"name"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"Billet"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"categorie_article"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"B"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"send_to_cashless"}),(0,t.jsx)(n.td,{children:"boolean"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"false"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"img"}),(0,t.jsx)(n.td,{children:"binary"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"/home/jojo/img.jpg"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"send_to_cashless : Pour indiquer une adh\xe9sion associative enregistr\xe9e sur carte cashless TiBillet. Un seul produit\npossible par instance."}),"\n",(0,t.jsx)(n.h3,{id:"type-de-produits-possible",children:"Type de produits possible"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"String"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Billet"}),(0,t.jsx)(n.td,{children:"B"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Pack d'objets"}),(0,t.jsx)(n.td,{children:"P"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Recharge cashless"}),(0,t.jsx)(n.td,{children:"R"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Vetement"}),(0,t.jsx)(n.td,{children:"T"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Merchandasing"}),(0,t.jsx)(n.td,{children:"M"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Abonnement / Adh\xe9sion"}),(0,t.jsx)(n.td,{children:"A"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Gratuit / Free"}),(0,t.jsx)(n.td,{children:"F"})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"cr\xe9ation-de-tarif",children:"Cr\xe9ation de tarif"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"POST /api/prices/\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Item"}),(0,t.jsx)(n.th,{children:"type"}),(0,t.jsx)(n.th,{children:"Requis"}),(0,t.jsx)(n.th,{children:"Exemple"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"product"}),(0,t.jsx)(n.td,{children:"int"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"uuid4"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"name"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"Demi tarif"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"prix"}),(0,t.jsx)(n.td,{children:"decimal"}),(0,t.jsx)(n.td,{children:"Y"}),(0,t.jsx)(n.td,{children:"5"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"vat"}),(0,t.jsx)(n.td,{children:"decimal"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"NA"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"max_per_ser"}),(0,t.jsx)(n.td,{children:"int"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"10"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"stock"}),(0,t.jsx)(n.td,{children:"int"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"300"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"subscription_type"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"Null / Y / M"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"adhesion_obligatoire"}),(0,t.jsx)(n.td,{children:"text"}),(0,t.jsx)(n.td,{children:"N"}),(0,t.jsx)(n.td,{children:"uuid4 product"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"subscription_type",children:"subscription_type"}),"\n",(0,t.jsx)(n.p,{children:"Y for years\nM for Month"}),"\n",(0,t.jsx)(n.h3,{id:"adhesion_obligatoire",children:"adhesion_obligatoire"}),"\n",(0,t.jsx)(n.p,{children:"Exemple : Tarif abonn\xe9 disponible uniquement si utilisateur connect\xe9 et ayant souscrit \xe0 l'abonnement correspondant."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>l});var t=i(6540);const s={},d=t.createContext(s);function r(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/927f7f94.651bd37b.js b/assets/js/927f7f94.651bd37b.js deleted file mode 100644 index 13fcd9f3..00000000 --- a/assets/js/927f7f94.651bd37b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[1329],{9878:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>a,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var s=t(4848),i=t(8453);const r={sidebar_position:10,slug:"development",title:"Development",keywords:["contribute","volunteer","open source","git","pull request","issue","help","code","development","programming","python","django","docker","poetry","testing","tdd"],tags:["contribute","open source","git","help","tdd","python","django","docker","poetry"],authors:"kaya, guillaume"},d="Development",l={id:"contribute/dev",title:"Development",description:"So, you want to help with the development of TiBillet. Thank you! Open-source thrives thanks to people like you \ud83d\ude4f",source:"@site/docs/contribute/dev.md",sourceDirName:"contribute",slug:"/contribute/development",permalink:"/docs/contribute/development",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/contribute/dev.md",tags:[{inline:!0,label:"contribute",permalink:"/docs/tags/contribute"},{inline:!0,label:"open source",permalink:"/docs/tags/open-source"},{inline:!0,label:"git",permalink:"/docs/tags/git"},{inline:!0,label:"help",permalink:"/docs/tags/help"},{inline:!0,label:"tdd",permalink:"/docs/tags/tdd"},{inline:!0,label:"python",permalink:"/docs/tags/python"},{inline:!0,label:"django",permalink:"/docs/tags/django"},{inline:!0,label:"docker",permalink:"/docs/tags/docker"},{inline:!0,label:"poetry",permalink:"/docs/tags/poetry"}],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10,slug:"development",title:"Development",keywords:["contribute","volunteer","open source","git","pull request","issue","help","code","development","programming","python","django","docker","poetry","testing","tdd"],tags:["contribute","open source","git","help","tdd","python","django","docker","poetry"],authors:"kaya, guillaume"},sidebar:"tutorialSidebar",previous:{title:"Contributing",permalink:"/docs/category/contributing"},next:{title:"Research",permalink:"/docs/category/research"}},o={},c=[{value:"Understanding the workflow",id:"understanding-the-workflow",level:2},{value:"Tools and languages used",id:"tools-and-languages-used",level:2},{value:"Simple local install",id:"simple-local-install",level:2},{value:"Detailed local installation",id:"detailed-local-installation",level:2},{value:"Key generation",id:"key-generation",level:3},{value:"Fedow, Lespass, LaBoutik",id:"fedow-lespass-laboutik",level:3},{value:"Fedow environment",id:"fedow-environment",level:4},{value:"Lespass environment",id:"lespass-environment",level:4},{value:"LaBoutik environment",id:"laboutik-environment",level:4},{value:"Tests setup",id:"tests-setup",level:3},{value:"Manual engine start",id:"manual-engine-start",level:2},{value:"Is it working?",id:"is-it-working",level:3},{value:"Lifecycle",id:"lifecycle",level:2},{value:"Updates",id:"updates",level:3},{value:"Testing",id:"testing",level:3},{value:"Backups",id:"backups",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"development",children:"Development"})}),"\n",(0,s.jsx)(n.p,{children:"So, you want to help with the development of TiBillet. Thank you! Open-source thrives thanks to people like you \ud83d\ude4f"}),"\n",(0,s.jsxs)(n.p,{children:["First, if you don't have a specific task in mind already, check out the open issues on the official ",(0,s.jsx)(n.a,{href:"https://github.com/TiBillet",children:"Github repositories"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"It's the easiest way to figure out what problem needs fixing or what feature is being requested."}),"\n",(0,s.jsxs)(n.admonition,{title:"Repositories",type:"note",children:[(0,s.jsx)(n.p,{children:"What you need is probably in the pinned repositories. If you are unsure of the role of Fedow, LaBoutik or Lespass, check out the basics on the three TiBillet engines."}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)("mark",{children:"TODO: link to engines and their roles in the doc"})," (a very basic page in intro probably)"]})]}),"\n",(0,s.jsx)(n.h2,{id:"understanding-the-workflow",children:"Understanding the workflow"}),"\n",(0,s.jsxs)(n.p,{children:["When you work with ",(0,s.jsx)(n.em,{children:"Git forges"})," like Github, there are ways in which you can make your contributions easier to handle:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["If you're not part of the core team, ",(0,s.jsx)(n.em,{children:"fork"})," the repository that interests you, work from there, and submit your changes through a ",(0,s.jsx)(n.em,{children:"pull request"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"If you have an issue you want to work on, check that it doesn't already exists. If it does, join the discussion instead of doing your own thing!"}),"\n",(0,s.jsxs)(n.li,{children:["When you start working on an issue, ",(0,s.jsx)(n.strong,{children:"assign yourself"})," to let others know you're working on it."]}),"\n",(0,s.jsxs)(n.li,{children:["Last but not least: ",(0,s.jsx)(n.strong,{children:"don't create pull requests without running the tests"}),"! Happens to the best of us. Ideally, you should run them before committing, with the help of a ",(0,s.jsx)(n.em,{children:"git hook"})," for example."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Getting help",type:"note",children:(0,s.jsxs)(n.p,{children:["If you have any questions regarding Git, Github, or an aspect of development, join us on ",(0,s.jsx)(n.a,{href:"https://discord.gg/7FJvtYx",children:"Discord"})," or ",(0,s.jsx)(n.a,{href:"https://matrix.to/#/#tibillet:tiers-lieux.org",children:"Matrix"}),". These are mostly French-speaking spaces as the founders are from La Reunion, but we'll do our best to help (with a bit of ",(0,s.jsx)(n.em,{children:"un accent"})," \ud83c\udf77\ud83e\udd56)."]})}),"\n",(0,s.jsx)(n.h2,{id:"tools-and-languages-used",children:"Tools and languages used"}),"\n",(0,s.jsx)(n.p,{children:"TiBillet is:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://www.python.org/",children:"Python"})," software"]}),"\n",(0,s.jsxs)(n.li,{children:["developed with the help of the ",(0,s.jsx)(n.a,{href:"https://www.djangoproject.com/",children:"Django"})," framework"]}),"\n",(0,s.jsxs)(n.li,{children:["its dependencies are handled through ",(0,s.jsx)(n.a,{href:"https://python-poetry.org/",children:"Poetry"})]}),"\n",(0,s.jsxs)(n.li,{children:["it runs in ",(0,s.jsx)(n.a,{href:"https://www.docker.com/",children:"Docker"})," containers for production as well as development"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If you don't feel at ease with the software stack, the best thing you can do is to go look for tutorials. Hopefully we'll compile a list of our own down here one of these days \ud83d\ude05"}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"In particular, basic knowledge of Git can help. It is relatively easy to make a complete mess of a project by not grasping the way versioning works. There are safeguards, but you might struggle a lot more than necessary! I remember how that feels \ud83d\ude11"})}),"\n",(0,s.jsx)(n.h2,{id:"simple-local-install",children:"Simple local install"}),"\n",(0,s.jsx)(n.p,{children:"In order to develop and test things out, you're gonna need a (mostly) functional instance of TiBillet on your computer."}),"\n",(0,s.jsx)(n.p,{children:"Let's make sure you have the required tools at hand. You need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Docker CLI and the ",(0,s.jsx)(n.code,{children:"docker-compose"})," extension"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"git"})}),"\n",(0,s.jsx)(n.li,{children:"a Github account with a registered SSH key for forge access"}),"\n",(0,s.jsx)(n.li,{children:"an IDE (there are open-source gift licenses of PyCharm available on request, but a regular IDE like VSCodium works reasonably well - that's what I'm using \ud83d\ude09)"}),"\n"]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsx)(n.p,{children:"From here, you can choose between two paths:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.strong,{children:"Too easy !"})," path: ",(0,s.jsx)(n.a,{href:"https://nuage.tierslieux.re/s/rprGfbDDDrazJ9d",children:"I download an archive"})," in which everything is already installed and I can go straight to ",(0,s.jsx)(n.a,{href:"#manual-engine-start",children:"engine startup"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.strong,{children:"I want to understand! path"}),": Each step in creating your environment is detailed in the ",(0,s.jsx)(n.a,{href:"#installation-locale-d%C3%A9taill%C3%A9e",children:"tuto below"}),"."]}),"\n"]}),(0,s.jsx)(n.p,{children:"You can even do both, for maximum effect!"})]}),"\n",(0,s.jsx)(n.h2,{id:"detailed-local-installation",children:"Detailed local installation"}),"\n",(0,s.jsx)(n.p,{children:"Translated with DeepL.com (free version)\nWe're gonna start by creating a folder that will hold the different repositories required, in your local repository or work folder if you have one for example. It will look like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"tibillet-dev\n\u251c\u2500\u2500 Fedow\n\u251c\u2500\u2500 LaBoutik\n\u251c\u2500\u2500 Lespass\n\u251c\u2500\u2500 Test-Driven-Development\n\u2514\u2500\u2500 Traefik\n"})}),"\n",(0,s.jsx)(n.h3,{id:"key-generation",children:"Key generation"}),"\n",(0,s.jsx)("mark",{children:"TODO: Complicated and heavy for no reason."}),"\n",(0,s.jsx)(n.p,{children:"The legacy way of generating the necessary configuration keys is to pull the production Fedow docker image and run poetry inside of it."}),"\n",(0,s.jsx)(n.p,{children:"For each engine, we will need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["one or two Fernet keys (for the ",(0,s.jsx)(n.code,{children:"FERNET_KEY"})," field and possibly, passwords)"]}),"\n",(0,s.jsxs)(n.li,{children:["a Django secret key (for the ",(0,s.jsx)(n.code,{children:"SECRET_KEY"})," field)"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"You can generate 30 of each in your terminal by running:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker run --rm tibillet/fedow poetry run python3 -c \"from cryptography.fernet import Fernet; print('\\n'.join([Fernet.generate_key().decode('utf-8') for i in range(0,30)]))\"\ndocker run --rm tibillet/fedow poetry run python3 -c \"from django.core.management.utils import get_random_secret_key; print('\\n'.join([get_random_secret_key() for i in range(0,30)]))\"\n"})}),"\n",(0,s.jsx)(n.p,{children:"The first line will take some time as it need to pull the entire Docker image. Keep the keys somewhere, we're gonna need them to setup the engines."}),"\n",(0,s.jsxs)(n.p,{children:["We're also going to need a Stripe test key for the ",(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})," field. Stripe is the payment solution that is currently taking care of the cashing in. You can obtain a key by creating a free account, then by going to Test mode -> API test key. Alternatively you can ask the team."]}),"\n",(0,s.jsx)(n.h3,{id:"fedow-lespass-laboutik",children:"Fedow, Lespass, LaBoutik"}),"\n",(0,s.jsx)(n.p,{children:"Start by cloning the repositories:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"git clone git@github.com:TiBillet/Fedow.git\ngit clone git@github.com:TiBillet/Lespass.git\ngit clone git@github.com:TiBillet/LaBoutik.git\n"})}),"\n",(0,s.jsx)(n.p,{children:"From here, we need to write a bit of configuration. It will be better streamlined in the future, so bear with us \ud83d\ude0b"}),"\n",(0,s.jsxs)(n.p,{children:["Each engine needs its own ",(0,s.jsx)(n.code,{children:".env"})," file, which you can base on the ",(0,s.jsx)(n.code,{children:"env_example"})," files you cloned."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Each environment variable must be readable from the ",(0,s.jsx)(n.code,{children:".env"})," file. No line deletion! Some of them can however stay empty (nullable)."]})}),"\n",(0,s.jsx)(n.h4,{id:"fedow-environment",children:"Fedow environment"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"cp Fedow/env_example Fedow/.env\n"})}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Target environment"}),(0,s.jsx)(n.th,{children:"Nullable"}),(0,s.jsx)(n.th,{children:"Default value"}),(0,s.jsx)(n.th,{children:"Notes"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SECRET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Django secret key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FERNET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Fernet key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_KEY"})}),(0,s.jsx)(n.td,{children:"Production"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Your Stripe API key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DOMAIN"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"fedow.tibillet.localhost"})}),(0,s.jsx)(n.td,{children:"Change to you domain and subdomain for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Your Stripe API test key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsxs)(n.td,{children:["Set to 1 if ",(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})," is filled"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_ENDPOINT_SECRET_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"No idea"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DEBUG"})}),(0,s.jsx)(n.td,{children:"Development"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for development"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TEST"})}),(0,s.jsx)(n.td,{children:"Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for testing"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"lespass-environment",children:"Lespass environment"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"cp Lespass/env_example Lespass/.env\n"})}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Target environment"}),(0,s.jsx)(n.th,{children:"Nullable"}),(0,s.jsx)(n.th,{children:"Default value"}),(0,s.jsx)(n.th,{children:"Notes"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SECRET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Django secret key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FERNET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Fernet key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_KEY"})}),(0,s.jsx)(n.td,{children:"Production"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Your Stripe API key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DOMAIN"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"tibillet.localhost"})}),(0,s.jsx)(n.td,{children:"Change to your domain for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SUB"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"lespass"})}),(0,s.jsx)(n.td,{children:"Instance subdomain, change for production mode as necessary"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"META"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"agenda"})}),(0,s.jsx)(n.td,{children:"Federated calendar subdomain, change for production mode as necessary"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FEDOW_DOMAIN"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"fedow.tibillet.localhost"})}),(0,s.jsx)(n.td,{children:"Domain and subdomain of the Fedow engine"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"PUBLIC"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"TiBillet Coop."}),(0,s.jsx)(n.td,{children:"Main instance name"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TIME_ZONE"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Europe/Paris"}),(0,s.jsx)(n.td,{children:"TZ time zone of the instance"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ADMIN_EMAIL"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Admin email (for the first admin)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_DB"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"lespass"}),(0,s.jsx)(n.td,{children:"Change for production mode if necessary"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_USER"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"lespass_postgres"}),(0,s.jsx)(n.td,{children:"Change for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_PASSWORD"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Strong password (one of the Fernet keys for example)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"EMAIL_HOST"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_PORT"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_HOST_USER"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_HOST_PASSWORD"})]}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Email server, required to confirm user registrations for example"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Your Stripe API test key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsxs)(n.td,{children:["Set to 1 if ",(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})," is filled"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DEBUG"})}),(0,s.jsx)(n.td,{children:"Development"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for development"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TEST"})}),(0,s.jsx)(n.td,{children:"Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for testing"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"laboutik-environment",children:"LaBoutik environment"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"cp LaBoutik/env_example LaBoutik/.env\n"})}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Target environment"}),(0,s.jsx)(n.th,{children:"Nullable"}),(0,s.jsx)(n.th,{children:"Default value"}),(0,s.jsx)(n.th,{children:"Notes"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SECRET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Django secret key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FERNET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Fernet key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DOMAIN"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"laboutik.tibillet.localhost"})}),(0,s.jsx)(n.td,{children:"Change to you domain and subdomain for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FEDOW_URL"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.a,{href:"https://fedow.tibillet.localhost/",children:"https://fedow.tibillet.localhost/"})}),(0,s.jsx)(n.td,{children:"Fedow engine URL"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"LESPASS_TENANT_URL"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.a,{href:"https://lespass.tibillet.localhost/",children:"https://lespass.tibillet.localhost/"})}),(0,s.jsx)(n.td,{children:"Lespass instance URL"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TIME_ZONE"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Europe/Paris"}),(0,s.jsx)(n.td,{children:"TZ time zone of the instance"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ADMIN_EMAIL"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Admin email (for the first admin)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"MAIN_ASSET_NAME"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Name of your main cashless asset (Centiment, HeartBit\u2026 whatever you like)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_DB"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"laboutik"}),(0,s.jsx)(n.td,{children:"Change for production mode if necessary"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_USER"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"laboutik_user"}),(0,s.jsx)(n.td,{children:"Change for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_PASSWORD"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Strong password (one of the Fernet keys for example)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"EMAIL_HOST"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_PORT"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_HOST_USER"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_HOST_PASSWORD"})]}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Email server, required to confirm user registrations for example"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"BORG_PASSPHRASE"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Password used for data backup"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DEBUG"})}),(0,s.jsx)(n.td,{children:"Development"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for development"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TEST"})}),(0,s.jsx)(n.td,{children:"Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for testing"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DEMO"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for a register simulation"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SENTRY_DNS"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Sentry Debug pour le back-end"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"SENTRY_FRONT_DNS"}),", ",(0,s.jsx)(n.code,{children:"SENTRY_FRONT_ASSET"})]}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Sentry Debug for front-end"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"DEMO_TAGID_CM"}),", ",(0,s.jsx)(n.code,{children:"DEMO_TAGID_CLIENT1"}),", ",(0,s.jsx)(n.code,{children:"DEMO_TAGID_CLIENT2"})]}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"No idea"})]})]})]}),"\n",(0,s.jsx)(n.p,{children:"The configuration should now be complete for the TiBillet engines."}),"\n",(0,s.jsx)(n.h3,{id:"tests-setup",children:"Tests setup"}),"\n",(0,s.jsx)(n.p,{children:"For\u2026 reasons, the entire dev environment is assembled through the tests. The setup of the testing repository might seem familiar:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"git clone git@github.com:TiBillet/Test-Driven-Development.git\ncp Test-Driven-Development/env_example Test-Driven-Development/.env\n"})}),"\n",(0,s.jsx)(n.p,{children:"There! Setup done \u263a\ufe0f Now we can start running the entire project from inside the test folder:"}),"\n",(0,s.jsx)(n.h2,{id:"manual-engine-start",children:"Manual engine start"}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"If you've downloaded the ready-to-install folder, remember to perform a git pull in each of the 4 repositories before launching!"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Test-Driven-Development$"',children:"docker network create frontend # only the first time. Traefik need this virtual network.\ndocker compose up -d\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can access the logs with:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Test-Driven-Development$"',children:"docker compose logs -f\n"})}),"\n",(0,s.jsx)(n.p,{children:"To delete the containers :"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Test-Driven-Development$"',children:"docker compose down -v # -v for the volumes used by database.\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"Careful!",type:"warning",children:(0,s.jsxs)(n.p,{children:["This particular ",(0,s.jsx)(n.code,{children:"docker-compose.yml"})," relies on the folder structure of its ",(0,s.jsx)(n.em,{children:"parent folder"})," shown in the beginning with the example name of ",(0,s.jsx)(n.code,{children:"tibillet-dev"}),". Counterintuitive, but hey: now you know!"]})}),"\n",(0,s.jsxs)(n.p,{children:["The main difference between dev and prod containers is that running the ",(0,s.jsx)(n.code,{children:"docker compose"})," command will not start the individual Django apps. It's a level of granularity that helps with development, but it means you get to start them manually by entering the containers. Lucky you! \ud83c\udf40"]}),"\n",(0,s.jsx)(n.p,{children:"Were're gonna start them in a particular order:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Fedow"}),"\n",(0,s.jsx)(n.li,{children:"Lespass"}),"\n",(0,s.jsx)(n.li,{children:"LaBoutik (needs the other two to start)"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The tools we need are in the Django containers, named after the engines: ",(0,s.jsx)(n.code,{children:"fedow_django"}),", ",(0,s.jsx)(n.code,{children:"lespass_django"})," and ",(0,s.jsx)(n.code,{children:"laboutik_django"}),". To enter a container (Fedow example) :"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# starting bash shell in fedow_django container\ndocker exec -ti fedow_django bash\n"})}),"\n",(0,s.jsx)(n.p,{children:"From there we have a few options."}),"\n",(0,s.jsxs)(n.p,{children:["First is the ",(0,s.jsx)(n.code,{children:"flush.sh"})," script. It initializes testing data and starts the app right after. This is what we're gonna use at ",(0,s.jsx)(n.strong,{children:"first boot"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="fedow_django$"',children:"./flush.sh\n"})}),"\n",(0,s.jsxs)(n.p,{children:["We will also use it when we want to ",(0,s.jsx)(n.strong,{children:"reset"})," data, for example before starting the automated testing with relies on this predictible data."]}),"\n",(0,s.jsx)(n.p,{children:"For the rest of the container manipulations, we're going to need the Poetry shell, because we're gonna use Python commands."}),"\n",(0,s.jsx)(n.p,{children:"To start Poetry's virtual env from the container:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="fedow_django$"',children:" # we start the virtual env that handles the python dependencies\npoetry shell\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Django is handled through a script called ",(0,s.jsx)(n.code,{children:"manage.py"}),". Two commands are of interest to us here:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"rsp"})," (alias of ",(0,s.jsx)(n.code,{children:"./manage.py runserver 0.0.0.0:8000"}),") starts Django but doesn't wipe out the data. This will help keep data between sessions. GThis command is used in most cases, ",(0,s.jsx)(n.code,{children:"flush"})," is only used for testing or when something's gonz wrong."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["As an option, if you're encontering graphical issues (such as assets not loading), you can attempt ",(0,s.jsx)(n.code,{children:"./manage.py collectstatic"}),". Sometimes the graphical assets are not properly collected at first boot, in which case this can help."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Only thing left to do is to start the three engines in the order described earlier : Fedow, Lespass, then LaBoutik !"}),"\n",(0,s.jsxs)(n.admonition,{title:"Aliasing",type:"tip",children:[(0,s.jsx)(n.p,{children:"The docker command gets repetitive after a while. Why not create an alias, or even a little bash function that will shorten your labor and preserve your carpal tunnel? Here's mine:"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="~/.bashrc"',children:"function dockex {\n docker exec -ti $1 bash\n}\n"})}),(0,s.jsx)(n.p,{children:"There's probably even a way to add the poetry stuff to it, look it up!"})]}),"\n",(0,s.jsx)(n.h3,{id:"is-it-working",children:"Is it working?"}),"\n",(0,s.jsx)(n.p,{children:"If you have used the default domain configuration, you can now access:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["the federation engine Fedow at ",(0,s.jsx)(n.a,{href:"https://fedow.tibillet.localhost",children:"fedow.tibillet.localhost"})]}),"\n",(0,s.jsxs)(n.li,{children:["an instance of the ticketing engine Lespass at ",(0,s.jsx)(n.a,{href:"https://lespass.tibillet.localhost",children:"lespass.tibillet.localhost"})]}),"\n",(0,s.jsxs)(n.li,{children:["the currency register server LaBoutik at ",(0,s.jsx)(n.a,{href:"https://laboutik.tibillet.localhost",children:"laboutik.tibillet.localhost"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If everything is working as expected, congratulations: you're ready to go \ud83d\udd27"}),"\n",(0,s.jsx)(n.p,{children:"If not, come talk to us, we'd love to help!"}),"\n",(0,s.jsxs)(n.admonition,{title:"Wrapping up",type:"note",children:[(0,s.jsxs)(n.p,{children:["Don't forget to ",(0,s.jsx)(n.code,{children:"docker compose down"})," both here and in Traefik when you're done. You computer needs a break sometimes."]}),(0,s.jsxs)(n.p,{children:["If you think you won't remember, remove the daemon option when you compose up (",(0,s.jsx)(n.code,{children:"-d"}),") and the command will run directly in the terminal, not as a background job. It's fine, you'll just need more tabs \ud83d\ude0b"]})]}),"\n",(0,s.jsx)(n.h2,{id:"lifecycle",children:"Lifecycle"}),"\n",(0,s.jsx)(n.h3,{id:"updates",children:"Updates"}),"\n",(0,s.jsx)(n.p,{children:"To stay up to date during development, pull the latest image:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Test-Driven-Development$"',children:"docker compose pull\ndocker compose up -d # start or restart the updated containers\n"})}),"\n",(0,s.jsx)(n.h3,{id:"testing",children:"Testing"}),"\n",(0,s.jsx)(n.p,{children:"You can run the Python tests through the same shell-ception required to do a manual start. Start by flushing the 3 Django apps to get fresh testing data, then run this inside your LaBoutik Django container:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="laboutik_django> poetry shell$"',children:"./manage.py test\n"})}),"\n",(0,s.jsx)("mark",{children:"TODO: end-to-end tests docs (they exist!)"}),"\n",(0,s.jsx)(n.h3,{id:"backups",children:"Backups"}),"\n",(0,s.jsxs)(n.p,{children:["Before causing any major change, backup any data that has value to your development. On your Fedow instance, you only need to save the ",(0,s.jsx)(n.code,{children:"database"})," folder regularly. The other engines can be backed up through the Borgbackup util, cron tasks and database dumps. More about this in the future."]}),"\n",(0,s.jsx)("mark",{children:"TODO: detailed backup explanation"})]})}function a(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>d,x:()=>l});var s=t(6540);const i={},r=s.createContext(i);function d(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/927f7f94.ed4d6bd9.js b/assets/js/927f7f94.ed4d6bd9.js new file mode 100644 index 00000000..5051f3c3 --- /dev/null +++ b/assets/js/927f7f94.ed4d6bd9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[1329],{9878:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>a,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var s=t(4848),i=t(8453);const r={sidebar_position:10,slug:"development",title:"Development",keywords:["contribute","volunteer","open source","git","pull request","issue","help","code","development","programming","python","django","docker","poetry","testing","tdd"],tags:["contribute","open source","git","help","tdd","python","django","docker","poetry"],authors:"kaya, guillaume"},d="Development",l={id:"contribute/dev",title:"Development",description:"So, you want to help with the development of TiBillet. Thank you! Open-source thrives thanks to people like you \ud83d\ude4f",source:"@site/docs/contribute/dev.md",sourceDirName:"contribute",slug:"/contribute/development",permalink:"/docs/contribute/development",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/contribute/dev.md",tags:[{inline:!0,label:"contribute",permalink:"/docs/tags/contribute"},{inline:!0,label:"open source",permalink:"/docs/tags/open-source"},{inline:!0,label:"git",permalink:"/docs/tags/git"},{inline:!0,label:"help",permalink:"/docs/tags/help"},{inline:!0,label:"tdd",permalink:"/docs/tags/tdd"},{inline:!0,label:"python",permalink:"/docs/tags/python"},{inline:!0,label:"django",permalink:"/docs/tags/django"},{inline:!0,label:"docker",permalink:"/docs/tags/docker"},{inline:!0,label:"poetry",permalink:"/docs/tags/poetry"}],version:"current",sidebarPosition:10,frontMatter:{sidebar_position:10,slug:"development",title:"Development",keywords:["contribute","volunteer","open source","git","pull request","issue","help","code","development","programming","python","django","docker","poetry","testing","tdd"],tags:["contribute","open source","git","help","tdd","python","django","docker","poetry"],authors:"kaya, guillaume"},sidebar:"tutorialSidebar",previous:{title:"Contributing",permalink:"/docs/category/contributing"},next:{title:"Research",permalink:"/docs/category/research"}},o={},c=[{value:"Understanding the workflow",id:"understanding-the-workflow",level:2},{value:"Tools and languages used",id:"tools-and-languages-used",level:2},{value:"Simple local install",id:"simple-local-install",level:2},{value:"Detailed local installation",id:"detailed-local-installation",level:2},{value:"Key generation",id:"key-generation",level:3},{value:"Fedow, Lespass, LaBoutik",id:"fedow-lespass-laboutik",level:3},{value:"Fedow environment",id:"fedow-environment",level:4},{value:"Lespass environment",id:"lespass-environment",level:4},{value:"LaBoutik environment",id:"laboutik-environment",level:4},{value:"Tests setup",id:"tests-setup",level:3},{value:"Manual engine start",id:"manual-engine-start",level:2},{value:"Is it working?",id:"is-it-working",level:3},{value:"Lifecycle",id:"lifecycle",level:2},{value:"Updates",id:"updates",level:3},{value:"Testing",id:"testing",level:3},{value:"Backups",id:"backups",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"development",children:"Development"})}),"\n",(0,s.jsx)(n.p,{children:"So, you want to help with the development of TiBillet. Thank you! Open-source thrives thanks to people like you \ud83d\ude4f"}),"\n",(0,s.jsxs)(n.p,{children:["First, if you don't have a specific task in mind already, check out the open issues on the official ",(0,s.jsx)(n.a,{href:"https://github.com/TiBillet",children:"Github repositories"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"It's the easiest way to figure out what problem needs fixing or what feature is being requested."}),"\n",(0,s.jsxs)(n.admonition,{title:"Repositories",type:"note",children:[(0,s.jsx)(n.p,{children:"What you need is probably in the pinned repositories. If you are unsure of the role of Fedow, LaBoutik or Lespass, check out the basics on the three TiBillet engines."}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)("mark",{children:"TODO: link to engines and their roles in the doc"})," (a very basic page in intro probably)"]})]}),"\n",(0,s.jsx)(n.h2,{id:"understanding-the-workflow",children:"Understanding the workflow"}),"\n",(0,s.jsxs)(n.p,{children:["When you work with ",(0,s.jsx)(n.em,{children:"Git forges"})," like Github, there are ways in which you can make your contributions easier to handle:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["If you're not part of the core team, ",(0,s.jsx)(n.em,{children:"fork"})," the repository that interests you, work from there, and submit your changes through a ",(0,s.jsx)(n.em,{children:"pull request"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"If you have an issue you want to work on, check that it doesn't already exists. If it does, join the discussion instead of doing your own thing!"}),"\n",(0,s.jsxs)(n.li,{children:["When you start working on an issue, ",(0,s.jsx)(n.strong,{children:"assign yourself"})," to let others know you're working on it."]}),"\n",(0,s.jsxs)(n.li,{children:["Last but not least: ",(0,s.jsx)(n.strong,{children:"don't create pull requests without running the tests"}),"! Happens to the best of us. Ideally, you should run them before committing, with the help of a ",(0,s.jsx)(n.em,{children:"git hook"})," for example."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Getting help",type:"note",children:(0,s.jsxs)(n.p,{children:["If you have any questions regarding Git, Github, or an aspect of development, join us on ",(0,s.jsx)(n.a,{href:"https://discord.gg/7FJvtYx",children:"Discord"})," or ",(0,s.jsx)(n.a,{href:"https://matrix.to/#/#tibillet:tiers-lieux.org",children:"Matrix"}),". These are mostly French-speaking spaces as the founders are from La Reunion, but we'll do our best to help (with a bit of ",(0,s.jsx)(n.em,{children:"un accent"})," \ud83c\udf77\ud83e\udd56)."]})}),"\n",(0,s.jsx)(n.h2,{id:"tools-and-languages-used",children:"Tools and languages used"}),"\n",(0,s.jsx)(n.p,{children:"TiBillet is:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://www.python.org/",children:"Python"})," software"]}),"\n",(0,s.jsxs)(n.li,{children:["developed with the help of the ",(0,s.jsx)(n.a,{href:"https://www.djangoproject.com/",children:"Django"})," framework"]}),"\n",(0,s.jsxs)(n.li,{children:["its dependencies are handled through ",(0,s.jsx)(n.a,{href:"https://python-poetry.org/",children:"Poetry"})]}),"\n",(0,s.jsxs)(n.li,{children:["it runs in ",(0,s.jsx)(n.a,{href:"https://www.docker.com/",children:"Docker"})," containers for production as well as development"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If you don't feel at ease with the software stack, the best thing you can do is to go look for tutorials. Hopefully we'll compile a list of our own down here one of these days \ud83d\ude05"}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"In particular, basic knowledge of Git can help. It is relatively easy to make a complete mess of a project by not grasping the way versioning works. There are safeguards, but you might struggle a lot more than necessary! I remember how that feels \ud83d\ude11"})}),"\n",(0,s.jsx)(n.h2,{id:"simple-local-install",children:"Simple local install"}),"\n",(0,s.jsx)(n.p,{children:"In order to develop and test things out, you're gonna need a (mostly) functional instance of TiBillet on your computer."}),"\n",(0,s.jsx)(n.p,{children:"Let's make sure you have the required tools at hand. You need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Docker CLI and the ",(0,s.jsx)(n.code,{children:"docker-compose"})," extension"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"git"})}),"\n",(0,s.jsx)(n.li,{children:"a Github account with a registered SSH key for forge access"}),"\n",(0,s.jsx)(n.li,{children:"an IDE (there are open-source gift licenses of PyCharm available on request, but a regular IDE like VSCodium works reasonably well - that's what I'm using \ud83d\ude09)"}),"\n"]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsx)(n.p,{children:"From here, you can choose between two paths:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.strong,{children:"Too easy !"})," path: ",(0,s.jsx)(n.a,{href:"https://nuage.tierslieux.re/s/rprGfbDDDrazJ9d",children:"I download an archive"})," in which everything is already installed and I can go straight to ",(0,s.jsx)(n.a,{href:"#manual-engine-start",children:"engine startup"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.strong,{children:"I want to understand! path"}),": Each step in creating your environment is detailed in the ",(0,s.jsx)(n.a,{href:"#installation-locale-d%C3%A9taill%C3%A9e",children:"tuto below"}),"."]}),"\n"]}),(0,s.jsx)(n.p,{children:"You can even do both, for maximum effect!"})]}),"\n",(0,s.jsx)(n.h2,{id:"detailed-local-installation",children:"Detailed local installation"}),"\n",(0,s.jsx)(n.p,{children:"Translated with DeepL.com (free version)\nWe're gonna start by creating a folder that will hold the different repositories required, in your local repository or work folder if you have one for example. It will look like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"tibillet-dev\n\u251c\u2500\u2500 Fedow\n\u251c\u2500\u2500 LaBoutik\n\u251c\u2500\u2500 Lespass\n\u251c\u2500\u2500 Test-Driven-Development\n\u2514\u2500\u2500 Traefik\n"})}),"\n",(0,s.jsx)(n.h3,{id:"key-generation",children:"Key generation"}),"\n",(0,s.jsx)("mark",{children:"TODO: Complicated and heavy for no reason."}),"\n",(0,s.jsx)(n.p,{children:"The legacy way of generating the necessary configuration keys is to pull the production Fedow docker image and run poetry inside of it."}),"\n",(0,s.jsx)(n.p,{children:"For each engine, we will need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["one or two Fernet keys (for the ",(0,s.jsx)(n.code,{children:"FERNET_KEY"})," field and possibly, passwords)"]}),"\n",(0,s.jsxs)(n.li,{children:["a Django secret key (for the ",(0,s.jsx)(n.code,{children:"SECRET_KEY"})," field)"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"You can generate 30 of each in your terminal by running:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker run --rm tibillet/fedow poetry run python3 -c \"from cryptography.fernet import Fernet; print('\\n'.join([Fernet.generate_key().decode('utf-8') for i in range(0,30)]))\"\ndocker run --rm tibillet/fedow poetry run python3 -c \"from django.core.management.utils import get_random_secret_key; print('\\n'.join([get_random_secret_key() for i in range(0,30)]))\"\n"})}),"\n",(0,s.jsx)(n.p,{children:"The first line will take some time as it need to pull the entire Docker image. Keep the keys somewhere, we're gonna need them to setup the engines."}),"\n",(0,s.jsxs)(n.p,{children:["We're also going to need a Stripe test key for the ",(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})," field. Stripe is the payment solution that is currently taking care of the cashing in. You can obtain a key by creating a free account, then by going to Test mode -> API test key. Alternatively you can ask the team."]}),"\n",(0,s.jsx)(n.h3,{id:"fedow-lespass-laboutik",children:"Fedow, Lespass, LaBoutik"}),"\n",(0,s.jsx)(n.p,{children:"Start by cloning the repositories:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"git clone git@github.com:TiBillet/Fedow.git\ngit clone git@github.com:TiBillet/Lespass.git\ngit clone git@github.com:TiBillet/LaBoutik.git\n"})}),"\n",(0,s.jsx)(n.p,{children:"From here, we need to write a bit of configuration. It will be better streamlined in the future, so bear with us \ud83d\ude0b"}),"\n",(0,s.jsxs)(n.p,{children:["Each engine needs its own ",(0,s.jsx)(n.code,{children:".env"})," file, which you can base on the ",(0,s.jsx)(n.code,{children:"env_example"})," files you cloned."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Each environment variable must be readable from the ",(0,s.jsx)(n.code,{children:".env"})," file. No line deletion! Some of them can however stay empty (nullable)."]})}),"\n",(0,s.jsx)(n.h4,{id:"fedow-environment",children:"Fedow environment"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"cp Fedow/env_example Fedow/.env\n"})}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Target environment"}),(0,s.jsx)(n.th,{children:"Nullable"}),(0,s.jsx)(n.th,{children:"Default value"}),(0,s.jsx)(n.th,{children:"Notes"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SECRET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Django secret key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FERNET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Fernet key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_KEY"})}),(0,s.jsx)(n.td,{children:"Production"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Your Stripe API key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DOMAIN"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"fedow.tibillet.localhost"})}),(0,s.jsx)(n.td,{children:"Change to you domain and subdomain for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Your Stripe API test key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsxs)(n.td,{children:["Set to 1 if ",(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})," is filled"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_ENDPOINT_SECRET_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"No idea"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DEBUG"})}),(0,s.jsx)(n.td,{children:"Development"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for development"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TEST"})}),(0,s.jsx)(n.td,{children:"Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for testing"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"lespass-environment",children:"Lespass environment"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"cp Lespass/env_example Lespass/.env\n"})}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Target environment"}),(0,s.jsx)(n.th,{children:"Nullable"}),(0,s.jsx)(n.th,{children:"Default value"}),(0,s.jsx)(n.th,{children:"Notes"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SECRET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Django secret key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FERNET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Fernet key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_KEY"})}),(0,s.jsx)(n.td,{children:"Production"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Your Stripe API key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DOMAIN"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"tibillet.localhost"})}),(0,s.jsx)(n.td,{children:"Change to your domain for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SUB"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"lespass"})}),(0,s.jsx)(n.td,{children:"Instance subdomain, change for production mode as necessary"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"META"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"agenda"})}),(0,s.jsx)(n.td,{children:"Federated calendar subdomain, change for production mode as necessary"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FEDOW_DOMAIN"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"fedow.tibillet.localhost"})}),(0,s.jsx)(n.td,{children:"Domain and subdomain of the Fedow engine"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"PUBLIC"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"TiBillet Coop."}),(0,s.jsx)(n.td,{children:"Main instance name"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TIME_ZONE"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Europe/Paris"}),(0,s.jsx)(n.td,{children:"TZ time zone of the instance"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ADMIN_EMAIL"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Admin email (for the first admin)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_DB"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"lespass"}),(0,s.jsx)(n.td,{children:"Change for production mode if necessary"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_USER"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"lespass_postgres"}),(0,s.jsx)(n.td,{children:"Change for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_PASSWORD"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Strong password (one of the Fernet keys for example)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"EMAIL_HOST"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_PORT"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_HOST_USER"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_HOST_PASSWORD"})]}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Email server, required to confirm user registrations for example"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Your Stripe API test key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"STRIPE_TEST"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsxs)(n.td,{children:["Set to 1 if ",(0,s.jsx)(n.code,{children:"STRIPE_KEY_TEST"})," is filled"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DEBUG"})}),(0,s.jsx)(n.td,{children:"Development"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for development"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TEST"})}),(0,s.jsx)(n.td,{children:"Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for testing"})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"laboutik-environment",children:"LaBoutik environment"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"cp LaBoutik/env_example LaBoutik/.env\n"})}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Target environment"}),(0,s.jsx)(n.th,{children:"Nullable"}),(0,s.jsx)(n.th,{children:"Default value"}),(0,s.jsx)(n.th,{children:"Notes"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SECRET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Django secret key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FERNET_KEY"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"One of the previously generated Fernet key"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DOMAIN"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"laboutik.tibillet.localhost"})}),(0,s.jsx)(n.td,{children:"Change to you domain and subdomain for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"FEDOW_URL"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.a,{href:"https://fedow.tibillet.localhost/",children:"https://fedow.tibillet.localhost/"})}),(0,s.jsx)(n.td,{children:"Fedow engine URL"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"LESPASS_TENANT_URL"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.a,{href:"https://lespass.tibillet.localhost/",children:"https://lespass.tibillet.localhost/"})}),(0,s.jsx)(n.td,{children:"Lespass instance URL"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TIME_ZONE"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"Europe/Paris"}),(0,s.jsx)(n.td,{children:"TZ time zone of the instance"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ADMIN_EMAIL"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Admin email (for the first admin)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"MAIN_ASSET_NAME"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Name of your main cashless asset (Centiment, HeartBit\u2026 whatever you like)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_DB"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"laboutik"}),(0,s.jsx)(n.td,{children:"Change for production mode if necessary"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_USER"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"laboutik_user"}),(0,s.jsx)(n.td,{children:"Change for production mode"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"POSTGRES_PASSWORD"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Strong password (one of the Fernet keys for example)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"EMAIL_HOST"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_PORT"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_HOST_USER"}),", ",(0,s.jsx)(n.code,{children:"EMAIL_HOST_PASSWORD"})]}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Email server, required to confirm user registrations for example"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"BORG_PASSPHRASE"})}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Password used for data backup"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DEBUG"})}),(0,s.jsx)(n.td,{children:"Development"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for development"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"TEST"})}),(0,s.jsx)(n.td,{children:"Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for testing"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DEMO"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"Set to 1 for a register simulation"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"SENTRY_DNS"})}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Sentry Debug pour le back-end"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"SENTRY_FRONT_DNS"}),", ",(0,s.jsx)(n.code,{children:"SENTRY_FRONT_ASSET"})]}),(0,s.jsx)(n.td,{children:"Development, Testing"}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Sentry Debug for front-end"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"DEMO_TAGID_CM"}),", ",(0,s.jsx)(n.code,{children:"DEMO_TAGID_CLIENT1"}),", ",(0,s.jsx)(n.code,{children:"DEMO_TAGID_CLIENT2"})]}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"No idea"})]})]})]}),"\n",(0,s.jsx)(n.p,{children:"The configuration should now be complete for the TiBillet engines."}),"\n",(0,s.jsx)(n.h3,{id:"tests-setup",children:"Tests setup"}),"\n",(0,s.jsx)(n.p,{children:"For\u2026 reasons, the entire dev environment is assembled through the tests. The setup of the testing repository might seem familiar:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="tibillet-dev$"',children:"git clone git@github.com:TiBillet/Test-Driven-Development.git\ncp Test-Driven-Development/env_example Test-Driven-Development/.env\n"})}),"\n",(0,s.jsx)(n.p,{children:"There! Setup done \u263a\ufe0f Now we can start running the entire project from inside the test folder:"}),"\n",(0,s.jsx)(n.h2,{id:"manual-engine-start",children:"Manual engine start"}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"If you've downloaded the ready-to-install folder, remember to perform a git pull in each of the 4 repositories before launching!"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Test-Driven-Development$"',children:"docker network create frontend # only the first time. Traefik need this virtual network.\ndocker compose up -d\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can access the logs with:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Test-Driven-Development$"',children:"docker compose logs -f\n"})}),"\n",(0,s.jsx)(n.p,{children:"To delete the containers :"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Test-Driven-Development$"',children:"docker compose down -v # -v for the volumes used by database.\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"Careful!",type:"warning",children:(0,s.jsxs)(n.p,{children:["This particular ",(0,s.jsx)(n.code,{children:"docker-compose.yml"})," relies on the folder structure of its ",(0,s.jsx)(n.em,{children:"parent folder"})," shown in the beginning with the example name of ",(0,s.jsx)(n.code,{children:"tibillet-dev"}),". Counterintuitive, but hey: now you know!"]})}),"\n",(0,s.jsxs)(n.p,{children:["The main difference between dev and prod containers is that running the ",(0,s.jsx)(n.code,{children:"docker compose"})," command will not start the individual Django apps. It's a level of granularity that helps with development, but it means you get to start them manually by entering the containers. Lucky you! \ud83c\udf40"]}),"\n",(0,s.jsx)(n.p,{children:"Were're gonna start them in a particular order:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Fedow"}),"\n",(0,s.jsx)(n.li,{children:"Lespass"}),"\n",(0,s.jsx)(n.li,{children:"LaBoutik (needs the other two to start)"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The tools we need are in the Django containers, named after the engines: ",(0,s.jsx)(n.code,{children:"fedow_django"}),", ",(0,s.jsx)(n.code,{children:"lespass_django"})," and ",(0,s.jsx)(n.code,{children:"laboutik_django"}),". To enter a container (Fedow example) :"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# starting bash shell in fedow_django container\ndocker exec -ti fedow_django bash\n"})}),"\n",(0,s.jsx)(n.p,{children:"From there we have a few options."}),"\n",(0,s.jsxs)(n.p,{children:["First is the ",(0,s.jsx)(n.code,{children:"flush.sh"})," script. It initializes testing data and starts the app right after. This is what we're gonna use at ",(0,s.jsx)(n.strong,{children:"first boot"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="fedow_django$"',children:"./flush.sh\n"})}),"\n",(0,s.jsxs)(n.p,{children:["We will also use it when we want to ",(0,s.jsx)(n.strong,{children:"reset"})," data, for example before starting the automated testing with relies on this predictible data."]}),"\n",(0,s.jsx)(n.p,{children:"For the rest of the container manipulations, we're going to need the Poetry shell, because we're gonna use Python commands."}),"\n",(0,s.jsx)(n.p,{children:"To start Poetry's virtual env from the container:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="fedow_django$"',children:" # we start the virtual env that handles the python dependencies\npoetry shell\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Django is handled through a script called ",(0,s.jsx)(n.code,{children:"manage.py"}),". Two commands are of interest to us here:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"rsp"})," (alias of ",(0,s.jsx)(n.code,{children:"./manage.py runserver 0.0.0.0:8000"}),") starts Django but doesn't wipe out the data. This will help keep data between sessions. GThis command is used in most cases, ",(0,s.jsx)(n.code,{children:"flush"})," is only used for testing or when something's gonz wrong."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["As an option, if you're encontering graphical issues (such as assets not loading), you can attempt ",(0,s.jsx)(n.code,{children:"./manage.py collectstatic"}),". Sometimes the graphical assets are not properly collected at first boot, in which case this can help."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Only thing left to do is to start the three engines in the order described earlier : Fedow, Lespass, then LaBoutik !"}),"\n",(0,s.jsxs)(n.admonition,{title:"Aliasing",type:"tip",children:[(0,s.jsx)(n.p,{children:"The docker command gets repetitive after a while. Why not create an alias, or even a little bash function that will shorten your labor and preserve your carpal tunnel? Here's mine:"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="~/.bashrc"',children:"function dockex {\n docker exec -ti $1 bash\n}\n"})}),(0,s.jsx)(n.p,{children:"There's probably even a way to add the poetry stuff to it, look it up!"})]}),"\n",(0,s.jsx)(n.h3,{id:"is-it-working",children:"Is it working?"}),"\n",(0,s.jsx)(n.p,{children:"If you have used the default domain configuration, you can now access:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["the federation engine Fedow at ",(0,s.jsx)(n.a,{href:"https://fedow.tibillet.localhost",children:"fedow.tibillet.localhost"})]}),"\n",(0,s.jsxs)(n.li,{children:["an instance of the ticketing engine Lespass at ",(0,s.jsx)(n.a,{href:"https://lespass.tibillet.localhost",children:"lespass.tibillet.localhost"})]}),"\n",(0,s.jsxs)(n.li,{children:["the currency register server LaBoutik at ",(0,s.jsx)(n.a,{href:"https://laboutik.tibillet.localhost",children:"laboutik.tibillet.localhost"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If everything is working as expected, congratulations: you're ready to go \ud83d\udd27"}),"\n",(0,s.jsx)(n.p,{children:"If not, come talk to us, we'd love to help!"}),"\n",(0,s.jsxs)(n.admonition,{title:"Wrapping up",type:"note",children:[(0,s.jsxs)(n.p,{children:["Don't forget to ",(0,s.jsx)(n.code,{children:"docker compose down"})," both here and in Traefik when you're done. You computer needs a break sometimes."]}),(0,s.jsxs)(n.p,{children:["If you think you won't remember, remove the daemon option when you compose up (",(0,s.jsx)(n.code,{children:"-d"}),") and the command will run directly in the terminal, not as a background job. It's fine, you'll just need more tabs \ud83d\ude0b"]})]}),"\n",(0,s.jsx)(n.h2,{id:"lifecycle",children:"Lifecycle"}),"\n",(0,s.jsx)(n.h3,{id:"updates",children:"Updates"}),"\n",(0,s.jsx)(n.p,{children:"To stay up to date during development, pull the latest image:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="Test-Driven-Development$"',children:"docker compose pull\ndocker compose up -d # start or restart the updated containers\n"})}),"\n",(0,s.jsx)(n.h3,{id:"testing",children:"Testing"}),"\n",(0,s.jsx)(n.p,{children:"You can run the Python tests through the same shell-ception required to do a manual start. Start by flushing the 3 Django apps to get fresh testing data, then run this inside your LaBoutik Django container:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="laboutik_django> poetry shell$"',children:"./manage.py test\n"})}),"\n",(0,s.jsx)("mark",{children:"TODO: end-to-end tests docs (they exist!)"}),"\n",(0,s.jsx)(n.h3,{id:"backups",children:"Backups"}),"\n",(0,s.jsxs)(n.p,{children:["Before causing any major change, backup any data that has value to your development. On your Fedow instance, you only need to save the ",(0,s.jsx)(n.code,{children:"database"})," folder regularly. The other engines can be backed up through the Borgbackup util, cron tasks and database dumps. More about this in the future."]}),"\n",(0,s.jsx)("mark",{children:"TODO: detailed backup explanation"})]})}function a(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>d,x:()=>l});var s=t(6540);const i={},r=s.createContext(i);function d(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9812aca5.0ea617de.js b/assets/js/9812aca5.0ea617de.js deleted file mode 100644 index d516d3e3..00000000 --- a/assets/js/9812aca5.0ea617de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[4171],{7982:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var o=s(4848),n=s(8453);const i={sidebar_position:1},r="Social media posting",c={id:"Tips/facebook",title:"Social media posting",description:"An RSS feed is created by Tenant. It lists the last 5 events created.",source:"@site/docs/Tips/facebook.md",sourceDirName:"Tips",slug:"/Tips/facebook",permalink:"/docs/Tips/facebook",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Tips/facebook.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Trucs et astuces",permalink:"/docs/category/trucs-et-astuces"},next:{title:"DIY",permalink:"/docs/category/diy"}},a={},d=[];function l(e){const t={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"social-media-posting",children:"Social media posting"})}),"\n",(0,o.jsx)(t.p,{children:"An RSS feed is created by Tenant. It lists the last 5 events created.\nWith"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"/rss/latest/feed\n"})}),"\n",(0,o.jsxs)(t.p,{children:["Example :\n",(0,o.jsx)(t.a,{href:"https://demo.betabillet.tech/rss/latest/feed",children:"https://demo.betabillet.tech/rss/latest/feed"}),"."]}),"\n",(0,o.jsx)(t.p,{children:"With a service like Zapier or IFTTT, it is possible to connect an RSS feed with your Facebook page or your Twitter account, and more !"}),"\n",(0,o.jsx)(t.p,{children:"ex:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.a,{href:"https://zapier.com/apps/facebook-pages/integrations/rss/39/post-new-rss-items-to-a-facebook-page",children:"https://zapier.com/apps/facebook-pages/integrations/rss/39/post-new-rss-items-to-a-facebook-page"}),"."]}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://ifttt.com/connect/feed/twitter",children:"https://ifttt.com/connect/feed/twitter"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://carlchenet.com/get-your-rss-feeds-to-mastodon-with-the-feed2toot-bot/",children:"https://carlchenet.com/get-your-rss-feeds-to-mastodon-with-the-feed2toot-bot/"})}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>c});var o=s(6540);const n={},i=o.createContext(n);function r(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9812aca5.f96fd4b4.js b/assets/js/9812aca5.f96fd4b4.js new file mode 100644 index 00000000..12d74864 --- /dev/null +++ b/assets/js/9812aca5.f96fd4b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[4171],{7982:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var n=s(4848),o=s(8453);const i={sidebar_position:1},r="Social media posting",c={id:"Tips/facebook",title:"Social media posting",description:"An RSS feed is created by Tenant. It lists the last 5 events created.",source:"@site/docs/Tips/facebook.md",sourceDirName:"Tips",slug:"/Tips/facebook",permalink:"/docs/Tips/facebook",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Tips/facebook.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Trucs et astuces",permalink:"/docs/category/trucs-et-astuces"},next:{title:"DIY",permalink:"/docs/category/diy"}},a={},d=[];function l(e){const t={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"social-media-posting",children:"Social media posting"})}),"\n",(0,n.jsx)(t.p,{children:"An RSS feed is created by Tenant. It lists the last 5 events created.\nWith"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"/rss/latest/feed\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Example :\n",(0,n.jsx)(t.a,{href:"https://demo.betabillet.tech/rss/latest/feed",children:"https://demo.betabillet.tech/rss/latest/feed"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"With a service like Zapier or IFTTT, it is possible to connect an RSS feed with your Facebook page or your Twitter account, and more !"}),"\n",(0,n.jsx)(t.p,{children:"ex:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://zapier.com/apps/facebook-pages/integrations/rss/39/post-new-rss-items-to-a-facebook-page",children:"https://zapier.com/apps/facebook-pages/integrations/rss/39/post-new-rss-items-to-a-facebook-page"}),"."]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://ifttt.com/connect/feed/twitter",children:"https://ifttt.com/connect/feed/twitter"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://carlchenet.com/get-your-rss-feeds-to-mastodon-with-the-feed2toot-bot/",children:"https://carlchenet.com/get-your-rss-feeds-to-mastodon-with-the-feed2toot-bot/"})}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>c});var n=s(6540);const o={},i=n.createContext(o);function r(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9830a4d3.01fe8f43.js b/assets/js/9830a4d3.bfd517cb.js similarity index 54% rename from assets/js/9830a4d3.01fe8f43.js rename to assets/js/9830a4d3.bfd517cb.js index 66b315b1..4942608c 100644 --- a/assets/js/9830a4d3.01fe8f43.js +++ b/assets/js/9830a4d3.bfd517cb.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7761],{341:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>k,frontMatter:()=>g,metadata:()=>m,toc:()=>f});var n=s(4848),i=s(8453),a=s(6540);function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:s,...n}=e;return a.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",width:190.328,height:83.908,viewBox:"0 0 50.358 22.201","aria-labelledby":s},n),t?a.createElement("title",{id:s},t):null,a.createElement("path",{d:"M2303.358 15.346c-.856.025-1.711.32-2.319.943-.316.433-.561.45-1 .175-.776-.128-1.664.057-2.234.618.126.158.447.048.65.096.307.026 1.093-.023.386.145a3.02 3.02 0 0 0-1.565 1.448c.326.125.79-.351 1.152-.422.346-.125 1.28-.65 1.264-.54-.588.67-.805 1.656-.626 2.521.253.39.643-.546.894-.69a3.23 3.23 0 0 0 .841-2.01c.78.928 1.143 2.152 1.058 3.355-.02.9-.16 1.791-.32 2.675-1.662-.072-3.353.436-4.682 1.438.307.239 1.155-.257 1.642-.205 1.56-.228 3.177-.355 4.711.095 2.227.588 4.27.831 6.579.447.716-.128 1.461-.28 2.076-.692.073-.292-.203-.543-.347-.777-.416-.585-.793-1.126-1.165-1.66l.736-3.486c.216.11 1.657.825 4.067 1.616l.944 2.369a.143.143 0 0 0 .238.045l1.47-1.643a41 41 0 0 0 2.403.542l1.176 1.908a.143.143 0 0 0 .238.014l1.168-1.513q1.273.163 2.638.244l1.359 1.843a.143.143 0 0 0 .24-.017l.948-1.762a51 51 0 0 0 3.193-.123l1.265 1.566a.143.143 0 0 0 .237-.017l1.013-1.787c1.657-.195 2.659-.379 2.961-.438l.406 2.508-1.405.933a.415.415 0 0 0 .23.761h6.954a.415.415 0 0 0 .313-.688l-2.358-2.698a.42.42 0 0 0-.355-.139.42.42 0 0 0-.32.211l-.44.795-.305-.308a.415.415 0 0 0-.525-.055l-1.117.742-.645-3.467a.14.14 0 0 0-.142-.116h-.367a.143.143 0 0 0-.142.167l.118.727c-.532.105-4.185.794-8.905.794-9.426 0-16.349-3.623-16.349-3.623a.3.3 0 0 0-.073-.006l.243-1.152a.14.14 0 0 0-.089-.163l-.604-.207a.145.145 0 0 0-.195.101l-.942 4.5a73 73 0 0 0-1.294-1.784c-.345.17-.547.652-.841.924-.211.284-.407.662-.563.1-.447-.677-.885-1.362-1.35-2.024-.342.186-.492.74-.777 1.028-.296.41-.556.86-.872 1.244-.248.138-.578.186-.683.487-.092.092-.301.605-.3.366-.018-1.035.016-2.125-.535-3.048-.115-.384-.723-1-.677-1.199.929.109 1.856.23 2.786.325 0-.486-.789-.92-1.273-1.068-.342-.187-1.215-.004-1.289-.069.507-.348 1.002-.73 1.449-1.148.017-.035-.021-.074-.057-.072z",style:{color:"#000",opacity:.4,fillOpacity:1,strokeWidth:.999999,strokeLinejoin:"round",InkscapeStroke:"none"},transform:"translate(-2296.848 -15.346)"}),a.createElement("path",{d:"M2300.691 25.725c-2.216 0-3.747.942-3.747.942-.068.001-.078.005-.078.067l-.017 6.385v1.685l.017-.006s.894.107 1.222.38c.872.73 1.026 1.935 1.052 2.272v.096h1.49a.782.782 0 0 1 1.563 0h1.49a.781.781 0 0 1 1.564 0h1.49c0-.431.35-.78.782-.78h.057c.318 0 .605.192.725.486v-.022q.07.15.071.316h1.37c0-.436.353-.788.782-.788.423 0 .769.342.781.771.494-.038.95-.173 1.363-.42q.747-.45 1.184-1.198a3.2 3.2 0 0 0 .436-1.652q0-.654-.25-1.247a3.3 3.3 0 0 0-.7-1.043q.421-.36.716-.935.312-.577.312-1.246 0-.825-.405-1.528a3.1 3.1 0 0 0-1.106-1.12 2.95 2.95 0 0 0-1.59-.437h-2.99q-.001 0 0 0c-.05-.001-1.78-.062-2.66-.161-1.652-.187-1.734-.817-4.921-.817zm15.774.912q-.063 0-.063.062l-.017 10.704q0 .078.078.078h1.761q.063 0 .063-.078l-.017-10.704q0-.062-.063-.062zm4.385 0q-.077 0-.077.078l-.018 10.688q0 .078.064.078h5.032q.078 0 .078-.078v-1.76q0-.079-.078-.078h-3.21l.017-8.85q0-.078-.078-.078zm6.834 0q-.078 0-.078.078l-.017 10.688q0 .078.063.078h5.032q.078 0 .078-.078v-1.76q0-.079-.078-.078h-3.21l.018-8.85q0-.078-.078-.078zm6.75 0q-.064 0-.064.062l-.017 10.704q0 .078.063.078h5.033q.063 0 .062-.062v-1.776q0-.078-.062-.078h-3.21v-2.727h3.21q.063 0 .062-.062l-.017-1.76q0-.063-.063-.063h-3.195v-2.431h3.195q.063 0 .063-.062v-1.745q0-.078-.063-.078zm6.775 0q-.063 0-.063.062l-.017 1.746q0 .078.078.077h2.025v8.88q0 .08.063.079h1.761q.063 0 .063-.078l-.017-8.881h2.041q.063 0 .063-.077v-1.746q0-.062-.078-.062zm-34.812 1.208c.058.018.28.049.341.11q.123.115.124.353 0 .248-.15.442-.141.194-.459.194a.45.45 0 0 1-.319-.114q-.123-.124-.123-.354a.75.75 0 0 1 .14-.45c.069-.088.336-.153.446-.18m-3.557.56s.283.027.336.08q.08.08.026.238l-.433 1.715h1.114q.106 0 .15.088.045.08 0 .265a.55.55 0 0 1-.115.265.24.24 0 0 1-.185.088h-1.149l-.45 1.715a2.6 2.6 0 0 0-.097.645c0 .188.033.344.08.468a.67.67 0 0 0 .213.283q.141.089.318.088v.001h.017q.203 0 .459-.204.255-.203.592-.645.327-.45.778-1.193c.265-.437.57-.965.909-1.572l.037-.151q.053-.168.132-.221a.53.53 0 0 1 .266-.053q.255 0 .335.08.08.078.026.238l-.839 3.313a.8.8 0 0 0-.026.292q.026.089.14.088a.24.24 0 0 0 .15-.053 1 1 0 0 0 .158-.15q.098-.105.221-.274.062-.088.132-.097.08-.018.177.044.141.08.176.168.035.08-.017.168-.166.292-.353.486a1.2 1.2 0 0 1-.398.283 1 1 0 0 1-.441.097q-.469 0-.618-.353-.142-.362.054-1.052l.248-1.031c-.045.08-.09.162-.134.236a12 12 0 0 1-.865 1.316q-.381.486-.725.698-.353.203-.734.204l-.017-.001-.017.001q-.398 0-.662-.177-.255-.185-.389-.486a1.9 1.9 0 0 1-.14-.707c0-.265.026-.54.097-.822l.432-1.67h-.67q-.106 0-.15-.088-.036-.088 0-.265a.5.5 0 0 1 .115-.265.26.26 0 0 1 .185-.088h.707l.45-1.76c.028-.11.064-.184.124-.22a.5.5 0 0 1 .264-.053zm7.241.152h1.184q.498 0 .857.374.358.357.358.857 0 .45-.343.84-.326.375-.872.375h-1.184zm0 4.33h.95q.561 0 .966.406c.27.27.437.475.45.773.017.25-.123.524-.319.68-.292.235-.724.242-1.098.242h-.965z",style:{opacity:1,fillOpacity:1,stroke:"none",strokeWidth:.864997,strokeLinejoin:"round",strokeDasharray:"none"},transform:"translate(-2296.848 -15.346)"}))};function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:s,...n}=e;return a.createElement("svg",o({xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",width:66.209,height:44.68,viewBox:"0 0 17.518 11.822","aria-labelledby":s},n),t?a.createElement("title",{id:s},t):null,a.createElement("g",{style:{strokeWidth:.575231,stroke:"none"}},a.createElement("path",{d:"M1278.635 53.267c-1.275 0-2.156.542-2.156.542-.039 0-.045.003-.045.038l-.01 3.673v.97l.01-.004s.515.062.704.219c.501.42.59 1.113.605 1.307v.055h.856a.45.45 0 0 1 .9 0h.857a.45.45 0 1 1 .9 0h.857a.45.45 0 0 1 .45-.45l.02.002.013-.001a.45.45 0 0 1 .416.28v-.013a.44.44 0 0 1 .041.182h.788c0-.25.203-.453.45-.454.243 0 .442.197.45.444q.427-.031.783-.241.43-.26.681-.69t.251-.95q0-.377-.143-.717a1.9 1.9 0 0 0-.404-.6q.243-.207.413-.538.18-.331.179-.717 0-.475-.233-.879a1.8 1.8 0 0 0-.636-.645 1.7 1.7 0 0 0-.914-.25h-1.721a27 27 0 0 1-1.53-.093c-.95-.107-.997-.47-2.83-.47zm3.282 1.22c.034.01.162.028.197.063q.07.066.07.203 0 .143-.085.254-.081.112-.264.112a.26.26 0 0 1-.184-.066q-.07-.07-.07-.204a.43.43 0 0 1 .08-.259c.04-.05.193-.087.256-.103zm-2.046.322s.163.015.194.046q.046.045.015.137l-.25.986h.641q.062 0 .086.05.026.047 0 .153a.3.3 0 0 1-.066.153.14.14 0 0 1-.106.05h-.66l-.26.987q-.056.209-.056.37c0 .11.02.199.046.27a.4.4 0 0 0 .122.163q.081.05.183.05h.01q.117 0 .264-.116.147-.117.34-.371.189-.26.448-.687.23-.379.523-.904l.021-.087q.03-.096.076-.127a.3.3 0 0 1 .153-.03q.147 0 .193.045.046.046.015.137l-.483 1.906a.5.5 0 0 0-.015.168q.015.05.081.05.047 0 .086-.03a.6.6 0 0 0 .091-.086q.056-.06.127-.157.036-.051.076-.056.046-.01.102.025.081.046.101.097.02.045-.01.096a1.4 1.4 0 0 1-.203.28.68.68 0 0 1-.483.218q-.27 0-.355-.203-.081-.208.03-.605l.144-.593-.077.136q-.28.477-.498.757-.219.28-.418.401a.84.84 0 0 1-.422.118l-.01-.001h-.01a.67.67 0 0 1-.38-.101.7.7 0 0 1-.224-.28 1.1 1.1 0 0 1-.081-.406c0-.153.015-.31.056-.473l.249-.96h-.386q-.062 0-.086-.051-.021-.051 0-.153a.3.3 0 0 1 .066-.152.15.15 0 0 1 .106-.051h.407l.26-1.012q.02-.096.07-.127a.3.3 0 0 1 .152-.03zm4.165.087h.682q.286 0 .493.215a.67.67 0 0 1 .205.493.72.72 0 0 1-.197.484.63.63 0 0 1-.501.215h-.682zm0 2.491h.547q.322 0 .556.233c.155.156.251.273.259.445a.49.49 0 0 1-.184.391c-.168.135-.416.14-.631.14h-.556z",style:{fillOpacity:1,stroke:"none",strokeWidth:.497575,strokeLinejoin:"round",strokeDasharray:"none"},transform:"matrix(1.73843 0 0 1.73843 -2218.972 -92.601)"})))};function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:s,...n}=e;return a.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",width:113.491,height:74.414,viewBox:"0 0 30.028 19.689","aria-labelledby":s},n),t?a.createElement("title",{id:s},t):null,a.createElement("g",{style:{fillOpacity:.15,strokeWidth:4.11272}},a.createElement("path",{d:"M100 100V50l-50 50ZM50 0v50l50-50ZM0 0l50 50v50L0 50Z",style:{fillOpacity:.15,stroke:"none",strokeWidth:4.11272,strokeDasharray:"none"},transform:"matrix(.30028 0 0 .19689 0 0)"})))},g={sidebar_position:20,slug:"design",title:"Graphic design",keywords:["design","inspiration","events","ticket","island","colors","modern","retro","culture","plays","exhibits","usher","arts"],tags:["design","inspiration","events","island","colors","modern","retro","culture","plays","exhibits","arts"],authors:"kaya"},p="Graphic design",m={id:"work-doc/design",title:"Graphic design",description:"The graphical identity is still in development but we've got a few elements ready!",source:"@site/docs/work-doc/design.md",sourceDirName:"work-doc",slug:"/work-doc/design",permalink:"/docs/work-doc/design",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/work-doc/design.md",tags:[{inline:!0,label:"design",permalink:"/docs/tags/design"},{inline:!0,label:"inspiration",permalink:"/docs/tags/inspiration"},{inline:!0,label:"events",permalink:"/docs/tags/events"},{inline:!0,label:"island",permalink:"/docs/tags/island"},{inline:!0,label:"colors",permalink:"/docs/tags/colors"},{inline:!0,label:"modern",permalink:"/docs/tags/modern"},{inline:!0,label:"retro",permalink:"/docs/tags/retro"},{inline:!0,label:"culture",permalink:"/docs/tags/culture"},{inline:!0,label:"plays",permalink:"/docs/tags/plays"},{inline:!0,label:"exhibits",permalink:"/docs/tags/exhibits"},{inline:!0,label:"arts",permalink:"/docs/tags/arts"}],version:"current",sidebarPosition:20,frontMatter:{sidebar_position:20,slug:"design",title:"Graphic design",keywords:["design","inspiration","events","ticket","island","colors","modern","retro","culture","plays","exhibits","usher","arts"],tags:["design","inspiration","events","island","colors","modern","retro","culture","plays","exhibits","arts"],authors:"kaya"},sidebar:"tutorialSidebar",previous:{title:"Research",permalink:"/docs/category/research"},next:{title:"User stories",permalink:"/docs/work-doc/user-stories"}},u={},f=[{value:"Inspirations",id:"inspirations",level:2},{value:"Iterations (fr)",id:"iterations-fr",level:2},{value:"Resources",id:"resources",level:2}];function x(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"graphic-design",children:"Graphic design"})}),"\n",(0,n.jsx)(t.p,{children:"The graphical identity is still in development but we've got a few elements ready!"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"NFC cards: back design mockup",src:s(4222).A+"",width:"1248",height:"814"})}),"\n",(0,n.jsx)(t.h2,{id:"inspirations",children:"Inspirations"}),"\n",(0,n.jsx)(t.p,{children:"We were looking for something that would represent our ties to the cultural landscape, and distance us from the aesthetics of tech startups and other for-profit technological solutions to social issues. We aggregated two vibes we felt would mesh well together:"}),"\n",(0,n.jsxs)("figure",{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Design inspiration 1: tickets old and new",src:s(4847).A+"",width:"800",height:"566"})}),(0,n.jsx)("figcaption",{children:(0,n.jsx)(t.p,{children:"Tickets old and new: ticket design has always been a hallmark of cultural life, from the first date tickets you still keep in a treasure box to Willy Wonka's golden ticket. There are not one but two (\ud83c\udf9f\ufe0f!) (\ud83c\udfab!) ticket emoji: everyone knows at first glance what they are and has some fondness for the little paper things."})})]}),"\n",(0,n.jsxs)("figure",{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Design inspiration 2: islands",src:s(5201).A+"",width:"800",height:"566"})}),(0,n.jsx)("figcaption",{children:(0,n.jsx)(t.p,{children:"Another angle we came at was the island, the archipelago. TiBillet was born in La Reunion (find it on a map!) and has the ambition to connect communities together, little islands of communal life into bigger archipelagos, so to speak."})})]}),"\n",(0,n.jsx)(t.h2,{id:"iterations-fr",children:"Iterations (fr)"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.img,{alt:"Proposition 1",src:s(9278).A+"",width:"800",height:"566"}),"\n",(0,n.jsx)(t.img,{alt:"Proposition 1.1",src:s(7534).A+"",width:"800",height:"566"})]}),"\n",(0,n.jsx)(t.p,{children:"What we have settled on for now:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Design system",src:s(4373).A+"",width:"1123",height:"794"})}),"\n",(0,n.jsx)(t.h2,{id:"resources",children:"Resources"}),"\n","\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Use"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Preview"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(9168).A+"",children:"Monochrome logo (SVG)"})}),(0,n.jsx)(t.td,{children:"Usable for print and web, plain or busy backgrounds, color can be whatever you want (currently follows font color)"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)(l,{width:"",style:{height:"128px",fill:"var(--ifm-font-color-base)"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(254).A+"",children:"Color logo (SVG)"})}),(0,n.jsx)(t.td,{children:"Quality print or web, larger sizes, light or dark plain backgrounds to let it stand out"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)("img",{src:"/img/design/logo-couleur.svg",style:{height:"128px"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(3544).A+"",children:"Monochrome icon (SVG)"})}),(0,n.jsx)(t.td,{children:"For navbar icons, embossing, small signifiers, whatever color"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)(c,{width:"",style:{height:"64px",fill:"var(--ifm-font-color-base)"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(2333).A+"",children:"Color icon (SVG)"})}),(0,n.jsx)(t.td,{children:"Favicon, app icon, small web branding"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)("img",{src:"/img/design/favicon.svg",style:{height:"96px"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(696).A+"",children:"Bracket pattern (SVG)"})}),(0,n.jsx)(t.td,{children:"Backgrounds, can work under big fonts, whatever color"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)(h,{style:{height:"128px",width:"256px",fill:"var(--ifm-font-color-base)"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(1479).A+"",children:"Gradient pattern (SVG)"})}),(0,n.jsx)(t.td,{children:"Backgrounds, fill of important elements, etc"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)("img",{src:"/img/design/gradient.svg",style:{height:"128px",width:"256px"}})})]})]})]})]})}function k(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},696:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/chevron-564581cc4b7ae7f5551c34b6333357df.svg"},2333:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/favicon-e3c74989c96c70572cc0c35cb813c292.svg"},1479:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/gradient-63f1857f5e363d4a7b721d1a5cbb455a.svg"},3544:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/icon-e08a9ac2e0c45877837604a14ecd3f08.svg"},254:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/logo-couleur-9225d0e1d1aef60b0c9281826ec4ba5e.svg"},9168:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/logo-niveaux-c74cfb72d8df6c8d890273f8d633a7b9.svg"},4847:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/01-tickets-d441e8bc72b0cebe53f49f6da2848063.png"},5201:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/02-islands-1c2f3de95585e374dd8393cf859ec135.png"},9278:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/03-prop1-1a5a89aa1690339041b86696ab980438.png"},7534:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/04-prop2-9d377e365c8c59242b36aa5aa2585e5d.png"},4373:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/05-system-afece72682a4a052fa128e52d4dc345a.png"},4222:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/mockup-ticket-bad9d6c08f14f8279bdac1e5c02ff401.png"},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>l});var n=s(6540);const i={},a=n.createContext(i);function r(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[7761],{341:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>k,frontMatter:()=>g,metadata:()=>m,toc:()=>f});var n=s(4848),i=s(8453),a=s(6540);function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:s,...n}=e;return a.createElement("svg",r({xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",width:190.328,height:83.908,viewBox:"0 0 50.358 22.201","aria-labelledby":s},n),t?a.createElement("title",{id:s},t):null,a.createElement("path",{d:"M2303.358 15.346c-.856.025-1.711.32-2.319.943-.316.433-.561.45-1 .175-.776-.128-1.664.057-2.234.618.126.158.447.048.65.096.307.026 1.093-.023.386.145a3.02 3.02 0 0 0-1.565 1.448c.326.125.79-.351 1.152-.422.346-.125 1.28-.65 1.264-.54-.588.67-.805 1.656-.626 2.521.253.39.643-.546.894-.69a3.23 3.23 0 0 0 .841-2.01c.78.928 1.143 2.152 1.058 3.355-.02.9-.16 1.791-.32 2.675-1.662-.072-3.353.436-4.682 1.438.307.239 1.155-.257 1.642-.205 1.56-.228 3.177-.355 4.711.095 2.227.588 4.27.831 6.579.447.716-.128 1.461-.28 2.076-.692.073-.292-.203-.543-.347-.777-.416-.585-.793-1.126-1.165-1.66l.736-3.486c.216.11 1.657.825 4.067 1.616l.944 2.369a.143.143 0 0 0 .238.045l1.47-1.643a41 41 0 0 0 2.403.542l1.176 1.908a.143.143 0 0 0 .238.014l1.168-1.513q1.273.163 2.638.244l1.359 1.843a.143.143 0 0 0 .24-.017l.948-1.762a51 51 0 0 0 3.193-.123l1.265 1.566a.143.143 0 0 0 .237-.017l1.013-1.787c1.657-.195 2.659-.379 2.961-.438l.406 2.508-1.405.933a.415.415 0 0 0 .23.761h6.954a.415.415 0 0 0 .313-.688l-2.358-2.698a.42.42 0 0 0-.355-.139.42.42 0 0 0-.32.211l-.44.795-.305-.308a.415.415 0 0 0-.525-.055l-1.117.742-.645-3.467a.14.14 0 0 0-.142-.116h-.367a.143.143 0 0 0-.142.167l.118.727c-.532.105-4.185.794-8.905.794-9.426 0-16.349-3.623-16.349-3.623a.3.3 0 0 0-.073-.006l.243-1.152a.14.14 0 0 0-.089-.163l-.604-.207a.145.145 0 0 0-.195.101l-.942 4.5a73 73 0 0 0-1.294-1.784c-.345.17-.547.652-.841.924-.211.284-.407.662-.563.1-.447-.677-.885-1.362-1.35-2.024-.342.186-.492.74-.777 1.028-.296.41-.556.86-.872 1.244-.248.138-.578.186-.683.487-.092.092-.301.605-.3.366-.018-1.035.016-2.125-.535-3.048-.115-.384-.723-1-.677-1.199.929.109 1.856.23 2.786.325 0-.486-.789-.92-1.273-1.068-.342-.187-1.215-.004-1.289-.069.507-.348 1.002-.73 1.449-1.148.017-.035-.021-.074-.057-.072z",style:{color:"#000",opacity:.4,fillOpacity:1,strokeWidth:.999999,strokeLinejoin:"round",InkscapeStroke:"none"},transform:"translate(-2296.848 -15.346)"}),a.createElement("path",{d:"M2300.691 25.725c-2.216 0-3.747.942-3.747.942-.068.001-.078.005-.078.067l-.017 6.385v1.685l.017-.006s.894.107 1.222.38c.872.73 1.026 1.935 1.052 2.272v.096h1.49a.782.782 0 0 1 1.563 0h1.49a.781.781 0 0 1 1.564 0h1.49c0-.431.35-.78.782-.78h.057c.318 0 .605.192.725.486v-.022q.07.15.071.316h1.37c0-.436.353-.788.782-.788.423 0 .769.342.781.771.494-.038.95-.173 1.363-.42q.747-.45 1.184-1.198a3.2 3.2 0 0 0 .436-1.652q0-.654-.25-1.247a3.3 3.3 0 0 0-.7-1.043q.421-.36.716-.935.312-.577.312-1.246 0-.825-.405-1.528a3.1 3.1 0 0 0-1.106-1.12 2.95 2.95 0 0 0-1.59-.437h-2.99q-.001 0 0 0c-.05-.001-1.78-.062-2.66-.161-1.652-.187-1.734-.817-4.921-.817zm15.774.912q-.063 0-.063.062l-.017 10.704q0 .078.078.078h1.761q.063 0 .063-.078l-.017-10.704q0-.062-.063-.062zm4.385 0q-.077 0-.077.078l-.018 10.688q0 .078.064.078h5.032q.078 0 .078-.078v-1.76q0-.079-.078-.078h-3.21l.017-8.85q0-.078-.078-.078zm6.834 0q-.078 0-.078.078l-.017 10.688q0 .078.063.078h5.032q.078 0 .078-.078v-1.76q0-.079-.078-.078h-3.21l.018-8.85q0-.078-.078-.078zm6.75 0q-.064 0-.064.062l-.017 10.704q0 .078.063.078h5.033q.063 0 .062-.062v-1.776q0-.078-.062-.078h-3.21v-2.727h3.21q.063 0 .062-.062l-.017-1.76q0-.063-.063-.063h-3.195v-2.431h3.195q.063 0 .063-.062v-1.745q0-.078-.063-.078zm6.775 0q-.063 0-.063.062l-.017 1.746q0 .078.078.077h2.025v8.88q0 .08.063.079h1.761q.063 0 .063-.078l-.017-8.881h2.041q.063 0 .063-.077v-1.746q0-.062-.078-.062zm-34.812 1.208c.058.018.28.049.341.11q.123.115.124.353 0 .248-.15.442-.141.194-.459.194a.45.45 0 0 1-.319-.114q-.123-.124-.123-.354a.75.75 0 0 1 .14-.45c.069-.088.336-.153.446-.18m-3.557.56s.283.027.336.08q.08.08.026.238l-.433 1.715h1.114q.106 0 .15.088.045.08 0 .265a.55.55 0 0 1-.115.265.24.24 0 0 1-.185.088h-1.149l-.45 1.715a2.6 2.6 0 0 0-.097.645c0 .188.033.344.08.468a.67.67 0 0 0 .213.283q.141.089.318.088v.001h.017q.203 0 .459-.204.255-.203.592-.645.327-.45.778-1.193c.265-.437.57-.965.909-1.572l.037-.151q.053-.168.132-.221a.53.53 0 0 1 .266-.053q.255 0 .335.08.08.078.026.238l-.839 3.313a.8.8 0 0 0-.026.292q.026.089.14.088a.24.24 0 0 0 .15-.053 1 1 0 0 0 .158-.15q.098-.105.221-.274.062-.088.132-.097.08-.018.177.044.141.08.176.168.035.08-.017.168-.166.292-.353.486a1.2 1.2 0 0 1-.398.283 1 1 0 0 1-.441.097q-.469 0-.618-.353-.142-.362.054-1.052l.248-1.031c-.045.08-.09.162-.134.236a12 12 0 0 1-.865 1.316q-.381.486-.725.698-.353.203-.734.204l-.017-.001-.017.001q-.398 0-.662-.177-.255-.185-.389-.486a1.9 1.9 0 0 1-.14-.707c0-.265.026-.54.097-.822l.432-1.67h-.67q-.106 0-.15-.088-.036-.088 0-.265a.5.5 0 0 1 .115-.265.26.26 0 0 1 .185-.088h.707l.45-1.76c.028-.11.064-.184.124-.22a.5.5 0 0 1 .264-.053zm7.241.152h1.184q.498 0 .857.374.358.357.358.857 0 .45-.343.84-.326.375-.872.375h-1.184zm0 4.33h.95q.561 0 .966.406c.27.27.437.475.45.773.017.25-.123.524-.319.68-.292.235-.724.242-1.098.242h-.965z",style:{opacity:1,fillOpacity:1,stroke:"none",strokeWidth:.864997,strokeLinejoin:"round",strokeDasharray:"none"},transform:"translate(-2296.848 -15.346)"}))};function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:s,...n}=e;return a.createElement("svg",o({xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",width:66.209,height:44.68,viewBox:"0 0 17.518 11.822","aria-labelledby":s},n),t?a.createElement("title",{id:s},t):null,a.createElement("g",{style:{strokeWidth:.575231,stroke:"none"}},a.createElement("path",{d:"M1278.635 53.267c-1.275 0-2.156.542-2.156.542-.039 0-.045.003-.045.038l-.01 3.673v.97l.01-.004s.515.062.704.219c.501.42.59 1.113.605 1.307v.055h.856a.45.45 0 0 1 .9 0h.857a.45.45 0 1 1 .9 0h.857a.45.45 0 0 1 .45-.45l.02.002.013-.001a.45.45 0 0 1 .416.28v-.013a.44.44 0 0 1 .041.182h.788c0-.25.203-.453.45-.454.243 0 .442.197.45.444q.427-.031.783-.241.43-.26.681-.69t.251-.95q0-.377-.143-.717a1.9 1.9 0 0 0-.404-.6q.243-.207.413-.538.18-.331.179-.717 0-.475-.233-.879a1.8 1.8 0 0 0-.636-.645 1.7 1.7 0 0 0-.914-.25h-1.721a27 27 0 0 1-1.53-.093c-.95-.107-.997-.47-2.83-.47zm3.282 1.22c.034.01.162.028.197.063q.07.066.07.203 0 .143-.085.254-.081.112-.264.112a.26.26 0 0 1-.184-.066q-.07-.07-.07-.204a.43.43 0 0 1 .08-.259c.04-.05.193-.087.256-.103zm-2.046.322s.163.015.194.046q.046.045.015.137l-.25.986h.641q.062 0 .086.05.026.047 0 .153a.3.3 0 0 1-.066.153.14.14 0 0 1-.106.05h-.66l-.26.987q-.056.209-.056.37c0 .11.02.199.046.27a.4.4 0 0 0 .122.163q.081.05.183.05h.01q.117 0 .264-.116.147-.117.34-.371.189-.26.448-.687.23-.379.523-.904l.021-.087q.03-.096.076-.127a.3.3 0 0 1 .153-.03q.147 0 .193.045.046.046.015.137l-.483 1.906a.5.5 0 0 0-.015.168q.015.05.081.05.047 0 .086-.03a.6.6 0 0 0 .091-.086q.056-.06.127-.157.036-.051.076-.056.046-.01.102.025.081.046.101.097.02.045-.01.096a1.4 1.4 0 0 1-.203.28.68.68 0 0 1-.483.218q-.27 0-.355-.203-.081-.208.03-.605l.144-.593-.077.136q-.28.477-.498.757-.219.28-.418.401a.84.84 0 0 1-.422.118l-.01-.001h-.01a.67.67 0 0 1-.38-.101.7.7 0 0 1-.224-.28 1.1 1.1 0 0 1-.081-.406c0-.153.015-.31.056-.473l.249-.96h-.386q-.062 0-.086-.051-.021-.051 0-.153a.3.3 0 0 1 .066-.152.15.15 0 0 1 .106-.051h.407l.26-1.012q.02-.096.07-.127a.3.3 0 0 1 .152-.03zm4.165.087h.682q.286 0 .493.215a.67.67 0 0 1 .205.493.72.72 0 0 1-.197.484.63.63 0 0 1-.501.215h-.682zm0 2.491h.547q.322 0 .556.233c.155.156.251.273.259.445a.49.49 0 0 1-.184.391c-.168.135-.416.14-.631.14h-.556z",style:{fillOpacity:1,stroke:"none",strokeWidth:.497575,strokeLinejoin:"round",strokeDasharray:"none"},transform:"matrix(1.73843 0 0 1.73843 -2218.972 -92.601)"})))};function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:s,...n}=e;return a.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",width:113.491,height:74.414,viewBox:"0 0 30.028 19.689","aria-labelledby":s},n),t?a.createElement("title",{id:s},t):null,a.createElement("g",{style:{fillOpacity:.15,strokeWidth:4.11272}},a.createElement("path",{d:"M100 100V50l-50 50ZM50 0v50l50-50ZM0 0l50 50v50L0 50Z",style:{fillOpacity:.15,stroke:"none",strokeWidth:4.11272,strokeDasharray:"none"},transform:"matrix(.30028 0 0 .19689 0 0)"})))},g={sidebar_position:20,slug:"design",title:"Graphic design",keywords:["design","inspiration","events","ticket","island","colors","modern","retro","culture","plays","exhibits","usher","arts"],tags:["design","inspiration","events","island","colors","modern","retro","culture","plays","exhibits","arts"],authors:"kaya"},p="Graphic design",m={id:"work-doc/design",title:"Graphic design",description:"The graphical identity is still in development but we've got a few elements ready!",source:"@site/docs/work-doc/design.md",sourceDirName:"work-doc",slug:"/work-doc/design",permalink:"/docs/work-doc/design",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/work-doc/design.md",tags:[{inline:!0,label:"design",permalink:"/docs/tags/design"},{inline:!0,label:"inspiration",permalink:"/docs/tags/inspiration"},{inline:!0,label:"events",permalink:"/docs/tags/events"},{inline:!0,label:"island",permalink:"/docs/tags/island"},{inline:!0,label:"colors",permalink:"/docs/tags/colors"},{inline:!0,label:"modern",permalink:"/docs/tags/modern"},{inline:!0,label:"retro",permalink:"/docs/tags/retro"},{inline:!0,label:"culture",permalink:"/docs/tags/culture"},{inline:!0,label:"plays",permalink:"/docs/tags/plays"},{inline:!0,label:"exhibits",permalink:"/docs/tags/exhibits"},{inline:!0,label:"arts",permalink:"/docs/tags/arts"}],version:"current",sidebarPosition:20,frontMatter:{sidebar_position:20,slug:"design",title:"Graphic design",keywords:["design","inspiration","events","ticket","island","colors","modern","retro","culture","plays","exhibits","usher","arts"],tags:["design","inspiration","events","island","colors","modern","retro","culture","plays","exhibits","arts"],authors:"kaya"},sidebar:"tutorialSidebar",previous:{title:"Research",permalink:"/docs/category/research"},next:{title:"User stories",permalink:"/docs/work-doc/user-stories"}},u={},f=[{value:"Inspirations",id:"inspirations",level:2},{value:"Iterations (fr)",id:"iterations-fr",level:2},{value:"Resources",id:"resources",level:2}];function x(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"graphic-design",children:"Graphic design"})}),"\n",(0,n.jsx)(t.p,{children:"The graphical identity is still in development but we've got a few elements ready!"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"NFC cards: back design mockup",src:s(4222).A+"",width:"1248",height:"814"})}),"\n",(0,n.jsx)(t.h2,{id:"inspirations",children:"Inspirations"}),"\n",(0,n.jsx)(t.p,{children:"We were looking for something that would represent our ties to the cultural landscape, and distance us from the aesthetics of tech startups and other for-profit technological solutions to social issues. We aggregated two vibes we felt would mesh well together:"}),"\n",(0,n.jsxs)("figure",{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Design inspiration 1: tickets old and new",src:s(4847).A+"",width:"800",height:"566"})}),(0,n.jsx)("figcaption",{children:(0,n.jsx)(t.p,{children:"Tickets old and new: ticket design has always been a hallmark of cultural life, from the first date tickets you still keep in a treasure box to Willy Wonka's golden ticket. There are not one but two (\ud83c\udf9f\ufe0f!) (\ud83c\udfab!) ticket emoji: everyone knows at first glance what they are and has some fondness for the little paper things."})})]}),"\n",(0,n.jsxs)("figure",{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Design inspiration 2: islands",src:s(5201).A+"",width:"800",height:"566"})}),(0,n.jsx)("figcaption",{children:(0,n.jsx)(t.p,{children:"Another angle we came at was the island, the archipelago. TiBillet was born in La Reunion (find it on a map!) and has the ambition to connect communities together, little islands of communal life into bigger archipelagos, so to speak."})})]}),"\n",(0,n.jsx)(t.h2,{id:"iterations-fr",children:"Iterations (fr)"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.img,{alt:"Proposition 1",src:s(9278).A+"",width:"800",height:"566"}),"\n",(0,n.jsx)(t.img,{alt:"Proposition 1.1",src:s(7534).A+"",width:"800",height:"566"})]}),"\n",(0,n.jsx)(t.p,{children:"What we have settled on for now:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Design system",src:s(4373).A+"",width:"1123",height:"794"})}),"\n",(0,n.jsx)(t.h2,{id:"resources",children:"Resources"}),"\n","\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Use"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Preview"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(9168).A+"",children:"Monochrome logo (SVG)"})}),(0,n.jsx)(t.td,{children:"Usable for print and web, plain or busy backgrounds, color can be whatever you want (currently follows font color)"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)(l,{width:"",style:{height:"128px",fill:"var(--ifm-font-color-base)"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(254).A+"",children:"Color logo (SVG)"})}),(0,n.jsx)(t.td,{children:"Quality print or web, larger sizes, light or dark plain backgrounds to let it stand out"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)("img",{src:"/img/design/logo-couleur.svg",style:{height:"128px"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(3544).A+"",children:"Monochrome icon (SVG)"})}),(0,n.jsx)(t.td,{children:"For navbar icons, embossing, small signifiers, whatever color"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)(c,{width:"",style:{height:"64px",fill:"var(--ifm-font-color-base)"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(2333).A+"",children:"Color icon (SVG)"})}),(0,n.jsx)(t.td,{children:"Favicon, app icon, small web branding"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)("img",{src:"/img/design/favicon.svg",style:{height:"96px"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(696).A+"",children:"Bracket pattern (SVG)"})}),(0,n.jsx)(t.td,{children:"Backgrounds, can work under big fonts, whatever color"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)(h,{style:{height:"128px",width:"256px",fill:"var(--ifm-font-color-base)"}})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(1479).A+"",children:"Gradient pattern (SVG)"})}),(0,n.jsx)(t.td,{children:"Backgrounds, fill of important elements, etc"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:(0,n.jsx)("img",{src:"/img/design/gradient.svg",style:{height:"128px",width:"256px"}})})]})]})]})]})}function k(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},696:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/chevron-564581cc4b7ae7f5551c34b6333357df.svg"},2333:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/favicon-e3c74989c96c70572cc0c35cb813c292.svg"},1479:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/gradient-63f1857f5e363d4a7b721d1a5cbb455a.svg"},3544:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/icon-e08a9ac2e0c45877837604a14ecd3f08.svg"},254:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/logo-couleur-9225d0e1d1aef60b0c9281826ec4ba5e.svg"},9168:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/files/logo-niveaux-c74cfb72d8df6c8d890273f8d633a7b9.svg"},4847:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/01-tickets-d441e8bc72b0cebe53f49f6da2848063.png"},5201:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/02-islands-1c2f3de95585e374dd8393cf859ec135.png"},9278:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/03-prop1-1a5a89aa1690339041b86696ab980438.png"},7534:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/04-prop2-9d377e365c8c59242b36aa5aa2585e5d.png"},4373:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/05-system-afece72682a4a052fa128e52d4dc345a.png"},4222:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/mockup-ticket-bad9d6c08f14f8279bdac1e5c02ff401.png"},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>l});var n=s(6540);const i={},a=n.createContext(i);function r(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9a4c38d3.245be7a2.js b/assets/js/9a4c38d3.245be7a2.js new file mode 100644 index 00000000..c78a2f1e --- /dev/null +++ b/assets/js/9a4c38d3.245be7a2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[5072],{9771:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var i=s(4848),n=s(8453);const a={sidebar_position:5,slug:"demonstration",title:"D\xe9monstration",description:"Instances de d\xe9monstration de la billetterie ( TiBillet/Event ) et de la caisse enregistreuse ( TiBillet/LaBoutik ) qui accepte les paiements en monnaie locale et/ou en cashless, et qui permet de g\xe9rer les commandes de buvette et de restauration.",image:"/img/demo/maq2-420.jpg",keywords:["cashless","billetterie","ticketing","monnaie locale","caisse enregistreuse","d\xe9monstration","festival","tiers-lieux"],tags:["cashless","billetterie","ticketing","monnaie locale","caisse enregistreuse","d\xe9monstration","festival","tiers-lieux"],authors:"jonas"},l="Demonstration",o={id:"presentation/Demonstration",title:"D\xe9monstration",description:"Instances de d\xe9monstration de la billetterie ( TiBillet/Event ) et de la caisse enregistreuse ( TiBillet/LaBoutik ) qui accepte les paiements en monnaie locale et/ou en cashless, et qui permet de g\xe9rer les commandes de buvette et de restauration.",source:"@site/docs/presentation/07-Demonstration.md",sourceDirName:"presentation",slug:"/presentation/demonstration",permalink:"/docs/presentation/demonstration",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/presentation/07-Demonstration.md",tags:[{inline:!0,label:"cashless",permalink:"/docs/tags/cashless"},{inline:!0,label:"billetterie",permalink:"/docs/tags/billetterie"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"monnaie locale",permalink:"/docs/tags/monnaie-locale"},{inline:!0,label:"caisse enregistreuse",permalink:"/docs/tags/caisse-enregistreuse"},{inline:!0,label:"d\xe9monstration",permalink:"/docs/tags/demonstration"},{inline:!0,label:"festival",permalink:"/docs/tags/festival"},{inline:!0,label:"tiers-lieux",permalink:"/docs/tags/tiers-lieux"}],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"demonstration",title:"D\xe9monstration",description:"Instances de d\xe9monstration de la billetterie ( TiBillet/Event ) et de la caisse enregistreuse ( TiBillet/LaBoutik ) qui accepte les paiements en monnaie locale et/ou en cashless, et qui permet de g\xe9rer les commandes de buvette et de restauration.",image:"/img/demo/maq2-420.jpg",keywords:["cashless","billetterie","ticketing","monnaie locale","caisse enregistreuse","d\xe9monstration","festival","tiers-lieux"],tags:["cashless","billetterie","ticketing","monnaie locale","caisse enregistreuse","d\xe9monstration","festival","tiers-lieux"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Uses",permalink:"/docs/presentation/usages"},next:{title:"Philosophy",permalink:"/docs/presentation/philosophie"}},r={},d=[{value:"Lespass - Memberships : https://lespass.demo.tibillet.org/memberships/",id:"lespass---memberships--httpslespassdemotibilletorgmemberships",level:2},{value:"Lespass - Ticketing ( nighty build ) : https://lespass.demo.tibillet.org/agenda/",id:"lespass---ticketing--nighty-build---httpslespassdemotibilletorgagenda",level:2},{value:"LaBoutik - Cashier/ Cashless : https://laboutik.demo.tibillet.org/",id:"laboutik---cashier-cashless--httpslaboutikdemotibilletorg",level:2},{value:"I scan the QrCode on my cashless card : https://lespass.demo.tibillet.org/qr/c2b2400c-1f7e-4305-b75e-8c1db3f8d113/",id:"i-scan-the-qrcode-on-my-cashless-card--httpslespassdemotibilletorgqrc2b2400c-1f7e-4305-b75e-8c1db3f8d113",level:2},{value:"Fedow - Federation creation : https://fedow.demo.tibillet.org/dashboard/",id:"fedow---federation-creation--httpsfedowdemotibilletorgdashboard",level:2}];function c(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"demonstration",children:"Demonstration"})}),"\n",(0,i.jsx)(t.admonition,{type:"caution",children:(0,i.jsxs)(t.p,{children:["TiBillet development is very active. These demo instances are \u201cnighty builds\u201d, i.e. development versions.\nInstances may also be under maintenance. If you have any questions\ndon't hesitate to contact us ",(0,i.jsx)(t.a,{href:"mailto:contact@tibillet.re",children:"e-mail"}),", sur ",(0,i.jsx)(t.a,{href:"https://discord.gg/ecb5jtP7vY",children:"Discord"}),"\nou ",(0,i.jsx)(t.a,{href:"https://matrix.to/#/#tibillet:tiers-lieux.org",children:"Matrix"}),"."]})}),"\n",(0,i.jsxs)(t.admonition,{type:"info",children:[(0,i.jsx)(t.p,{children:"To test payment on Stripe, use the bank card of the galaxy's greatest backpacker:"}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Douglas ADAM"}),"\n",(0,i.jsx)(t.li,{children:"4242 4242 4242 4242"}),"\n",(0,i.jsx)(t.li,{children:"02/42"}),"\n",(0,i.jsx)(t.li,{children:"424"}),"\n"]})]}),"\n",(0,i.jsxs)(t.h2,{id:"lespass---memberships--httpslespassdemotibilletorgmemberships",children:["Lespass - Memberships : ",(0,i.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/memberships/",children:"https://lespass.demo.tibillet.org/memberships/"})]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"BilletDemo4_adhesion.jpg",src:s(744).A+"",width:"1097",height:"900"})}),"\n",(0,i.jsxs)(t.h2,{id:"lespass---ticketing--nighty-build---httpslespassdemotibilletorgagenda",children:["Lespass - Ticketing ( nighty build ) : ",(0,i.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/agenda/",children:"https://lespass.demo.tibillet.org/agenda/"})]}),"\n",(0,i.jsx)(t.admonition,{type:"danger",children:(0,i.jsx)(t.p,{children:"Ticketing is currently being redesigned. Expected release: end 2024.\nThe demo instance is not 100% functional, so please check back from time to time :)"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"BilletDemo1.jpg",src:s(6657).A+"",width:"1097",height:"900"})}),"\n",(0,i.jsxs)(t.h2,{id:"laboutik---cashier-cashless--httpslaboutikdemotibilletorg",children:["LaBoutik - Cashier/ Cashless : ",(0,i.jsx)(t.a,{href:"https://laboutik.demo.tibillet.org/",children:"https://laboutik.demo.tibillet.org/"})]}),"\n",(0,i.jsx)(t.p,{children:"To view the cashier interface, click on \u201cView site\u201d on the administration page."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"maq2-420.jpg",src:s(5229).A+"",width:"480",height:"320"})}),"\n",(0,i.jsxs)(t.h2,{id:"i-scan-the-qrcode-on-my-cashless-card--httpslespassdemotibilletorgqrc2b2400c-1f7e-4305-b75e-8c1db3f8d113",children:["I scan the QrCode on my cashless card : ",(0,i.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/qr/c2b2400c-1f7e-4305-b75e-8c1db3f8d113/",children:"https://lespass.demo.tibillet.org/qr/c2b2400c-1f7e-4305-b75e-8c1db3f8d113/"})]}),"\n",(0,i.jsx)(t.p,{children:'In the LaBoutik interface, this card corresponds to "Client 1".'}),"\n",(0,i.jsx)(t.p,{children:"The page we arrive on after a qrcode allows us to recharge our wallet, see our memberships and declare a lost card:"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.img,{alt:"scan_qrcode_triptik.jpg",src:s(9673).A+"",width:"2493",height:"847"}),"\n",(0,i.jsx)(t.img,{alt:"cartes.jpg",src:s(7409).A+"",width:"1248",height:"814"})]}),"\n",(0,i.jsxs)(t.h2,{id:"fedow---federation-creation--httpsfedowdemotibilletorgdashboard",children:["Fedow - Federation creation : ",(0,i.jsx)(t.a,{href:"https://fedow.demo.tibillet.org/dashboard/",children:"https://fedow.demo.tibillet.org/dashboard/"})]}),"\n",(0,i.jsx)(t.p,{children:"A piggy bank card, a coin and a membership can be used at one or more locations. This is known as a federation of venues."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"fedow_beta.jpg",src:s(2227).A+"",width:"1349",height:"677"})})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},6657:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/BilletDemo1-5db467c347b18b96b5b418d004bbc584.jpg"},744:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/BilletDemo4_adhesion-c7856df8895ca4eef2eeef7cd2c91186.jpg"},7409:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/cartes-92610d35913d0a7df6dc9e7923bde1e5.jpg"},2227:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/fedow_beta-a9d746594e7662bcc448f00c9fdaf9d4.jpg"},5229:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/maq2-420-ec49d41bd9f8e858d691fe0e86b4f3dc.jpg"},9673:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/scan_qrcode_triptik-2fb5c9a54cff92ee60eb4c885af4446c.jpg"},8453:(e,t,s)=>{s.d(t,{R:()=>l,x:()=>o});var i=s(6540);const n={},a=i.createContext(n);function l(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9a4c38d3.642ed58d.js b/assets/js/9a4c38d3.642ed58d.js deleted file mode 100644 index 0d886218..00000000 --- a/assets/js/9a4c38d3.642ed58d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[5072],{9771:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var i=s(4848),n=s(8453);const a={sidebar_position:5,slug:"demonstration",title:"D\xe9monstration",description:"Instances de d\xe9monstration de la billetterie ( TiBillet/Event ) et de la caisse enregistreuse ( TiBillet/LaBoutik ) qui accepte les paiements en monnaie locale et/ou en cashless, et qui permet de g\xe9rer les commandes de buvette et de restauration.",image:"/img/demo/maq2-420.jpg",keywords:["cashless","billetterie","ticketing","monnaie locale","caisse enregistreuse","d\xe9monstration","festival","tiers-lieux"],tags:["cashless","billetterie","ticketing","monnaie locale","caisse enregistreuse","d\xe9monstration","festival","tiers-lieux"],authors:"jonas"},l="Demonstration",o={id:"presentation/Demonstration",title:"D\xe9monstration",description:"Instances de d\xe9monstration de la billetterie ( TiBillet/Event ) et de la caisse enregistreuse ( TiBillet/LaBoutik ) qui accepte les paiements en monnaie locale et/ou en cashless, et qui permet de g\xe9rer les commandes de buvette et de restauration.",source:"@site/docs/presentation/07-Demonstration.md",sourceDirName:"presentation",slug:"/presentation/demonstration",permalink:"/docs/presentation/demonstration",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/presentation/07-Demonstration.md",tags:[{inline:!0,label:"cashless",permalink:"/docs/tags/cashless"},{inline:!0,label:"billetterie",permalink:"/docs/tags/billetterie"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"monnaie locale",permalink:"/docs/tags/monnaie-locale"},{inline:!0,label:"caisse enregistreuse",permalink:"/docs/tags/caisse-enregistreuse"},{inline:!0,label:"d\xe9monstration",permalink:"/docs/tags/demonstration"},{inline:!0,label:"festival",permalink:"/docs/tags/festival"},{inline:!0,label:"tiers-lieux",permalink:"/docs/tags/tiers-lieux"}],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"demonstration",title:"D\xe9monstration",description:"Instances de d\xe9monstration de la billetterie ( TiBillet/Event ) et de la caisse enregistreuse ( TiBillet/LaBoutik ) qui accepte les paiements en monnaie locale et/ou en cashless, et qui permet de g\xe9rer les commandes de buvette et de restauration.",image:"/img/demo/maq2-420.jpg",keywords:["cashless","billetterie","ticketing","monnaie locale","caisse enregistreuse","d\xe9monstration","festival","tiers-lieux"],tags:["cashless","billetterie","ticketing","monnaie locale","caisse enregistreuse","d\xe9monstration","festival","tiers-lieux"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Uses",permalink:"/docs/presentation/usages"},next:{title:"Philosophy",permalink:"/docs/presentation/philosophie"}},r={},d=[{value:"Lespass - Memberships : https://lespass.demo.tibillet.org/memberships/",id:"lespass---memberships--httpslespassdemotibilletorgmemberships",level:2},{value:"Lespass - Ticketing ( nighty build ) : https://lespass.demo.tibillet.org/agenda/",id:"lespass---ticketing--nighty-build---httpslespassdemotibilletorgagenda",level:2},{value:"LaBoutik - Cashier/ Cashless : https://laboutik.demo.tibillet.org/",id:"laboutik---cashier-cashless--httpslaboutikdemotibilletorg",level:2},{value:"I scan the QrCode on my cashless card : https://lespass.demo.tibillet.org/qr/c2b2400c-1f7e-4305-b75e-8c1db3f8d113/",id:"i-scan-the-qrcode-on-my-cashless-card--httpslespassdemotibilletorgqrc2b2400c-1f7e-4305-b75e-8c1db3f8d113",level:2},{value:"Fedow - Federation creation : https://fedow.demo.tibillet.org/dashboard/",id:"fedow---federation-creation--httpsfedowdemotibilletorgdashboard",level:2}];function c(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"demonstration",children:"Demonstration"})}),"\n",(0,i.jsx)(t.admonition,{type:"caution",children:(0,i.jsxs)(t.p,{children:["TiBillet development is very active. These demo instances are \u201cnighty builds\u201d, i.e. development versions.\nInstances may also be under maintenance. If you have any questions\ndon't hesitate to contact us ",(0,i.jsx)(t.a,{href:"mailto:contact@tibillet.re",children:"e-mail"}),", sur ",(0,i.jsx)(t.a,{href:"https://discord.gg/ecb5jtP7vY",children:"Discord"}),"\nou ",(0,i.jsx)(t.a,{href:"https://matrix.to/#/#tibillet:tiers-lieux.org",children:"Matrix"}),"."]})}),"\n",(0,i.jsxs)(t.admonition,{type:"info",children:[(0,i.jsx)(t.p,{children:"To test payment on Stripe, use the bank card of the galaxy's greatest backpacker:"}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Douglas ADAM"}),"\n",(0,i.jsx)(t.li,{children:"4242 4242 4242 4242"}),"\n",(0,i.jsx)(t.li,{children:"02/42"}),"\n",(0,i.jsx)(t.li,{children:"424"}),"\n"]})]}),"\n",(0,i.jsxs)(t.h2,{id:"lespass---memberships--httpslespassdemotibilletorgmemberships",children:["Lespass - Memberships : ",(0,i.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/memberships/",children:"https://lespass.demo.tibillet.org/memberships/"})]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"BilletDemo4_adhesion.jpg",src:s(744).A+"",width:"1097",height:"900"})}),"\n",(0,i.jsxs)(t.h2,{id:"lespass---ticketing--nighty-build---httpslespassdemotibilletorgagenda",children:["Lespass - Ticketing ( nighty build ) : ",(0,i.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/agenda/",children:"https://lespass.demo.tibillet.org/agenda/"})]}),"\n",(0,i.jsx)(t.admonition,{type:"danger",children:(0,i.jsx)(t.p,{children:"Ticketing is currently being redesigned. Expected release: end 2024.\nThe demo instance is not 100% functional, so please check back from time to time :)"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"BilletDemo1.jpg",src:s(6657).A+"",width:"1097",height:"900"})}),"\n",(0,i.jsxs)(t.h2,{id:"laboutik---cashier-cashless--httpslaboutikdemotibilletorg",children:["LaBoutik - Cashier/ Cashless : ",(0,i.jsx)(t.a,{href:"https://laboutik.demo.tibillet.org/",children:"https://laboutik.demo.tibillet.org/"})]}),"\n",(0,i.jsx)(t.p,{children:"To view the cashier interface, click on \u201cView site\u201d on the administration page."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"maq2-420.jpg",src:s(5229).A+"",width:"480",height:"320"})}),"\n",(0,i.jsxs)(t.h2,{id:"i-scan-the-qrcode-on-my-cashless-card--httpslespassdemotibilletorgqrc2b2400c-1f7e-4305-b75e-8c1db3f8d113",children:["I scan the QrCode on my cashless card : ",(0,i.jsx)(t.a,{href:"https://lespass.demo.tibillet.org/qr/c2b2400c-1f7e-4305-b75e-8c1db3f8d113/",children:"https://lespass.demo.tibillet.org/qr/c2b2400c-1f7e-4305-b75e-8c1db3f8d113/"})]}),"\n",(0,i.jsx)(t.p,{children:'In the LaBoutik interface, this card corresponds to "Client 1".'}),"\n",(0,i.jsx)(t.p,{children:"The page we arrive on after a qrcode allows us to recharge our wallet, see our memberships and declare a lost card:"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.img,{alt:"scan_qrcode_triptik.jpg",src:s(9673).A+"",width:"2493",height:"847"}),"\n",(0,i.jsx)(t.img,{alt:"cartes.jpg",src:s(7409).A+"",width:"1248",height:"814"})]}),"\n",(0,i.jsxs)(t.h2,{id:"fedow---federation-creation--httpsfedowdemotibilletorgdashboard",children:["Fedow - Federation creation : ",(0,i.jsx)(t.a,{href:"https://fedow.demo.tibillet.org/dashboard/",children:"https://fedow.demo.tibillet.org/dashboard/"})]}),"\n",(0,i.jsx)(t.p,{children:"A piggy bank card, a coin and a membership can be used at one or more locations. This is known as a federation of venues."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"fedow_beta.jpg",src:s(2227).A+"",width:"1349",height:"677"})})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},6657:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/BilletDemo1-5db467c347b18b96b5b418d004bbc584.jpg"},744:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/BilletDemo4_adhesion-c7856df8895ca4eef2eeef7cd2c91186.jpg"},7409:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/cartes-92610d35913d0a7df6dc9e7923bde1e5.jpg"},2227:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/fedow_beta-a9d746594e7662bcc448f00c9fdaf9d4.jpg"},5229:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/maq2-420-ec49d41bd9f8e858d691fe0e86b4f3dc.jpg"},9673:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/scan_qrcode_triptik-2fb5c9a54cff92ee60eb4c885af4446c.jpg"},8453:(e,t,s)=>{s.d(t,{R:()=>l,x:()=>o});var i=s(6540);const n={},a=i.createContext(n);function l(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a54bce21.30143b16.js b/assets/js/a54bce21.30143b16.js deleted file mode 100644 index ee3aae3d..00000000 --- a/assets/js/a54bce21.30143b16.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[3948],{6340:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var r=s(4848),n=s(8453);const o={sidebar_position:2,slug:"lazer_cut",title:"Lazer cut and 3D print",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},i="Lazer cut the body :",a={id:"install/Raspberry Box/Hardware/Laser_cut-the-body",title:"Lazer cut and 3D print",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/02_Laser_cut-the-body.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/lazer_cut",permalink:"/docs/install/Raspberry Box/Hardware/lazer_cut",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/install/Raspberry Box/Hardware/02_Laser_cut-the-body.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"lazer_cut",title:"Lazer cut and 3D print",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Raspberry Box The Goal",permalink:"/docs/install/Raspberry Box/Hardware/Goal"},next:{title:"Wiring",permalink:"/docs/install/Raspberry Box/Hardware/wiring"}},c={},l=[];function d(e){const t={a:"a",blockquote:"blockquote",br:"br",h1:"h1",header:"header",hr:"hr",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"lazer-cut-the-body-",children:"Lazer cut the body :"})}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["Note :",(0,r.jsx)(t.br,{}),"\n","Those files are for 5mm thick plywood and for 7inch screen.",(0,r.jsx)(t.br,{}),"\n",'If you use 10inch screen change "7Pouces" below by "10Pouces"\nwe will see differences at the end of this document .']}),"\n"]}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["If you use different thick than 5mm you will need to modify the plans slightly to modify the length of the lugs.",(0,r.jsx)(t.br,{}),"\n",(0,r.jsx)(t.img,{alt:"Lenght_of_Lugs.png",src:s(6866).A+"",width:"910",height:"528"})]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Go to :\n",(0,r.jsx)(t.a,{href:"https://github.com/TiBillet/DIY-point-of-sale-hardware/tree/main",children:"https://github.com/TiBillet/DIY-point-of-sale-hardware/tree/main"})]}),"\n",(0,r.jsx)(t.p,{children:"You can find :"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Plans repository to see the dimensions used and reproduce if necessary in your CAD software ."}),"\n",(0,r.jsxs)(t.li,{children:["Freecad repository to modify then with ",(0,r.jsx)(t.a,{href:"https://www.freecad.org",children:"Freecad"})," files to modify if you need ."]}),"\n",(0,r.jsx)(t.li,{children:"dxf_files repository to modify then with another CAD software if you need ."}),"\n",(0,r.jsxs)(t.li,{children:["lightburn repository to send then directly to your lazer cutting machine with ",(0,r.jsx)(t.a,{href:"https://lightburnsoftware.com/",children:"lightburn"}),"."]}),"\n",(0,r.jsx)(t.li,{children:"svg_files If you use another cutting software than LightBurn."}),"\n"]}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.p,{children:"NOTE : you need to cut 2X sides , if you are using connectors for the network and power supply, make holes to the size of your connectors on one side."}),"\n"]}),"\n",(0,r.jsx)(t.h1,{id:"3d-print-accessories-",children:"3D-print accessories :"}),"\n",(0,r.jsxs)(t.p,{children:["This step is optional, but strongly recommended.\nIt will allow you to have a support for the Raspberry. This can be fixed to the wood directly inside the case, but this does not facilitate maintenance or cooling, and there is a risk of scratching the soldering.",(0,r.jsx)(t.br,{}),"\n",(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(1251).A+"",children:"SupportPi3.mp4"}),(0,r.jsx)(t.br,{}),"\n",(0,r.jsx)(t.img,{alt:"SupportPi.png",src:s(1736).A+"",width:"534",height:"282"})]}),"\n",(0,r.jsx)(t.p,{children:"In addition, you can use the smallest screws, which are fairly easy to find in the main DIY shops (the minimum size is usually 10mm).\nyou will have spacers to prevent the screws from passing through the plywood ."}),"\n",(0,r.jsxs)(t.p,{children:["Download the STL files from ",(0,r.jsx)(t.a,{href:"https://github.com/TiBillet/DIY-point-of-sale-hardware/tree/main/3D-print-accessories",children:"3D-print-accessories"})," repository .\nOpen the files in cura (or another slicer) and send them to your 3D printer."]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1251:(e,t,s)=>{s.d(t,{A:()=>r});const r=s.p+"assets/files/SupportPi3-bed62b3257173566f2726cfd0007434e.mp4"},6866:(e,t,s)=>{s.d(t,{A:()=>r});const r=s.p+"assets/images/Lenght_of_Lugs-6b7a63bb19de49416399710e3530b76d.png"},1736:(e,t,s)=>{s.d(t,{A:()=>r});const r=s.p+"assets/images/SupportPi-0ad60c34fd8fd3459aedb97fb343137a.png"},8453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>a});var r=s(6540);const n={},o=r.createContext(n);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a54bce21.e08104ca.js b/assets/js/a54bce21.e08104ca.js new file mode 100644 index 00000000..a5d0fbfa --- /dev/null +++ b/assets/js/a54bce21.e08104ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[3948],{6340:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var r=s(4848),n=s(8453);const i={sidebar_position:2,slug:"lazer_cut",title:"Lazer cut and 3D print",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},o="Lazer cut the body :",a={id:"install/Raspberry Box/Hardware/Laser_cut-the-body",title:"Lazer cut and 3D print",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/02_Laser_cut-the-body.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/lazer_cut",permalink:"/docs/install/Raspberry Box/Hardware/lazer_cut",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/install/Raspberry Box/Hardware/02_Laser_cut-the-body.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"lazer_cut",title:"Lazer cut and 3D print",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Raspberry Box The Goal",permalink:"/docs/install/Raspberry Box/Hardware/Goal"},next:{title:"Wiring",permalink:"/docs/install/Raspberry Box/Hardware/wiring"}},c={},l=[];function d(e){const t={a:"a",blockquote:"blockquote",br:"br",h1:"h1",header:"header",hr:"hr",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"lazer-cut-the-body-",children:"Lazer cut the body :"})}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["Note :",(0,r.jsx)(t.br,{}),"\n","Those files are for 5mm thick plywood and for 7inch screen.",(0,r.jsx)(t.br,{}),"\n",'If you use 10inch screen change "7Pouces" below by "10Pouces"\nwe will see differences at the end of this document .']}),"\n"]}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["If you use different thick than 5mm you will need to modify the plans slightly to modify the length of the lugs.",(0,r.jsx)(t.br,{}),"\n",(0,r.jsx)(t.img,{alt:"Lenght_of_Lugs.png",src:s(6866).A+"",width:"910",height:"528"})]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Go to :\n",(0,r.jsx)(t.a,{href:"https://github.com/TiBillet/DIY-point-of-sale-hardware/tree/main",children:"https://github.com/TiBillet/DIY-point-of-sale-hardware/tree/main"})]}),"\n",(0,r.jsx)(t.p,{children:"You can find :"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Plans repository to see the dimensions used and reproduce if necessary in your CAD software ."}),"\n",(0,r.jsxs)(t.li,{children:["Freecad repository to modify then with ",(0,r.jsx)(t.a,{href:"https://www.freecad.org",children:"Freecad"})," files to modify if you need ."]}),"\n",(0,r.jsx)(t.li,{children:"dxf_files repository to modify then with another CAD software if you need ."}),"\n",(0,r.jsxs)(t.li,{children:["lightburn repository to send then directly to your lazer cutting machine with ",(0,r.jsx)(t.a,{href:"https://lightburnsoftware.com/",children:"lightburn"}),"."]}),"\n",(0,r.jsx)(t.li,{children:"svg_files If you use another cutting software than LightBurn."}),"\n"]}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.p,{children:"NOTE : you need to cut 2X sides , if you are using connectors for the network and power supply, make holes to the size of your connectors on one side."}),"\n"]}),"\n",(0,r.jsx)(t.h1,{id:"3d-print-accessories-",children:"3D-print accessories :"}),"\n",(0,r.jsxs)(t.p,{children:["This step is optional, but strongly recommended.\nIt will allow you to have a support for the Raspberry. This can be fixed to the wood directly inside the case, but this does not facilitate maintenance or cooling, and there is a risk of scratching the soldering.",(0,r.jsx)(t.br,{}),"\n",(0,r.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(1251).A+"",children:"SupportPi3.mp4"}),(0,r.jsx)(t.br,{}),"\n",(0,r.jsx)(t.img,{alt:"SupportPi.png",src:s(1736).A+"",width:"534",height:"282"})]}),"\n",(0,r.jsx)(t.p,{children:"In addition, you can use the smallest screws, which are fairly easy to find in the main DIY shops (the minimum size is usually 10mm).\nyou will have spacers to prevent the screws from passing through the plywood ."}),"\n",(0,r.jsxs)(t.p,{children:["Download the STL files from ",(0,r.jsx)(t.a,{href:"https://github.com/TiBillet/DIY-point-of-sale-hardware/tree/main/3D-print-accessories",children:"3D-print-accessories"})," repository .\nOpen the files in cura (or another slicer) and send them to your 3D printer."]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1251:(e,t,s)=>{s.d(t,{A:()=>r});const r=s.p+"assets/files/SupportPi3-bed62b3257173566f2726cfd0007434e.mp4"},6866:(e,t,s)=>{s.d(t,{A:()=>r});const r=s.p+"assets/images/Lenght_of_Lugs-6b7a63bb19de49416399710e3530b76d.png"},1736:(e,t,s)=>{s.d(t,{A:()=>r});const r=s.p+"assets/images/SupportPi-0ad60c34fd8fd3459aedb97fb343137a.png"},8453:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>a});var r=s(6540);const n={},i=r.createContext(n);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a78153fe.360c6718.js b/assets/js/a78153fe.360c6718.js new file mode 100644 index 00000000..0235a7ba --- /dev/null +++ b/assets/js/a78153fe.360c6718.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[1005],{3432:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>l,frontMatter:()=>n,metadata:()=>a,toc:()=>p});var r=t(4848),i=t(8453);const n={sidebar_position:25,slug:"impression_preparation",title:"Printing orders",description:"Order in the room and send to be prepared!",keywords:["cashless","android","order","printing","impressions","preparations"],wiktags:["cashless","android","order","printing","impressions","preparations"],authors:"Axel"},o=void 0,a={id:"Utilisateur/Cashless/25 Impressions des commandes",title:"Printing orders",description:"Order in the room and send to be prepared!",source:"@site/docs/Utilisateur/Cashless/25 Impressions des commandes.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/impression_preparation",permalink:"/docs/Utilisateur/Cashless/impression_preparation",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/25 Impressions des commandes.md",tags:[],version:"current",sidebarPosition:25,frontMatter:{sidebar_position:25,slug:"impression_preparation",title:"Printing orders",description:"Order in the room and send to be prepared!",keywords:["cashless","android","order","printing","impressions","preparations"],wiktags:["cashless","android","order","printing","impressions","preparations"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Articles",permalink:"/docs/Utilisateur/Cashless/admin_add_article"},next:{title:"Removing Orders",permalink:"/docs/Utilisateur/Cashless/admin_supp"}},d={},p=[];function c(e){const s={admonition:"admonition",p:"p",...(0,i.R)(),...e.components};return(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsx)(s.p,{children:"Currently being written..."})})}function l(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>o,x:()=>a});var r=t(6540);const i={},n=r.createContext(i);function o(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a78153fe.764c97b4.js b/assets/js/a78153fe.764c97b4.js deleted file mode 100644 index 7e40f037..00000000 --- a/assets/js/a78153fe.764c97b4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[1005],{3432:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>l,frontMatter:()=>n,metadata:()=>a,toc:()=>p});var r=t(4848),i=t(8453);const n={sidebar_position:25,slug:"impression_preparation",title:"Printing orders",description:"Order in the room and send to be prepared!",keywords:["cashless","android","order","printing","impressions","preparations"],wiktags:["cashless","android","order","printing","impressions","preparations"],authors:"Axel"},o=void 0,a={id:"Utilisateur/Cashless/25 Impressions des commandes",title:"Printing orders",description:"Order in the room and send to be prepared!",source:"@site/docs/Utilisateur/Cashless/25 Impressions des commandes.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/impression_preparation",permalink:"/docs/Utilisateur/Cashless/impression_preparation",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/25 Impressions des commandes.md",tags:[],version:"current",sidebarPosition:25,frontMatter:{sidebar_position:25,slug:"impression_preparation",title:"Printing orders",description:"Order in the room and send to be prepared!",keywords:["cashless","android","order","printing","impressions","preparations"],wiktags:["cashless","android","order","printing","impressions","preparations"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Articles",permalink:"/docs/Utilisateur/Cashless/admin_add_article"},next:{title:"Removing Orders",permalink:"/docs/Utilisateur/Cashless/admin_supp"}},d={},p=[];function c(e){const s={admonition:"admonition",p:"p",...(0,i.R)(),...e.components};return(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsx)(s.p,{children:"Currently being written..."})})}function l(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>o,x:()=>a});var r=t(6540);const i={},n=r.createContext(i);function o(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/abf152e8.57613494.js b/assets/js/abf152e8.57613494.js deleted file mode 100644 index 14bee9e7..00000000 --- a/assets/js/abf152e8.57613494.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8163],{5692:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=n(4848),r=n(8453);const i={sidebar_position:1,slug:"raspberry_OS",title:"Install Raspberry OS",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas, mike"},o="install Raspberry PiOS on Raspberry :",a={id:"install/Raspberry Box/Software/raspberry_soft",title:"Install Raspberry OS",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Software/raspberry_soft.md",sourceDirName:"install/Raspberry Box/Software",slug:"/install/Raspberry Box/Software/raspberry_OS",permalink:"/docs/install/Raspberry Box/Software/raspberry_OS",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/install/Raspberry Box/Software/raspberry_soft.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"raspberry_OS",title:"Install Raspberry OS",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Software",permalink:"/docs/category/software"},next:{title:"Install LaBoutik",permalink:"/docs/install/Raspberry Box/Software/laboutik"}},c={},l=[{value:"Install Raspberry Pi OS (Legacy,32-bit) Lite :",id:"install-raspberry-pi-os-legacy32-bit-lite-",level:2}];function d(e){const s={a:"a",blockquote:"blockquote",br:"br",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"install-raspberry-pios-on-raspberry-",children:"install Raspberry PiOS on Raspberry :"})}),"\n",(0,t.jsx)(s.p,{children:"Prerequisite:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["If you don't have an ssh key on your computer, create one: open a command prompt and type :\n",(0,t.jsx)(s.code,{children:"ssh-keygen"})]}),"\n",(0,t.jsxs)(s.li,{children:["Download raspberry imager : ",(0,t.jsx)(s.a,{href:"https://www.raspberrypi.com/software/",children:"https://www.raspberrypi.com/software/"})]}),"\n",(0,t.jsx)(s.li,{children:"Make sure you can connect a micro SD card to your computer ."}),"\n"]}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:["Note : At this time, LaBoutik, only works with PI 3B/B+ and Pi4 .",(0,t.jsx)(s.br,{}),"\n","PiZero doesn't work and Pi5 has not been tested ."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"install-raspberry-pi-os-legacy32-bit-lite-",children:"Install Raspberry Pi OS (Legacy,32-bit) Lite :"}),"\n",(0,t.jsx)(s.p,{children:"Before doing so, I advise you to place the Pi on the simply support that has been 3D printed previously, to avoid contact with the table and any screws or other objects that might be on it."}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:["Note : place the power connector on the narrowest corner.",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"Coner_support_pi.png",src:n(5783).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:['Open raspberry imager and chose model "Raspberry Pi 3" :',(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_1.png",src:n(9610).A+"",width:"1250",height:"538"}),(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_2.png",src:n(9505).A+"",width:"770",height:"150"}),(0,t.jsx)(s.br,{}),"\n","Choose Raspberry Pi OS(Other) :",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_3.png",src:n(7464).A+"",width:"1140",height:"150"}),(0,t.jsx)(s.br,{}),"\n","And choose Raspberry Pi OS (Legacy,32-bit) Lite :",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_4.png",src:n(7079).A+"",width:"1140",height:"150"}),(0,t.jsx)(s.br,{}),"\n","Then choose your SD card inserted in your computer :",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_5.png",src:n(1294).A+"",width:"1140",height:"190"}),(0,t.jsx)(s.br,{}),"\n","Click Next , and the following screen appears:",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_6.png",src:n(1669).A+"",width:"1206",height:"350"}),(0,t.jsx)(s.br,{}),"\n","Click on \u201cMODIFIER LES REGLAGES\u201d."]}),"\n",(0,t.jsx)(s.p,{children:"In the \u201cGENERAL\u201d tab:"}),"\n",(0,t.jsx)(s.p,{children:"Enter :"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"The host name (of your choice but not already present on your LAN)"}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsx)(s.p,{children:"WARNING The user name MUST BE \u201csysop\u201d and nothing else"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"The password of your choice"}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Your wifi settings"}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Your local settings .",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_7.png",src:n(44).A+"",width:"1116",height:"1228"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"In the \u201cSERVICES\u201d tab:"}),"\n",(0,t.jsx)(s.p,{children:"Click on \u201cAuthentification via clef publique\u201d\nand paste your public key (not your private key!!) which is usually found in :"}),"\n",(0,t.jsxs)(s.p,{children:["/Users/YourNameUser/.ssh/id_rsa.pub",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_8.png",src:n(4059).A+"",width:"1256",height:"1382"}),(0,t.jsx)(s.br,{}),"\n","Click on \u201cSave\u201d."]}),"\n",(0,t.jsxs)(s.p,{children:["The message reappears:",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_9.png",src:n(2514).A+"",width:"1206",height:"366"}),(0,t.jsx)(s.br,{}),"\n","Click on \u201cOUI\u201d",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_10.png",src:n(3328).A+"",width:"1206",height:"366"}),(0,t.jsx)(s.br,{}),"\n","Click on \u201cOUI\u201d",(0,t.jsx)(s.br,{}),"\n","Please allow 10 to 20 minutes for your SD card to be created,",(0,t.jsx)(s.br,{}),"\n","depending on your bit rate and whether the image has already been downloaded to your PC.\n",(0,t.jsx)(s.img,{alt:"soft_11.png",src:n(7529).A+"",width:"1286",height:"966"}),(0,t.jsx)(s.br,{}),"\n","Once finished, click on \u201cCONTINUER\u201d.",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_12.png",src:n(9346).A+"",width:"1234",height:"468"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Remove your SD card and insert it into the Pi (the Pi must not be powered, of course :) )"}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Now power your Pi , wait , the green LED is blinking , it will start , then reboot ."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Go to your BOX, in the amin interface to look for its IP address .",(0,t.jsx)(s.br,{}),"\n","As long as you are in the admin interface of your Box, you can assign it a fixed IP, this is done in DHCP by fixing the IP address to the MAC address of your Pi.",(0,t.jsx)(s.br,{}),"\n","This way it will always keep the same IP address.(No screenshots here, as this depends on your router)."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["On your PC, open a terminal , and type:\n",(0,t.jsx)(s.code,{children:"ssh sysop@IPofYourPi"}),"\nthe message appear :\n",(0,t.jsx)(s.img,{alt:"soft_13.png",src:n(891).A+"",width:"1456",height:"184"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:'type : "yes" .'}),"\n",(0,t.jsx)(s.p,{children:"You are now connected to your Pi :)"})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},5783:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/Coner_support_pi-522b3b3a0d46742fa95a66843084c17b.png"},9610:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_1-900bf45ab903b36cd8dcce96717dcb85.png"},3328:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_10-fe4e13aee065061cc4b40ded64f60e81.png"},7529:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_11-8111c269d29587b9e8aa12d0c30dfa24.png"},9346:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_12-ecc9fe7872b5c3386c4465c06d02424c.png"},891:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_13-32ab0d6946618f3460bde06843c482e4.png"},9505:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_2-5043bbd258ee9b2d90ba76541987993f.png"},7464:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_3-911397379ee397c6f46b5ea5f6d5d7a6.png"},7079:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_4-3d3793445fac90de336057a98721e723.png"},1294:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_5-22592012c7da7325bba32e6fa77b00ab.png"},1669:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_6-c8b0b1da1b2481ccf0d4dba159414bc8.png"},44:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_7-6ebfffcab097af14b11eee3e5fb9e630.png"},4059:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_8-d6da7be1e31702649eb23f9e39a0ff83.png"},2514:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_9-a6f8ab2073865f5062c56055f4cd6b92.png"},8453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>a});var t=n(6540);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/abf152e8.677a896e.js b/assets/js/abf152e8.677a896e.js new file mode 100644 index 00000000..dd615e72 --- /dev/null +++ b/assets/js/abf152e8.677a896e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8163],{5692:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=n(4848),r=n(8453);const i={sidebar_position:1,slug:"raspberry_OS",title:"Install Raspberry OS",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas, mike"},o="install Raspberry PiOS on Raspberry :",a={id:"install/Raspberry Box/Software/raspberry_soft",title:"Install Raspberry OS",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Software/raspberry_soft.md",sourceDirName:"install/Raspberry Box/Software",slug:"/install/Raspberry Box/Software/raspberry_OS",permalink:"/docs/install/Raspberry Box/Software/raspberry_OS",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/install/Raspberry Box/Software/raspberry_soft.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"raspberry_OS",title:"Install Raspberry OS",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Software",permalink:"/docs/category/software"},next:{title:"Install LaBoutik",permalink:"/docs/install/Raspberry Box/Software/laboutik"}},c={},l=[{value:"Install Raspberry Pi OS (Legacy,32-bit) Lite :",id:"install-raspberry-pi-os-legacy32-bit-lite-",level:2}];function d(e){const s={a:"a",blockquote:"blockquote",br:"br",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"install-raspberry-pios-on-raspberry-",children:"install Raspberry PiOS on Raspberry :"})}),"\n",(0,t.jsx)(s.p,{children:"Prerequisite:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["If you don't have an ssh key on your computer, create one: open a command prompt and type :\n",(0,t.jsx)(s.code,{children:"ssh-keygen"})]}),"\n",(0,t.jsxs)(s.li,{children:["Download raspberry imager : ",(0,t.jsx)(s.a,{href:"https://www.raspberrypi.com/software/",children:"https://www.raspberrypi.com/software/"})]}),"\n",(0,t.jsx)(s.li,{children:"Make sure you can connect a micro SD card to your computer ."}),"\n"]}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:["Note : At this time, LaBoutik, only works with PI 3B/B+ and Pi4 .",(0,t.jsx)(s.br,{}),"\n","PiZero doesn't work and Pi5 has not been tested ."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"install-raspberry-pi-os-legacy32-bit-lite-",children:"Install Raspberry Pi OS (Legacy,32-bit) Lite :"}),"\n",(0,t.jsx)(s.p,{children:"Before doing so, I advise you to place the Pi on the simply support that has been 3D printed previously, to avoid contact with the table and any screws or other objects that might be on it."}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:["Note : place the power connector on the narrowest corner.",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"Coner_support_pi.png",src:n(5783).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:['Open raspberry imager and chose model "Raspberry Pi 3" :',(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_1.png",src:n(9610).A+"",width:"1250",height:"538"}),(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_2.png",src:n(9505).A+"",width:"770",height:"150"}),(0,t.jsx)(s.br,{}),"\n","Choose Raspberry Pi OS(Other) :",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_3.png",src:n(7464).A+"",width:"1140",height:"150"}),(0,t.jsx)(s.br,{}),"\n","And choose Raspberry Pi OS (Legacy,32-bit) Lite :",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_4.png",src:n(7079).A+"",width:"1140",height:"150"}),(0,t.jsx)(s.br,{}),"\n","Then choose your SD card inserted in your computer :",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_5.png",src:n(1294).A+"",width:"1140",height:"190"}),(0,t.jsx)(s.br,{}),"\n","Click Next , and the following screen appears:",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_6.png",src:n(1669).A+"",width:"1206",height:"350"}),(0,t.jsx)(s.br,{}),"\n","Click on \u201cMODIFIER LES REGLAGES\u201d."]}),"\n",(0,t.jsx)(s.p,{children:"In the \u201cGENERAL\u201d tab:"}),"\n",(0,t.jsx)(s.p,{children:"Enter :"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"The host name (of your choice but not already present on your LAN)"}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsx)(s.p,{children:"WARNING The user name MUST BE \u201csysop\u201d and nothing else"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"The password of your choice"}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Your wifi settings"}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Your local settings .",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_7.png",src:n(44).A+"",width:"1116",height:"1228"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"In the \u201cSERVICES\u201d tab:"}),"\n",(0,t.jsx)(s.p,{children:"Click on \u201cAuthentification via clef publique\u201d\nand paste your public key (not your private key!!) which is usually found in :"}),"\n",(0,t.jsxs)(s.p,{children:["/Users/YourNameUser/.ssh/id_rsa.pub",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_8.png",src:n(4059).A+"",width:"1256",height:"1382"}),(0,t.jsx)(s.br,{}),"\n","Click on \u201cSave\u201d."]}),"\n",(0,t.jsxs)(s.p,{children:["The message reappears:",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_9.png",src:n(2514).A+"",width:"1206",height:"366"}),(0,t.jsx)(s.br,{}),"\n","Click on \u201cOUI\u201d",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_10.png",src:n(3328).A+"",width:"1206",height:"366"}),(0,t.jsx)(s.br,{}),"\n","Click on \u201cOUI\u201d",(0,t.jsx)(s.br,{}),"\n","Please allow 10 to 20 minutes for your SD card to be created,",(0,t.jsx)(s.br,{}),"\n","depending on your bit rate and whether the image has already been downloaded to your PC.\n",(0,t.jsx)(s.img,{alt:"soft_11.png",src:n(7529).A+"",width:"1286",height:"966"}),(0,t.jsx)(s.br,{}),"\n","Once finished, click on \u201cCONTINUER\u201d.",(0,t.jsx)(s.br,{}),"\n",(0,t.jsx)(s.img,{alt:"soft_12.png",src:n(9346).A+"",width:"1234",height:"468"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Remove your SD card and insert it into the Pi (the Pi must not be powered, of course :) )"}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Now power your Pi , wait , the green LED is blinking , it will start , then reboot ."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Go to your BOX, in the amin interface to look for its IP address .",(0,t.jsx)(s.br,{}),"\n","As long as you are in the admin interface of your Box, you can assign it a fixed IP, this is done in DHCP by fixing the IP address to the MAC address of your Pi.",(0,t.jsx)(s.br,{}),"\n","This way it will always keep the same IP address.(No screenshots here, as this depends on your router)."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["On your PC, open a terminal , and type:\n",(0,t.jsx)(s.code,{children:"ssh sysop@IPofYourPi"}),"\nthe message appear :\n",(0,t.jsx)(s.img,{alt:"soft_13.png",src:n(891).A+"",width:"1456",height:"184"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:'type : "yes" .'}),"\n",(0,t.jsx)(s.p,{children:"You are now connected to your Pi :)"})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},5783:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/Coner_support_pi-522b3b3a0d46742fa95a66843084c17b.png"},9610:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_1-900bf45ab903b36cd8dcce96717dcb85.png"},3328:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_10-fe4e13aee065061cc4b40ded64f60e81.png"},7529:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_11-8111c269d29587b9e8aa12d0c30dfa24.png"},9346:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_12-ecc9fe7872b5c3386c4465c06d02424c.png"},891:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_13-32ab0d6946618f3460bde06843c482e4.png"},9505:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_2-5043bbd258ee9b2d90ba76541987993f.png"},7464:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_3-911397379ee397c6f46b5ea5f6d5d7a6.png"},7079:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_4-3d3793445fac90de336057a98721e723.png"},1294:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_5-22592012c7da7325bba32e6fa77b00ab.png"},1669:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_6-c8b0b1da1b2481ccf0d4dba159414bc8.png"},44:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_7-6ebfffcab097af14b11eee3e5fb9e630.png"},4059:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_8-d6da7be1e31702649eb23f9e39a0ff83.png"},2514:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/soft_9-a6f8ab2073865f5062c56055f4cd6b92.png"},8453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>a});var t=n(6540);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b6ab51ce.9d640ac3.js b/assets/js/b6ab51ce.9d640ac3.js new file mode 100644 index 00000000..603800a7 --- /dev/null +++ b/assets/js/b6ab51ce.9d640ac3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[2092],{5103:(s,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>o});var n=t(4848),i=t(8453);const a={sidebar_position:4,slug:"7inchBackFix",title:"Assembly 7inch back fix screw",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},r="Body assembly 7 inch back fix :",l={id:"install/Raspberry Box/Hardware/Assembly_7_back_fix",title:"Assembly 7inch back fix screw",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/04_Assembly_7_back_fix.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/7inchBackFix",permalink:"/docs/install/Raspberry Box/Hardware/7inchBackFix",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/install/Raspberry Box/Hardware/04_Assembly_7_back_fix.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,slug:"7inchBackFix",title:"Assembly 7inch back fix screw",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Wiring",permalink:"/docs/install/Raspberry Box/Hardware/wiring"},next:{title:"Assembly 10inch",permalink:"/docs/install/Raspberry Box/Hardware/10inch"}},c={},o=[];function h(s){const e={blockquote:"blockquote",br:"br",h1:"h1",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Before finalising the assembly, the raspberry must be installed and the NFC reader wired.\nYou can find the details HERE"})}),"\n"]}),"\n",(0,n.jsx)(e.header,{children:(0,n.jsx)(e.h1,{id:"body-assembly-7-inch-back-fix-",children:"Body assembly 7 inch back fix :"})}),"\n",(0,n.jsx)(e.p,{children:"Your plywood body should now be ready."}),"\n",(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsx)(e.p,{children:"To avoid getting your hands and plywood dirty. Clean the laser-cut edges. Laser cutting burns the plywood and forms a layer of carbon."}),"\n"]}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the foam protection supplied with the screen on the underside of the front panel :\n",(0,n.jsx)(e.img,{alt:"Assembly_1.jpg",src:t(1918).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsx)(e.p,{children:"Put the screen like this :"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"Assembly_2.jpg",src:t(5625).A+"",width:"1209",height:"1612"})}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsx)(e.li,{children:"Check the length of your screws :"}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"Assembly_3.jpg",src:t(252).A+"",width:"1612",height:"1209"})}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Choose the appropriate spacer, 3D printed beforehand, so that the screw does not protrude!",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_4.jpg",src:t(4599).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Screw in the 4 screws using a suitable screwdriver!",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_5.jpg",src:t(3786).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place one of the 2 sides in the notches as shown below :",(0,n.jsx)(e.br,{}),"\n","If you have opted for a side cable entry, choose the side that suits you best :\n",(0,n.jsx)(e.img,{alt:"Assembly_6.jpg",src:t(6389).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Use a Roofing bolt & nut 5X16 to secure the side to the front panel, but do not overtighten :",(0,n.jsx)(e.br,{}),"\n","The side must be able to move slightly :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_7.jpg",src:t(4024).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the top in the notches :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_8.jpg",src:t(8515).A+"",width:"1612",height:"1209"}),"\n-Use a Roofing bolt & nut 5X16 to secure the top to the front panel, but do not overtighten :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_9.jpg",src:t(5350).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["place the second side in the notches and use a Roofing bolt & nut 5X16 to secure the side to the front panel, but do not overtighten. The side must be able to move slightly :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_10.jpg",src:t(4148).A+"",width:"1612",height:"1209"}),(0,n.jsx)(e.br,{}),"\n","Now the body is almost finished :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_11.jpg",src:t(4574).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Fix the raspberry support :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Fix_support.png",src:t(1897).A+"",width:"1292",height:"1064"}),"\n",(0,n.jsx)(e.img,{alt:"Coner_support_pi.png",src:t(5783).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Fix the NFC card using the 2X10 screws and the spacers :\n",(0,n.jsx)(e.img,{alt:"Fix_NFC_card.png",src:t(9086).A+"",width:"884",height:"1050"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the last Roofing bolt & nut 5X16 on the front panel . It\u2019s just for visual symmetry :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_12.jpg",src:t(2614).A+"",width:"402",height:"468"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsx)(e.p,{children:"Slightly bend the part of the back face to relax the part that will be curved."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsx)(e.p,{children:"Note:"}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsx)(e.li,{children:"Don't force it, it's wood, not reed. It may break."}),"\n",(0,n.jsxs)(e.li,{children:["Wash your hands after this step (there will probably be some carbon released from the small cuts).",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_13.jpg",src:t(5779).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the rear panel in the notches (the sides must be able to move slightly, if you have tightened the Roofing bolt & nut 5X16 too much, loosen them slightly).",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_14.jpg",src:t(2467).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Position the curved part of the rear face, you will have to force a little, but be careful not like a barbarian :)\n",(0,n.jsx)(e.img,{alt:"Assembly_15.jpg",src:t(4077).A+"",width:"1612",height:"1209"}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_16.jpg",src:t(4178).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the last screw on the rear panel.",(0,n.jsx)(e.br,{}),"\n","You can now tighten all the screws :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_17.jpg",src:t(8463).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n"]})]})}function d(s={}){const{wrapper:e}={...(0,i.R)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},1918:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_1-a357b599aca3341c0a2c535e73305603.jpg"},4148:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_10-6e3a93f3481a9f3a06ae2fdc1142d054.jpg"},4574:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_11-2ff50422784dfb0cb6f5dd3d7b5401e3.jpg"},2614:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_12-162c4511a31a0223809f175502eea6a6.jpg"},5779:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_13-ddf211b5c59fb90e9c754cc17390e6e9.jpg"},2467:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_14-01b508b89ea5216614809ff469f1beda.jpg"},4077:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_15-1223d2ba39b4be4ccbaf14ffdaf3fa51.jpg"},4178:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_16-14035a9abcc167c6f10bb18d6bf28b49.jpg"},8463:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_17-743ac6a5abb5132906850f0d603ee5e3.jpg"},5625:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_2-1d43eca00c1f940016c6e8fa4f572b27.jpg"},252:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_3-c3e501bffffb01b552888644b8a5d799.jpg"},4599:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_4-4f2bd5a94be889910b975b74c64b483e.jpg"},3786:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_5-f9639572c59ce5a924d5eff484dc8ff8.jpg"},6389:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_6-b12aea44c86b20ab4f113f21b438b003.jpg"},4024:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_7-e8304fc7c8d1cbc1b8fe2a56b7784f33.jpg"},8515:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_8-5e44246dd5bd7dbeff2675961b66d5a7.jpg"},5350:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_9-0b0b1b02f9ffc5d71ef6da3dc4feded6.jpg"},5783:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Coner_support_pi-522b3b3a0d46742fa95a66843084c17b.png"},9086:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Fix_NFC_card-5d5a011bf17102e789eae57bf585f416.png"},1897:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Fix_support-4e0cb01471e80c3acaed255a3654bdc3.png"},8453:(s,e,t)=>{t.d(e,{R:()=>r,x:()=>l});var n=t(6540);const i={},a=n.createContext(i);function r(s){const e=n.useContext(a);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function l(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(a.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/b6ab51ce.a12e6ffa.js b/assets/js/b6ab51ce.a12e6ffa.js deleted file mode 100644 index f829abff..00000000 --- a/assets/js/b6ab51ce.a12e6ffa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[2092],{5103:(s,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>o});var n=t(4848),i=t(8453);const a={sidebar_position:4,slug:"7inchBackFix",title:"Assembly 7inch back fix screw",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},r="Body assembly 7 inch back fix :",l={id:"install/Raspberry Box/Hardware/Assembly_7_back_fix",title:"Assembly 7inch back fix screw",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/04_Assembly_7_back_fix.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/7inchBackFix",permalink:"/docs/install/Raspberry Box/Hardware/7inchBackFix",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/install/Raspberry Box/Hardware/04_Assembly_7_back_fix.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,slug:"7inchBackFix",title:"Assembly 7inch back fix screw",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Wiring",permalink:"/docs/install/Raspberry Box/Hardware/wiring"},next:{title:"Assembly 10inch",permalink:"/docs/install/Raspberry Box/Hardware/10inch"}},c={},o=[];function h(s){const e={blockquote:"blockquote",br:"br",h1:"h1",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Before finalising the assembly, the raspberry must be installed and the NFC reader wired.\nYou can find the details HERE"})}),"\n"]}),"\n",(0,n.jsx)(e.header,{children:(0,n.jsx)(e.h1,{id:"body-assembly-7-inch-back-fix-",children:"Body assembly 7 inch back fix :"})}),"\n",(0,n.jsx)(e.p,{children:"Your plywood body should now be ready."}),"\n",(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsx)(e.p,{children:"To avoid getting your hands and plywood dirty. Clean the laser-cut edges. Laser cutting burns the plywood and forms a layer of carbon."}),"\n"]}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the foam protection supplied with the screen on the underside of the front panel :\n",(0,n.jsx)(e.img,{alt:"Assembly_1.jpg",src:t(1918).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsx)(e.p,{children:"Put the screen like this :"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"Assembly_2.jpg",src:t(5625).A+"",width:"1209",height:"1612"})}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsx)(e.li,{children:"Check the length of your screws :"}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"Assembly_3.jpg",src:t(252).A+"",width:"1612",height:"1209"})}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Choose the appropriate spacer, 3D printed beforehand, so that the screw does not protrude!",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_4.jpg",src:t(4599).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Screw in the 4 screws using a suitable screwdriver!",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_5.jpg",src:t(3786).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place one of the 2 sides in the notches as shown below :",(0,n.jsx)(e.br,{}),"\n","If you have opted for a side cable entry, choose the side that suits you best :\n",(0,n.jsx)(e.img,{alt:"Assembly_6.jpg",src:t(6389).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Use a Roofing bolt & nut 5X16 to secure the side to the front panel, but do not overtighten :",(0,n.jsx)(e.br,{}),"\n","The side must be able to move slightly :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_7.jpg",src:t(4024).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the top in the notches :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_8.jpg",src:t(8515).A+"",width:"1612",height:"1209"}),"\n-Use a Roofing bolt & nut 5X16 to secure the top to the front panel, but do not overtighten :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_9.jpg",src:t(5350).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["place the second side in the notches and use a Roofing bolt & nut 5X16 to secure the side to the front panel, but do not overtighten. The side must be able to move slightly :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_10.jpg",src:t(4148).A+"",width:"1612",height:"1209"}),(0,n.jsx)(e.br,{}),"\n","Now the body is almost finished :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_11.jpg",src:t(4574).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Fix the raspberry support :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Fix_support.png",src:t(1897).A+"",width:"1292",height:"1064"}),"\n",(0,n.jsx)(e.img,{alt:"Coner_support_pi.png",src:t(5783).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Fix the NFC card using the 2X10 screws and the spacers :\n",(0,n.jsx)(e.img,{alt:"Fix_NFC_card.png",src:t(9086).A+"",width:"884",height:"1050"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the last Roofing bolt & nut 5X16 on the front panel . It\u2019s just for visual symmetry :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_12.jpg",src:t(2614).A+"",width:"402",height:"468"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsx)(e.p,{children:"Slightly bend the part of the back face to relax the part that will be curved."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsx)(e.p,{children:"Note:"}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsx)(e.li,{children:"Don't force it, it's wood, not reed. It may break."}),"\n",(0,n.jsxs)(e.li,{children:["Wash your hands after this step (there will probably be some carbon released from the small cuts).",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_13.jpg",src:t(5779).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the rear panel in the notches (the sides must be able to move slightly, if you have tightened the Roofing bolt & nut 5X16 too much, loosen them slightly).",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_14.jpg",src:t(2467).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Position the curved part of the rear face, you will have to force a little, but be careful not like a barbarian :)\n",(0,n.jsx)(e.img,{alt:"Assembly_15.jpg",src:t(4077).A+"",width:"1612",height:"1209"}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_16.jpg",src:t(4178).A+"",width:"1612",height:"1209"})]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Place the last screw on the rear panel.",(0,n.jsx)(e.br,{}),"\n","You can now tighten all the screws :",(0,n.jsx)(e.br,{}),"\n",(0,n.jsx)(e.img,{alt:"Assembly_17.jpg",src:t(8463).A+"",width:"1209",height:"1612"})]}),"\n"]}),"\n"]})]})}function d(s={}){const{wrapper:e}={...(0,i.R)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},1918:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_1-a357b599aca3341c0a2c535e73305603.jpg"},4148:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_10-6e3a93f3481a9f3a06ae2fdc1142d054.jpg"},4574:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_11-2ff50422784dfb0cb6f5dd3d7b5401e3.jpg"},2614:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_12-162c4511a31a0223809f175502eea6a6.jpg"},5779:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_13-ddf211b5c59fb90e9c754cc17390e6e9.jpg"},2467:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_14-01b508b89ea5216614809ff469f1beda.jpg"},4077:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_15-1223d2ba39b4be4ccbaf14ffdaf3fa51.jpg"},4178:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_16-14035a9abcc167c6f10bb18d6bf28b49.jpg"},8463:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_17-743ac6a5abb5132906850f0d603ee5e3.jpg"},5625:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_2-1d43eca00c1f940016c6e8fa4f572b27.jpg"},252:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_3-c3e501bffffb01b552888644b8a5d799.jpg"},4599:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_4-4f2bd5a94be889910b975b74c64b483e.jpg"},3786:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_5-f9639572c59ce5a924d5eff484dc8ff8.jpg"},6389:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_6-b12aea44c86b20ab4f113f21b438b003.jpg"},4024:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_7-e8304fc7c8d1cbc1b8fe2a56b7784f33.jpg"},8515:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_8-5e44246dd5bd7dbeff2675961b66d5a7.jpg"},5350:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Assembly_9-0b0b1b02f9ffc5d71ef6da3dc4feded6.jpg"},5783:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Coner_support_pi-522b3b3a0d46742fa95a66843084c17b.png"},9086:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Fix_NFC_card-5d5a011bf17102e789eae57bf585f416.png"},1897:(s,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/Fix_support-4e0cb01471e80c3acaed255a3654bdc3.png"},8453:(s,e,t)=>{t.d(e,{R:()=>r,x:()=>l});var n=t(6540);const i={},a=n.createContext(i);function r(s){const e=n.useContext(a);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function l(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(a.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/bcf52ae3.bb8d2452.js b/assets/js/bcf52ae3.bb8d2452.js new file mode 100644 index 00000000..cfa512e6 --- /dev/null +++ b/assets/js/bcf52ae3.bb8d2452.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[418],{5384:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var i=t(4848),a=t(8453);const s={sidebar_position:1,slug:"introduction",title:"Introduction",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that!",image:"https://tibillet.org/img/logoTibMJ4300.png",keywords:["cashless","billetterie","ticketing","catering","venue","events","associations"],tags:["cashless","billetterie","ticketing","catering","venue","events","associations"],authors:"jonas"},o="Introduction",r={id:"presentation/intro",title:"Introduction",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that!",source:"@site/docs/presentation/01-intro.md",sourceDirName:"presentation",slug:"/presentation/introduction",permalink:"/docs/presentation/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/presentation/01-intro.md",tags:[{inline:!0,label:"cashless",permalink:"/docs/tags/cashless"},{inline:!0,label:"billetterie",permalink:"/docs/tags/billetterie"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"catering",permalink:"/docs/tags/catering"},{inline:!0,label:"venue",permalink:"/docs/tags/venue"},{inline:!0,label:"events",permalink:"/docs/tags/events"},{inline:!0,label:"associations",permalink:"/docs/tags/associations"}],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"introduction",title:"Introduction",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that!",image:"https://tibillet.org/img/logoTibMJ4300.png",keywords:["cashless","billetterie","ticketing","catering","venue","events","associations"],tags:["cashless","billetterie","ticketing","catering","venue","events","associations"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Pr\xe9sentation",permalink:"/docs/category/pr\xe9sentation"},next:{title:"Uses",permalink:"/docs/presentation/usages"}},l={},c=[{value:"To do what ?",id:"to-do-what-",level:2},{value:"For who ?",id:"for-who-",level:2}];function d(e){const n={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"introduction",children:"Introduction"})}),"\n",(0,i.jsx)(n.p,{children:"TiBillet is a FLOSS solution for payment, associative membership, online booking and ticketing, time and local currency\nmanagement, festival cashless and order management for refreshment stands and catering facilities."}),"\n",(0,i.jsx)(n.p,{children:"The general idea is to broaden the scope of a membership and/or cashless card already in circulation at many venues and\nfestivals, to create a cooperative network."}),"\n",(0,i.jsx)(n.p,{children:"The platform aims to encourage the circulation of audiences and cooperation between the various players in an area, such\nas third-party venues, associations, festivals, artists, craftsmen and open-source software developers."}),"\n",(0,i.jsx)(n.p,{children:"Users have access to an NFC card valid throughout the TiBillet network, with no subscription or top-up fees, enabling\nthem to manage and associate memberships, subscriptions, time currencies, local and/or free and federated to several\nvenues."}),"\n",(0,i.jsx)(n.p,{children:"Last but not least, TiBillet is an open-source software package developed by Code Commun, a SCIC (community interest company)."}),"\n",(0,i.jsx)(n.p,{children:"When you use TiBillet, you become part of a social economy network that supports you from A to Z."}),"\n",(0,i.jsx)(n.h2,{id:"to-do-what-",children:"To do what ?"}),"\n",(0,i.jsx)(n.p,{children:"TiBillet was designed to meet several goals:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Expand the scope of a membership and/or cashless card already in circulation in certain places and festivals."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a cooperative network of cultural places in a region or city, thus allowing the free flow of artists and audiences between different cultural events."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Offer event management and catering solutions accessible to small or young organizations."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a \u201ctime\u201d currency system for the management and valorization of profits, or even the creation of local currency on a territory scale."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a federated agenda as a communication tool intended to promote cultural events organized by several members of a same body in a given territory."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Provide an innovative, yet eco-friendly solution using existing hardware, low-tech and local Fablab networks to reduce the carbon footprint."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Meet the needs of a federation of third places on a territorial scale."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Thinking together about a new way to create shared value."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"for-who-",children:"For who ?"}),"\n",(0,i.jsx)(n.p,{children:"Community caf\xe9s, concert halls, festivals, restaurants, third places, cultural events organizers (one-off or permanent) and even retailers! Almost any establishment open to the public can simplify its management with TiBillet."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.img,{alt:"/img/tibilletcircle.jpg",src:t(2393).A+"",width:"2543",height:"1789"}),"\n",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(9032).A+"",children:"Larger size"})}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},9032:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/files/tibilletcircle-12ed4520a4b1df3b64090a62270e38b5.jpg"},2393:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/tibilletcircle-12ed4520a4b1df3b64090a62270e38b5.jpg"},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>r});var i=t(6540);const a={},s=i.createContext(a);function o(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bcf52ae3.f178891f.js b/assets/js/bcf52ae3.f178891f.js deleted file mode 100644 index c50d2d37..00000000 --- a/assets/js/bcf52ae3.f178891f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[418],{5384:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var i=t(4848),a=t(8453);const s={sidebar_position:1,slug:"introduction",title:"Introduction",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that!",image:"https://tibillet.org/img/logoTibMJ4300.png",keywords:["cashless","billetterie","ticketing","catering","venue","events","associations"],tags:["cashless","billetterie","ticketing","catering","venue","events","associations"],authors:"jonas"},o="Introduction",r={id:"presentation/intro",title:"Introduction",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that!",source:"@site/docs/presentation/01-intro.md",sourceDirName:"presentation",slug:"/presentation/introduction",permalink:"/docs/presentation/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/presentation/01-intro.md",tags:[{inline:!0,label:"cashless",permalink:"/docs/tags/cashless"},{inline:!0,label:"billetterie",permalink:"/docs/tags/billetterie"},{inline:!0,label:"ticketing",permalink:"/docs/tags/ticketing"},{inline:!0,label:"catering",permalink:"/docs/tags/catering"},{inline:!0,label:"venue",permalink:"/docs/tags/venue"},{inline:!0,label:"events",permalink:"/docs/tags/events"},{inline:!0,label:"associations",permalink:"/docs/tags/associations"}],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"introduction",title:"Introduction",description:"Contactless payment system, zero cash (cashless), event management, catering room management, associative engagement and online ticket purchasing... but not only that!",image:"https://tibillet.org/img/logoTibMJ4300.png",keywords:["cashless","billetterie","ticketing","catering","venue","events","associations"],tags:["cashless","billetterie","ticketing","catering","venue","events","associations"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Pr\xe9sentation",permalink:"/docs/category/pr\xe9sentation"},next:{title:"Uses",permalink:"/docs/presentation/usages"}},l={},c=[{value:"To do what ?",id:"to-do-what-",level:2},{value:"For who ?",id:"for-who-",level:2}];function d(e){const n={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"introduction",children:"Introduction"})}),"\n",(0,i.jsx)(n.p,{children:"TiBillet is a FLOSS solution for payment, associative membership, online booking and ticketing, time and local currency\nmanagement, festival cashless and order management for refreshment stands and catering facilities."}),"\n",(0,i.jsx)(n.p,{children:"The general idea is to broaden the scope of a membership and/or cashless card already in circulation at many venues and\nfestivals, to create a cooperative network."}),"\n",(0,i.jsx)(n.p,{children:"The platform aims to encourage the circulation of audiences and cooperation between the various players in an area, such\nas third-party venues, associations, festivals, artists, craftsmen and open-source software developers."}),"\n",(0,i.jsx)(n.p,{children:"Users have access to an NFC card valid throughout the TiBillet network, with no subscription or top-up fees, enabling\nthem to manage and associate memberships, subscriptions, time currencies, local and/or free and federated to several\nvenues."}),"\n",(0,i.jsx)(n.p,{children:"Last but not least, TiBillet is an open-source software package developed by Code Commun, a SCIC (community interest company)."}),"\n",(0,i.jsx)(n.p,{children:"When you use TiBillet, you become part of a social economy network that supports you from A to Z."}),"\n",(0,i.jsx)(n.h2,{id:"to-do-what-",children:"To do what ?"}),"\n",(0,i.jsx)(n.p,{children:"TiBillet was designed to meet several goals:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Expand the scope of a membership and/or cashless card already in circulation in certain places and festivals."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a cooperative network of cultural places in a region or city, thus allowing the free flow of artists and audiences between different cultural events."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Offer event management and catering solutions accessible to small or young organizations."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a \u201ctime\u201d currency system for the management and valorization of profits, or even the creation of local currency on a territory scale."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a federated agenda as a communication tool intended to promote cultural events organized by several members of a same body in a given territory."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Provide an innovative, yet eco-friendly solution using existing hardware, low-tech and local Fablab networks to reduce the carbon footprint."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Meet the needs of a federation of third places on a territorial scale."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Thinking together about a new way to create shared value."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"for-who-",children:"For who ?"}),"\n",(0,i.jsx)(n.p,{children:"Community caf\xe9s, concert halls, festivals, restaurants, third places, cultural events organizers (one-off or permanent) and even retailers! Almost any establishment open to the public can simplify its management with TiBillet."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.img,{alt:"/img/tibilletcircle.jpg",src:t(2393).A+"",width:"2543",height:"1789"}),"\n",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(9032).A+"",children:"Larger size"})}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},9032:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/files/tibilletcircle-12ed4520a4b1df3b64090a62270e38b5.jpg"},2393:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/tibilletcircle-12ed4520a4b1df3b64090a62270e38b5.jpg"},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>r});var i=t(6540);const a={},s=i.createContext(a);function o(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c02dc41d.6c35bf60.js b/assets/js/c02dc41d.6c35bf60.js new file mode 100644 index 00000000..0881e94b --- /dev/null +++ b/assets/js/c02dc41d.6c35bf60.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[382],{374:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=i(4848),s=i(8453);const a={sidebar_position:50,slug:"rss",title:"RSS Feed",description:"Syndication by RSS feed, follow the latest events.",keywords:["ticketing","billetterie","rss"],wiktags:["ticketing","billetterie","rss"],authors:"Jonas"},r=void 0,l={id:"Utilisateur/Billetterie/50 rss",title:"RSS Feed",description:"Syndication by RSS feed, follow the latest events.",source:"@site/docs/Utilisateur/Billetterie/50 rss.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/rss",permalink:"/docs/Utilisateur/Billetterie/rss",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Billetterie/50 rss.md",tags:[],version:"current",sidebarPosition:50,frontMatter:{sidebar_position:50,slug:"rss",title:"RSS Feed",description:"Syndication by RSS feed, follow the latest events.",keywords:["ticketing","billetterie","rss"],wiktags:["ticketing","billetterie","rss"],authors:"Jonas"},sidebar:"tutorialSidebar",previous:{title:"Integration",permalink:"/docs/Utilisateur/Billetterie/iframe"},next:{title:"Trucs et astuces",permalink:"/docs/category/trucs-et-astuces"}},o={},c=[];function u(e){const t={a:"a",code:"code",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"An RSS feed is created by Tenant. It lists the last 5 events created."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"/rss/latest/feed\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Example :\n",(0,n.jsx)(t.a,{href:"https://demo.betabillet.tech/rss/latest/feed",children:"https://demo.betabillet.tech/rss/latest/feed"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"It is structured this way :"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-xml",children:'\n\n \n Demo : Last events created\n https://demo.betabillet.tech/rss/latest/feed/\n Latest events\n \n en-en/language>\n Thu, 11 Aug 2022 12:26:00 +0000\n \n Practical initiatives foreground : 05/15/27 14:30\n https://demo.betabillet.tech/event/practical-initiatives-foreground-051527-1830/\n Vel cum dicta deserunt. - Sit velit et. Dolorum perspiciatis magnam mollitia libero amet\n corrupti consectetur sit. Nemo cupiditate vel architecto alias dolores dolor quisquam perferendis\n voluptates. Impedit ut alias pariatur temporibus.\n \n Thu, 11 Aug 2022 12:25:58 +0000\n https://demo.betabillet.tech/event/practical-initiatives-foreground-051527-1830/\n \n \n \n system TCP Functionality Account bypass : 06/26/23 14:30\n https://demo.betabillet.tech/event/system-tcp-functionality-account-bypass-062623-1830/\n Dicta quae enim quia placeat error fugiat neque. - Aspernatur ut esse ducimus. Quae nam\n blanditiis natus reiciendis vitae harum. Assumenda dolor animi. Et assumenda sapiente blanditiis fuga\n aut est magni. Ullam dicta quia dolorum pariatur sint fugiat aliquid similique rerum.\n \n Thu, 11 Aug 2022 12:25:56 +0000\n https://demo.betabillet.tech/event/system-tcp-functionality-account-bypass-062623-1830/\n \n \n \n\n'})})]})}function d(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>l});var n=i(6540);const s={},a=n.createContext(s);function r(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c02dc41d.9723b998.js b/assets/js/c02dc41d.9723b998.js deleted file mode 100644 index c255c5de..00000000 --- a/assets/js/c02dc41d.9723b998.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[382],{374:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=i(4848),s=i(8453);const a={sidebar_position:50,slug:"rss",title:"RSS Feed",description:"Syndication by RSS feed, follow the latest events.",keywords:["ticketing","billetterie","rss"],wiktags:["ticketing","billetterie","rss"],authors:"Jonas"},r=void 0,l={id:"Utilisateur/Billetterie/50 rss",title:"RSS Feed",description:"Syndication by RSS feed, follow the latest events.",source:"@site/docs/Utilisateur/Billetterie/50 rss.md",sourceDirName:"Utilisateur/Billetterie",slug:"/Utilisateur/Billetterie/rss",permalink:"/docs/Utilisateur/Billetterie/rss",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Billetterie/50 rss.md",tags:[],version:"current",sidebarPosition:50,frontMatter:{sidebar_position:50,slug:"rss",title:"RSS Feed",description:"Syndication by RSS feed, follow the latest events.",keywords:["ticketing","billetterie","rss"],wiktags:["ticketing","billetterie","rss"],authors:"Jonas"},sidebar:"tutorialSidebar",previous:{title:"Integration",permalink:"/docs/Utilisateur/Billetterie/iframe"},next:{title:"Trucs et astuces",permalink:"/docs/category/trucs-et-astuces"}},o={},c=[];function u(e){const t={a:"a",code:"code",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"An RSS feed is created by Tenant. It lists the last 5 events created."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"/rss/latest/feed\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Example :\n",(0,n.jsx)(t.a,{href:"https://demo.betabillet.tech/rss/latest/feed",children:"https://demo.betabillet.tech/rss/latest/feed"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"It is structured this way :"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-xml",children:'\n\n \n Demo : Last events created\n https://demo.betabillet.tech/rss/latest/feed/\n Latest events\n \n en-en/language>\n Thu, 11 Aug 2022 12:26:00 +0000\n \n Practical initiatives foreground : 05/15/27 14:30\n https://demo.betabillet.tech/event/practical-initiatives-foreground-051527-1830/\n Vel cum dicta deserunt. - Sit velit et. Dolorum perspiciatis magnam mollitia libero amet\n corrupti consectetur sit. Nemo cupiditate vel architecto alias dolores dolor quisquam perferendis\n voluptates. Impedit ut alias pariatur temporibus.\n \n Thu, 11 Aug 2022 12:25:58 +0000\n https://demo.betabillet.tech/event/practical-initiatives-foreground-051527-1830/\n \n \n \n system TCP Functionality Account bypass : 06/26/23 14:30\n https://demo.betabillet.tech/event/system-tcp-functionality-account-bypass-062623-1830/\n Dicta quae enim quia placeat error fugiat neque. - Aspernatur ut esse ducimus. Quae nam\n blanditiis natus reiciendis vitae harum. Assumenda dolor animi. Et assumenda sapiente blanditiis fuga\n aut est magni. Ullam dicta quia dolorum pariatur sint fugiat aliquid similique rerum.\n \n Thu, 11 Aug 2022 12:25:56 +0000\n https://demo.betabillet.tech/event/system-tcp-functionality-account-bypass-062623-1830/\n \n \n \n\n'})})]})}function d(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},8453:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>l});var n=i(6540);const s={},a=n.createContext(s);function r(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c0ac7b9c.8409a1f2.js b/assets/js/c0ac7b9c.8409a1f2.js new file mode 100644 index 00000000..5f45e17d --- /dev/null +++ b/assets/js/c0ac7b9c.8409a1f2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[2561],{9965:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var n=i(4848),o=i(8453);const r={sidebar_position:1,slug:"intro",title:"Introduction",description:"Manipulez TiBillet en cli !",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},s=void 0,c={id:"api/01 intro",title:"Introduction",description:"Manipulez TiBillet en cli !",source:"@site/docs/api/01 intro.md",sourceDirName:"api",slug:"/api/intro",permalink:"/docs/api/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/api/01 intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"intro",title:"Introduction",description:"Manipulez TiBillet en cli !",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"API",permalink:"/docs/category/api"},next:{title:"API Keys",permalink:"/docs/api/apikey"}},a={},l=[];function d(t){const e={a:"a",admonition:"admonition",p:"p",strong:"strong",...(0,o.R)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(e.admonition,{type:"caution",children:[(0,n.jsx)(e.p,{children:"La documentation est en cours de r\xe9daction."}),(0,n.jsxs)(e.p,{children:["N'h\xe9sitez pas \xe0 venir discuter avec nous sur ",(0,n.jsx)(e.strong,{children:(0,n.jsx)(e.a,{href:"https://discord.gg/7FJvtYx",children:"Discord"})})," pour avoir plus d'informations !"]})]}),"\n",(0,n.jsxs)(e.p,{children:["TiBillet est construit autour de l'API REST ",(0,n.jsx)(e.a,{href:"https://www.django-rest-framework.org/",children:"DJango Rest Framework"}),"."]})]})}function u(t={}){const{wrapper:e}={...(0,o.R)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(d,{...t})}):d(t)}},8453:(t,e,i)=>{i.d(e,{R:()=>s,x:()=>c});var n=i(6540);const o={},r=n.createContext(o);function s(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:s(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/c0ac7b9c.ab24f5db.js b/assets/js/c0ac7b9c.ab24f5db.js deleted file mode 100644 index b66e4510..00000000 --- a/assets/js/c0ac7b9c.ab24f5db.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[2561],{9965:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var n=i(4848),o=i(8453);const r={sidebar_position:1,slug:"intro",title:"Introduction",description:"Manipulez TiBillet en cli !",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},s=void 0,c={id:"api/01 intro",title:"Introduction",description:"Manipulez TiBillet en cli !",source:"@site/docs/api/01 intro.md",sourceDirName:"api",slug:"/api/intro",permalink:"/docs/api/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/api/01 intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"intro",title:"Introduction",description:"Manipulez TiBillet en cli !",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"API",permalink:"/docs/category/api"},next:{title:"API Keys",permalink:"/docs/api/apikey"}},a={},l=[];function d(t){const e={a:"a",admonition:"admonition",p:"p",strong:"strong",...(0,o.R)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(e.admonition,{type:"caution",children:[(0,n.jsx)(e.p,{children:"La documentation est en cours de r\xe9daction."}),(0,n.jsxs)(e.p,{children:["N'h\xe9sitez pas \xe0 venir discuter avec nous sur ",(0,n.jsx)(e.strong,{children:(0,n.jsx)(e.a,{href:"https://discord.gg/7FJvtYx",children:"Discord"})})," pour avoir plus d'informations !"]})]}),"\n",(0,n.jsxs)(e.p,{children:["TiBillet est construit autour de l'API REST ",(0,n.jsx)(e.a,{href:"https://www.django-rest-framework.org/",children:"DJango Rest Framework"}),"."]})]})}function u(t={}){const{wrapper:e}={...(0,o.R)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(d,{...t})}):d(t)}},8453:(t,e,i)=>{i.d(e,{R:()=>s,x:()=>c});var n=i(6540);const o={},r=n.createContext(o);function s(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:s(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/c5077074.4ba39b09.js b/assets/js/c5077074.4ba39b09.js new file mode 100644 index 00000000..599a2835 --- /dev/null +++ b/assets/js/c5077074.4ba39b09.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[9044],{1089:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=s(4848),i=s(8453);const t={sidebar_position:1,slug:"Goal",title:"Raspberry Box The Goal",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},o="Build your own cash and cashless register box.",l={id:"install/Raspberry Box/Hardware/The_Goal",title:"Raspberry Box The Goal",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/01_The_Goal.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/Goal",permalink:"/docs/install/Raspberry Box/Hardware/Goal",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/install/Raspberry Box/Hardware/01_The_Goal.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"Goal",title:"Raspberry Box The Goal",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Hardware",permalink:"/docs/category/hardware"},next:{title:"Lazer cut and 3D print",permalink:"/docs/install/Raspberry Box/Hardware/lazer_cut"}},a={},c=[];function d(e){const r={blockquote:"blockquote",br:"br",h1:"h1",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"build-your-own-cash-and-cashless-register-box",children:"Build your own cash and cashless register box."})}),"\n",(0,n.jsxs)(r.p,{children:["We will realease all steps to go from this :\n",(0,n.jsx)(r.img,{alt:"coucou",src:s(5040).A+"",width:"1074",height:"1141"})]}),"\n",(0,n.jsx)(r.p,{children:"To this :"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"7inch_final.png",src:s(1414).A+"",width:"1209",height:"1612"})}),"\n",(0,n.jsxs)(r.blockquote,{children:["\n",(0,n.jsxs)(r.p,{children:["Here it's for 7inch screen.",(0,n.jsx)(r.br,{}),"\n","We will see the differents step betwen 7inch screen an 10inch"]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["To do this, follow these steps :",(0,n.jsx)(r.br,{}),"\n","1 - BOM ( Bill Of Material)\n2 - Lazer cut the body",(0,n.jsx)(r.br,{}),"\n","3 - 3D-print accessories",(0,n.jsx)(r.br,{}),"\n","4 - body assembly 7inch",(0,n.jsx)(r.br,{}),"\n","5 - body assembly 10inch"]}),"\n",(0,n.jsx)(r.h1,{id:"1--we-will-start-with-the-bom-",children:"1- We will start with the BOM :"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["1 X Access to FABLAB with :","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"3D printer"}),"\n",(0,n.jsx)(r.li,{children:"Lazer cut able to cut 5 milimeters plywood"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.li,{children:"1 X raspeberry PI3B +"}),"\n",(0,n.jsx)(r.li,{children:"1 X Power supply for Raspberry"}),"\n",(0,n.jsx)(r.li,{children:"1 X micro SD cards (8Go mini)"}),"\n",(0,n.jsx)(r.li,{children:'7 X " Dupont " cables'}),"\n",(0,n.jsx)(r.li,{children:"1 X NFC card reader ( RC522 )"}),"\n",(0,n.jsx)(r.li,{children:"1 X USB capacitive touch screen : Waveshare 7inch HDMI LCD ( C ) (or 10.1inch HDMI LCD(G) )"}),"\n",(0,n.jsx)(r.li,{children:"1 X Plywood 5 mm ( qty depend if 7 or 10.1 inch)"}),"\n",(0,n.jsx)(r.li,{children:"1 X box of 2X10 universal screw"}),"\n",(0,n.jsx)(r.li,{children:"1 X box of Roofing bolt & nut 5X16"}),"\n",(0,n.jsx)(r.li,{children:"1 X precision screwdriver"}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["For the 10\u2019\u2019 screen an additional USB-MicroUSB cable (guaranteeing power supply from raspberry).",(0,n.jsx)(r.br,{}),"\n","Optionnal :"]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"1 x Adaptateur RJ45"}),"\n",(0,n.jsx)(r.li,{children:"1 X small RJ45 Cable"}),"\n",(0,n.jsx)(r.li,{children:"1 X Adaptateur Micro USB"}),"\n",(0,n.jsx)(r.li,{children:"1 X keybord(if you have problem with SSH connection to the Raspberry)"}),"\n",(0,n.jsx)(r.li,{children:"1 X soldering iron kit ( if you by NFC card kit )"}),"\n"]})]})}function h(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1414:(e,r,s)=>{s.d(r,{A:()=>n});const n=s.p+"assets/images/7inch_final-1f285c46e013b16c624bb8cc6ba9e773.png"},5040:(e,r,s)=>{s.d(r,{A:()=>n});const n=s.p+"assets/images/Kit-49a5dd4423cbb6928a7570e84f3c272b.jpg"},8453:(e,r,s)=>{s.d(r,{R:()=>o,x:()=>l});var n=s(6540);const i={},t=n.createContext(i);function o(e){const r=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c5077074.e8cbaacc.js b/assets/js/c5077074.e8cbaacc.js deleted file mode 100644 index 20fb718d..00000000 --- a/assets/js/c5077074.e8cbaacc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[9044],{1089:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=s(4848),i=s(8453);const t={sidebar_position:1,slug:"Goal",title:"Raspberry Box The Goal",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},o="Build your own cash and cashless register box.",l={id:"install/Raspberry Box/Hardware/The_Goal",title:"Raspberry Box The Goal",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Hardware/01_The_Goal.md",sourceDirName:"install/Raspberry Box/Hardware",slug:"/install/Raspberry Box/Hardware/Goal",permalink:"/docs/install/Raspberry Box/Hardware/Goal",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/install/Raspberry Box/Hardware/01_The_Goal.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"Goal",title:"Raspberry Box The Goal",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Hardware",permalink:"/docs/category/hardware"},next:{title:"Lazer cut and 3D print",permalink:"/docs/install/Raspberry Box/Hardware/lazer_cut"}},a={},c=[];function d(e){const r={blockquote:"blockquote",br:"br",h1:"h1",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"build-your-own-cash-and-cashless-register-box",children:"Build your own cash and cashless register box."})}),"\n",(0,n.jsxs)(r.p,{children:["We will realease all steps to go from this :\n",(0,n.jsx)(r.img,{alt:"coucou",src:s(5040).A+"",width:"1074",height:"1141"})]}),"\n",(0,n.jsx)(r.p,{children:"To this :"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"7inch_final.png",src:s(1414).A+"",width:"1209",height:"1612"})}),"\n",(0,n.jsxs)(r.blockquote,{children:["\n",(0,n.jsxs)(r.p,{children:["Here it's for 7inch screen.",(0,n.jsx)(r.br,{}),"\n","We will see the differents step betwen 7inch screen an 10inch"]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["To do this, follow these steps :",(0,n.jsx)(r.br,{}),"\n","1 - BOM ( Bill Of Material)\n2 - Lazer cut the body",(0,n.jsx)(r.br,{}),"\n","3 - 3D-print accessories",(0,n.jsx)(r.br,{}),"\n","4 - body assembly 7inch",(0,n.jsx)(r.br,{}),"\n","5 - body assembly 10inch"]}),"\n",(0,n.jsx)(r.h1,{id:"1--we-will-start-with-the-bom-",children:"1- We will start with the BOM :"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["1 X Access to FABLAB with :","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"3D printer"}),"\n",(0,n.jsx)(r.li,{children:"Lazer cut able to cut 5 milimeters plywood"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.li,{children:"1 X raspeberry PI3B +"}),"\n",(0,n.jsx)(r.li,{children:"1 X Power supply for Raspberry"}),"\n",(0,n.jsx)(r.li,{children:"1 X micro SD cards (8Go mini)"}),"\n",(0,n.jsx)(r.li,{children:'7 X " Dupont " cables'}),"\n",(0,n.jsx)(r.li,{children:"1 X NFC card reader ( RC522 )"}),"\n",(0,n.jsx)(r.li,{children:"1 X USB capacitive touch screen : Waveshare 7inch HDMI LCD ( C ) (or 10.1inch HDMI LCD(G) )"}),"\n",(0,n.jsx)(r.li,{children:"1 X Plywood 5 mm ( qty depend if 7 or 10.1 inch)"}),"\n",(0,n.jsx)(r.li,{children:"1 X box of 2X10 universal screw"}),"\n",(0,n.jsx)(r.li,{children:"1 X box of Roofing bolt & nut 5X16"}),"\n",(0,n.jsx)(r.li,{children:"1 X precision screwdriver"}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["For the 10\u2019\u2019 screen an additional USB-MicroUSB cable (guaranteeing power supply from raspberry).",(0,n.jsx)(r.br,{}),"\n","Optionnal :"]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"1 x Adaptateur RJ45"}),"\n",(0,n.jsx)(r.li,{children:"1 X small RJ45 Cable"}),"\n",(0,n.jsx)(r.li,{children:"1 X Adaptateur Micro USB"}),"\n",(0,n.jsx)(r.li,{children:"1 X keybord(if you have problem with SSH connection to the Raspberry)"}),"\n",(0,n.jsx)(r.li,{children:"1 X soldering iron kit ( if you by NFC card kit )"}),"\n"]})]})}function h(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1414:(e,r,s)=>{s.d(r,{A:()=>n});const n=s.p+"assets/images/7inch_final-1f285c46e013b16c624bb8cc6ba9e773.png"},5040:(e,r,s)=>{s.d(r,{A:()=>n});const n=s.p+"assets/images/Kit-49a5dd4423cbb6928a7570e84f3c272b.jpg"},8453:(e,r,s)=>{s.d(r,{R:()=>o,x:()=>l});var n=s(6540);const i={},t=n.createContext(i);function o(e){const r=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c7170f78.55c796aa.js b/assets/js/c7170f78.55c796aa.js deleted file mode 100644 index 95dcd764..00000000 --- a/assets/js/c7170f78.55c796aa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8194],{2903:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>c});var i=n(4848),s=n(8453);const r={sidebar_position:11,slug:"reservations",title:"R\xe9servations et billets",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},a=void 0,d={id:"api/11 Reservations",title:"R\xe9servations et billets",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",source:"@site/docs/api/11 Reservations.md",sourceDirName:"api",slug:"/api/reservations",permalink:"/docs/api/reservations",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/api/11 Reservations.md",tags:[],version:"current",sidebarPosition:11,frontMatter:{sidebar_position:11,slug:"reservations",title:"R\xe9servations et billets",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"\xc9v\xe8nements",permalink:"/docs/api/events"}},l={},c=[{value:"Reservations",id:"reservations",level:2},{value:"Billet",id:"billet",level:2}];function o(e){const t={code:"code",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h2,{id:"reservations",children:"Reservations"}),"\n",(0,i.jsx)(t.p,{children:"Une reservation peut avoir plusieurs billets."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"# List all :\nGET /api/reservations/\n# Retrieve one :\nGET /api/reservations/\n"})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",metastring:'title="Reservations state"',children:"\n# several possible states for one reservation\nCANCELED, CREATED, UNPAID, FREERES, FREERES_USERACTIV, PAID, PAID_ERROR, PAID_NOMAIL, VALID, = 'C', 'R', 'U', 'F', 'FA', 'P', 'PE', 'PN', 'V',\nTYPE_CHOICES = [\n (CANCELED, _('Annul\xe9e')),\n (CREATED, _('Cr\xe9e')),\n (UNPAID, _('Non pay\xe9e')),\n (FREERES, _('Mail non v\xe9rifi\xe9')),\n (FREERES_USERACTIV, _('Mail user v\xe9rifi\xe9')),\n (PAID, _('Pay\xe9e')),\n (PAID_ERROR, _('Pay\xe9e mais mail non valide')),\n (PAID_NOMAIL, _('Pay\xe9e mais mail non envoy\xe9')),\n (VALID, _('Valid\xe9e')),\n]\n"})}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Python Variable"}),(0,i.jsx)(t.th,{children:"String"}),(0,i.jsx)(t.th,{children:"Traduction"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"CANCELED"}),(0,i.jsx)(t.td,{children:"C"}),(0,i.jsx)(t.td,{children:"Annul\xe9e"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"CREATED"}),(0,i.jsx)(t.td,{children:"R"}),(0,i.jsx)(t.td,{children:"Cr\xe9e"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"UNPAID"}),(0,i.jsx)(t.td,{children:"U"}),(0,i.jsx)(t.td,{children:"Non pay\xe9e"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"FREERES"}),(0,i.jsx)(t.td,{children:"F"}),(0,i.jsx)(t.td,{children:"Mail non v\xe9rifi\xe9"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"FREERES_USERACTIV"}),(0,i.jsx)(t.td,{children:"FA"}),(0,i.jsx)(t.td,{children:"Mail user v\xe9rifi\xe9"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"PAID"}),(0,i.jsx)(t.td,{children:"P"}),(0,i.jsx)(t.td,{children:"Pay\xe9e"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"PAID_ERROR"}),(0,i.jsx)(t.td,{children:"PE"}),(0,i.jsx)(t.td,{children:"Pay\xe9e mais mail non valide"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"PAID_NOMAIL"}),(0,i.jsx)(t.td,{children:"PN"}),(0,i.jsx)(t.td,{children:"Pay\xe9e mais mail non envoy\xe9"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"VALID"}),(0,i.jsx)(t.td,{children:"V"}),(0,i.jsx)(t.td,{children:"Valid\xe9e"})]})]})]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="Reservations"',children:'[\n\t{\n\t\t"uuid": "8b375e71-52b2-422a-ab2d-5f1b4b2b12ac",\n\t\t"datetime": "2022-10-18T10:05:31.985512+04:00",\n\t\t"user_mail": "jturbeaux@pm.me",\n\t\t"event": "17dc4020-521b-4a74-a823-df65229eb724",\n\t\t"status": "V",\n\t\t"options": [\n\t\t\t"0fba6d07-555a-40d3-94aa-9edd97d1487c",\n\t\t\t"da35d52a-39fe-4674-b879-995fc50ea970"\n\t\t],\n\t\t"tickets": [\n\t\t\t"d875a95b-24f8-4f5a-b910-1e59ea52b615"\n\t\t],\n\t\t"paiements": [\n\t\t\t"db55449c-5edd-4c89-bb18-0f3da867d6fa"\n\t\t]\n\t},\n\t{\n\t\t"uuid": "e8ac055b-ab50-42db-8989-a36bec9e6862",\n\t\t"datetime": "2022-10-18T09:44:42.388278+04:00",\n\t\t"user_mail": "jturbeaux@pm.me",\n\t\t"event": "a4b5f5e2-a6e7-4162-bb06-0fe58647dd64",\n\t\t"status": "V",\n\t\t"options": [],\n\t\t"tickets": [\n\t\t\t"41d7fd2e-bc3b-440d-a75b-172be06c6d90"\n\t\t],\n\t\t"paiements": []\n\t}\n]\n'})}),"\n",(0,i.jsx)(t.h2,{id:"billet",children:"Billet"}),"\n",(0,i.jsx)(t.p,{children:"Un billet par personne."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"# List all ticket for the current event : datetime.now().date() :\nGET /api/ticket/\n# Retrieve one :\nGET /api/ticket/\n"})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",metastring:'title="ticket state"',children:"# several possible states for one ticket\nCREATED, NOT_ACTIV, NOT_SCANNED, SCANNED = 'C', 'N', 'K', 'S'\nSCAN_CHOICES = [\n (CREATED, _('Cr\xe9e')),\n (NOT_ACTIV, _('Non actif')),\n (NOT_SCANNED, _('Non scann\xe9')),\n (SCANNED, _('scann\xe9')),\n]\n"})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="Billet"',children:'[\n {\n "uuid": "d875a95b-24f8-4f5a-b910-1e59ea52b615",\n "first_name": "Terry",\n "last_name": "Pratchett",\n "status": "K",\n "seat": "L",\n "options": [\n "Fosse",\n "Je viens avec mon gobelin"\n ]\n }\n]\n'})})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>d});var i=n(6540);const s={},r=i.createContext(s);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c7170f78.a9204df0.js b/assets/js/c7170f78.a9204df0.js new file mode 100644 index 00000000..b022f56f --- /dev/null +++ b/assets/js/c7170f78.a9204df0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8194],{2903:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>c});var i=n(4848),s=n(8453);const r={sidebar_position:11,slug:"reservations",title:"R\xe9servations et billets",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},a=void 0,d={id:"api/11 Reservations",title:"R\xe9servations et billets",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",source:"@site/docs/api/11 Reservations.md",sourceDirName:"api",slug:"/api/reservations",permalink:"/docs/api/reservations",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/api/11 Reservations.md",tags:[],version:"current",sidebarPosition:11,frontMatter:{sidebar_position:11,slug:"reservations",title:"R\xe9servations et billets",description:"Cr\xe9ez un \xe9v\xe8nement avec entr\xe9e libre.",keywords:["cashless","billetterie","ticketing","cli","curl","python"],wiktags:["cashless","billetterie","ticketing","curl","python"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"\xc9v\xe8nements",permalink:"/docs/api/events"}},l={},c=[{value:"Reservations",id:"reservations",level:2},{value:"Billet",id:"billet",level:2}];function o(e){const t={code:"code",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h2,{id:"reservations",children:"Reservations"}),"\n",(0,i.jsx)(t.p,{children:"Une reservation peut avoir plusieurs billets."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"# List all :\nGET /api/reservations/\n# Retrieve one :\nGET /api/reservations/\n"})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",metastring:'title="Reservations state"',children:"\n# several possible states for one reservation\nCANCELED, CREATED, UNPAID, FREERES, FREERES_USERACTIV, PAID, PAID_ERROR, PAID_NOMAIL, VALID, = 'C', 'R', 'U', 'F', 'FA', 'P', 'PE', 'PN', 'V',\nTYPE_CHOICES = [\n (CANCELED, _('Annul\xe9e')),\n (CREATED, _('Cr\xe9e')),\n (UNPAID, _('Non pay\xe9e')),\n (FREERES, _('Mail non v\xe9rifi\xe9')),\n (FREERES_USERACTIV, _('Mail user v\xe9rifi\xe9')),\n (PAID, _('Pay\xe9e')),\n (PAID_ERROR, _('Pay\xe9e mais mail non valide')),\n (PAID_NOMAIL, _('Pay\xe9e mais mail non envoy\xe9')),\n (VALID, _('Valid\xe9e')),\n]\n"})}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Python Variable"}),(0,i.jsx)(t.th,{children:"String"}),(0,i.jsx)(t.th,{children:"Traduction"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"CANCELED"}),(0,i.jsx)(t.td,{children:"C"}),(0,i.jsx)(t.td,{children:"Annul\xe9e"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"CREATED"}),(0,i.jsx)(t.td,{children:"R"}),(0,i.jsx)(t.td,{children:"Cr\xe9e"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"UNPAID"}),(0,i.jsx)(t.td,{children:"U"}),(0,i.jsx)(t.td,{children:"Non pay\xe9e"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"FREERES"}),(0,i.jsx)(t.td,{children:"F"}),(0,i.jsx)(t.td,{children:"Mail non v\xe9rifi\xe9"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"FREERES_USERACTIV"}),(0,i.jsx)(t.td,{children:"FA"}),(0,i.jsx)(t.td,{children:"Mail user v\xe9rifi\xe9"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"PAID"}),(0,i.jsx)(t.td,{children:"P"}),(0,i.jsx)(t.td,{children:"Pay\xe9e"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"PAID_ERROR"}),(0,i.jsx)(t.td,{children:"PE"}),(0,i.jsx)(t.td,{children:"Pay\xe9e mais mail non valide"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"PAID_NOMAIL"}),(0,i.jsx)(t.td,{children:"PN"}),(0,i.jsx)(t.td,{children:"Pay\xe9e mais mail non envoy\xe9"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"VALID"}),(0,i.jsx)(t.td,{children:"V"}),(0,i.jsx)(t.td,{children:"Valid\xe9e"})]})]})]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="Reservations"',children:'[\n\t{\n\t\t"uuid": "8b375e71-52b2-422a-ab2d-5f1b4b2b12ac",\n\t\t"datetime": "2022-10-18T10:05:31.985512+04:00",\n\t\t"user_mail": "jturbeaux@pm.me",\n\t\t"event": "17dc4020-521b-4a74-a823-df65229eb724",\n\t\t"status": "V",\n\t\t"options": [\n\t\t\t"0fba6d07-555a-40d3-94aa-9edd97d1487c",\n\t\t\t"da35d52a-39fe-4674-b879-995fc50ea970"\n\t\t],\n\t\t"tickets": [\n\t\t\t"d875a95b-24f8-4f5a-b910-1e59ea52b615"\n\t\t],\n\t\t"paiements": [\n\t\t\t"db55449c-5edd-4c89-bb18-0f3da867d6fa"\n\t\t]\n\t},\n\t{\n\t\t"uuid": "e8ac055b-ab50-42db-8989-a36bec9e6862",\n\t\t"datetime": "2022-10-18T09:44:42.388278+04:00",\n\t\t"user_mail": "jturbeaux@pm.me",\n\t\t"event": "a4b5f5e2-a6e7-4162-bb06-0fe58647dd64",\n\t\t"status": "V",\n\t\t"options": [],\n\t\t"tickets": [\n\t\t\t"41d7fd2e-bc3b-440d-a75b-172be06c6d90"\n\t\t],\n\t\t"paiements": []\n\t}\n]\n'})}),"\n",(0,i.jsx)(t.h2,{id:"billet",children:"Billet"}),"\n",(0,i.jsx)(t.p,{children:"Un billet par personne."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"# List all ticket for the current event : datetime.now().date() :\nGET /api/ticket/\n# Retrieve one :\nGET /api/ticket/\n"})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",metastring:'title="ticket state"',children:"# several possible states for one ticket\nCREATED, NOT_ACTIV, NOT_SCANNED, SCANNED = 'C', 'N', 'K', 'S'\nSCAN_CHOICES = [\n (CREATED, _('Cr\xe9e')),\n (NOT_ACTIV, _('Non actif')),\n (NOT_SCANNED, _('Non scann\xe9')),\n (SCANNED, _('scann\xe9')),\n]\n"})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="Billet"',children:'[\n {\n "uuid": "d875a95b-24f8-4f5a-b910-1e59ea52b615",\n "first_name": "Terry",\n "last_name": "Pratchett",\n "status": "K",\n "seat": "L",\n "options": [\n "Fosse",\n "Je viens avec mon gobelin"\n ]\n }\n]\n'})})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>d});var i=n(6540);const s={},r=i.createContext(s);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cc3b42c3.989118d3.js b/assets/js/cc3b42c3.989118d3.js new file mode 100644 index 00000000..499cb54b --- /dev/null +++ b/assets/js/cc3b42c3.989118d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[4910],{2534:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var t=n(4848),a=n(8453);const s={sidebar_position:1,slug:"android",title:"Android application",description:"Android application available on https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7",keywords:["cashless","billetterie","ticketing","android","application","app"],wiktags:["cashless","billetterie","ticketing","android","application","app"],authors:"jonas"},r="Android Application",o={id:"Utilisateur/Cashless/1 Application android",title:"Android application",description:"Android application available on https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7",source:"@site/docs/Utilisateur/Cashless/1 Application android.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/android",permalink:"/docs/Utilisateur/Cashless/android",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/1 Application android.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"android",title:"Android application",description:"Android application available on https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7",keywords:["cashless","billetterie","ticketing","android","application","app"],wiktags:["cashless","billetterie","ticketing","android","application","app"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Cashless",permalink:"/docs/category/cashless"},next:{title:"Primary Cards",permalink:"/docs/Utilisateur/Cashless/admin_add_primary"}},l={},d=[{value:"Download",id:"download",level:2},{value:"Launch",id:"launch",level:2},{value:"Pairing",id:"pairing",level:2}];function c(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"android-application",children:"Android Application"})}),"\n",(0,t.jsx)(i.h2,{id:"download",children:"Download"}),"\n",(0,t.jsx)(i.p,{children:"The application is not yet published on the Android, Apple, or FDroid Stores."}),"\n",(0,t.jsx)(i.p,{children:"It is available at the following address:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.a,{href:"https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7",children:"https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7"})}),"\n",(0,t.jsx)(i.p,{children:"Or scan this qrcode on a phone to visit the download page."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"/img/qrcode_app_android.png",src:n(8993).A+"",width:"370",height:"370"})}),"\n",(0,t.jsx)(i.h2,{id:"launch",children:"Launch"}),"\n",(0,t.jsx)(i.p,{children:"Your device must be NFC compatible.\nThe application has been tested on the following hardware:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"OnePlus 3T"}),"\n",(0,t.jsx)(i.li,{children:"Blackview"}),"\n",(0,t.jsx)(i.li,{children:"Redmi 9"}),"\n",(0,t.jsx)(i.li,{children:"Redmi Note pro 10"}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"pairing",children:"Pairing"}),"\n",(0,t.jsx)(i.p,{children:"On first launch, indicate:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.p,{children:"the DNS address of your cashless server"}),"\n",(0,t.jsx)(i.p,{children:"Ask your administrator. This is the address of your administration interface without https:// or /adminstaff"}),"\n",(0,t.jsxs)(i.p,{children:["example: ",(0,t.jsx)(i.code,{children:"manapanycashless.tibillet.re"})]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.p,{children:"Give your device an explicit name to be able to find it easily (eg: Redmi9Alex)"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"A screen with an orange background appears. It tells you the name of the device to validate.\nOn your administration page, go to the Device section (/adminstaff/APIcashless/device/)"}),"\n",(0,t.jsx)(i.p,{children:"Click \u201cactive\u201d then save. Your device is now paired!"}),"\n",(0,t.jsx)(i.p,{children:"On your phone, press the orange screen, the application launches and asks you for your primary card :)"})]})}function p(e={}){const{wrapper:i}={...(0,a.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8993:(e,i,n)=>{n.d(i,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAAFyAQMAAADS6sNKAAAABlBMVEUAAAD///+l2Z/dAAAAAnRSTlP//8i138cAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAG6SURBVHic7dlBjsMgDAVQpB4gR+LqOVIOEIkS2x+TpmpnNLP50WfR6YhHNxgwprTftSIvLy8vLy//T75Ee/Tv2/hoe+/d0Ffleb3/01UMOujav5XqIweR5/THtB99GFm6X5p7+w35W/hQWOoZI/K38N5XjkHHh/xNfEOfL3ob7kHxZf+XZ/AjH4M/jfyQv8kz+GwGIste2rXJM/reNw7ovsr95G5jpP+GPK3PC7KNtK3cFrjtAcjR5Fk9cq8C6pl3DO8352v8yDN5P5vbfHI3r3flzUqe21uBK/ti5Y/IqPK8ft6295j71QLjJSmTJ/WobZmfSpkL9oAqT+yxonFAB/Wjel0QI/KsvsV+nrm1qdXXuzy1PwXAKHVZzzZenuRpPQogsZ+XyLdzK3+bv8mzeK+HjGnPKnXk4PLcPrKwMh6IcZWKeNgiPOQ5fTavTa94IJ7Co8rT+ljdOKq95aUq79DynL7aHy96xUgc3y2qJfLM3p8NUdS0UJhLIZd4kOf0mPvz8V2u7xHylH5+e8iXCRzf8qzeAebeyyOjfTiv5Sl8tEdExly03t/Wq+WZ/M+bvLy8vLy8/N/9EzPWd9OsJ/ZQAAAAAElFTkSuQmCC"},8453:(e,i,n)=>{n.d(i,{R:()=>r,x:()=>o});var t=n(6540);const a={},s=t.createContext(a);function r(e){const i=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),t.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cc3b42c3.fa9e4fa6.js b/assets/js/cc3b42c3.fa9e4fa6.js deleted file mode 100644 index 18a0fcdc..00000000 --- a/assets/js/cc3b42c3.fa9e4fa6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[4910],{2534:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var t=n(4848),a=n(8453);const s={sidebar_position:1,slug:"android",title:"Android application",description:"Android application available on https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7",keywords:["cashless","billetterie","ticketing","android","application","app"],wiktags:["cashless","billetterie","ticketing","android","application","app"],authors:"jonas"},r="Android Application",o={id:"Utilisateur/Cashless/1 Application android",title:"Android application",description:"Android application available on https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7",source:"@site/docs/Utilisateur/Cashless/1 Application android.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/android",permalink:"/docs/Utilisateur/Cashless/android",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/1 Application android.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"android",title:"Android application",description:"Android application available on https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7",keywords:["cashless","billetterie","ticketing","android","application","app"],wiktags:["cashless","billetterie","ticketing","android","application","app"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"Cashless",permalink:"/docs/category/cashless"},next:{title:"Primary Cards",permalink:"/docs/Utilisateur/Cashless/admin_add_primary"}},l={},d=[{value:"Download",id:"download",level:2},{value:"Launch",id:"launch",level:2},{value:"Pairing",id:"pairing",level:2}];function c(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"android-application",children:"Android Application"})}),"\n",(0,t.jsx)(i.h2,{id:"download",children:"Download"}),"\n",(0,t.jsx)(i.p,{children:"The application is not yet published on the Android, Apple, or FDroid Stores."}),"\n",(0,t.jsx)(i.p,{children:"It is available at the following address:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.a,{href:"https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7",children:"https://nuage.tierslieux.re/s/BifbQGA3JCk6aH7"})}),"\n",(0,t.jsx)(i.p,{children:"Or scan this qrcode on a phone to visit the download page."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"/img/qrcode_app_android.png",src:n(8993).A+"",width:"370",height:"370"})}),"\n",(0,t.jsx)(i.h2,{id:"launch",children:"Launch"}),"\n",(0,t.jsx)(i.p,{children:"Your device must be NFC compatible.\nThe application has been tested on the following hardware:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"OnePlus 3T"}),"\n",(0,t.jsx)(i.li,{children:"Blackview"}),"\n",(0,t.jsx)(i.li,{children:"Redmi 9"}),"\n",(0,t.jsx)(i.li,{children:"Redmi Note pro 10"}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"pairing",children:"Pairing"}),"\n",(0,t.jsx)(i.p,{children:"On first launch, indicate:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.p,{children:"the DNS address of your cashless server"}),"\n",(0,t.jsx)(i.p,{children:"Ask your administrator. This is the address of your administration interface without https:// or /adminstaff"}),"\n",(0,t.jsxs)(i.p,{children:["example: ",(0,t.jsx)(i.code,{children:"manapanycashless.tibillet.re"})]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsx)(i.p,{children:"Give your device an explicit name to be able to find it easily (eg: Redmi9Alex)"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"A screen with an orange background appears. It tells you the name of the device to validate.\nOn your administration page, go to the Device section (/adminstaff/APIcashless/device/)"}),"\n",(0,t.jsx)(i.p,{children:"Click \u201cactive\u201d then save. Your device is now paired!"}),"\n",(0,t.jsx)(i.p,{children:"On your phone, press the orange screen, the application launches and asks you for your primary card :)"})]})}function p(e={}){const{wrapper:i}={...(0,a.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8993:(e,i,n)=>{n.d(i,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAAFyAQMAAADS6sNKAAAABlBMVEUAAAD///+l2Z/dAAAAAnRSTlP//8i138cAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAG6SURBVHic7dlBjsMgDAVQpB4gR+LqOVIOEIkS2x+TpmpnNLP50WfR6YhHNxgwprTftSIvLy8vLy//T75Ee/Tv2/hoe+/d0Ffleb3/01UMOujav5XqIweR5/THtB99GFm6X5p7+w35W/hQWOoZI/K38N5XjkHHh/xNfEOfL3ob7kHxZf+XZ/AjH4M/jfyQv8kz+GwGIste2rXJM/reNw7ovsr95G5jpP+GPK3PC7KNtK3cFrjtAcjR5Fk9cq8C6pl3DO8352v8yDN5P5vbfHI3r3flzUqe21uBK/ti5Y/IqPK8ft6295j71QLjJSmTJ/WobZmfSpkL9oAqT+yxonFAB/Wjel0QI/KsvsV+nrm1qdXXuzy1PwXAKHVZzzZenuRpPQogsZ+XyLdzK3+bv8mzeK+HjGnPKnXk4PLcPrKwMh6IcZWKeNgiPOQ5fTavTa94IJ7Co8rT+ljdOKq95aUq79DynL7aHy96xUgc3y2qJfLM3p8NUdS0UJhLIZd4kOf0mPvz8V2u7xHylH5+e8iXCRzf8qzeAebeyyOjfTiv5Sl8tEdExly03t/Wq+WZ/M+bvLy8vLy8/N/9EzPWd9OsJ/ZQAAAAAElFTkSuQmCC"},8453:(e,i,n)=>{n.d(i,{R:()=>r,x:()=>o});var t=n(6540);const a={},s=t.createContext(a);function r(e){const i=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),t.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d26ec100.896e8dfc.js b/assets/js/d26ec100.896e8dfc.js deleted file mode 100644 index 91ef4a08..00000000 --- a/assets/js/d26ec100.896e8dfc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[5606],{2412:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var i=n(4848),o=n(8453);const a={sidebar_position:7,slug:"philosophie",title:"Philosophy",description:"We provide a cashless, ticketing and restaurant management solution for small structures forgotten by large companies.",image:"https://tibillet.org/img/logoTibMJ4300.png",keywords:["cashless","billetterie","ticketing","philosophy","venue","catering"],wiktags:["cashless","billetterie","ticketing","philosophy","venue","catering"],authors:"jonas"},s=void 0,r={id:"presentation/philo",title:"Philosophy",description:"We provide a cashless, ticketing and restaurant management solution for small structures forgotten by large companies.",source:"@site/docs/presentation/philo.md",sourceDirName:"presentation",slug:"/presentation/philosophie",permalink:"/docs/presentation/philosophie",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/presentation/philo.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,slug:"philosophie",title:"Philosophy",description:"We provide a cashless, ticketing and restaurant management solution for small structures forgotten by large companies.",image:"https://tibillet.org/img/logoTibMJ4300.png",keywords:["cashless","billetterie","ticketing","philosophy","venue","catering"],wiktags:["cashless","billetterie","ticketing","philosophy","venue","catering"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"D\xe9monstration",permalink:"/docs/presentation/demonstration"},next:{title:"Prices, conditions and licenses",permalink:"/docs/presentation/tarifs"}},l={},c=[{value:"How are we different?",id:"how-are-we-different",level:2},{value:"Did you say cooperative ?",id:"did-you-say-cooperative-",level:3},{value:"What does this look like in practice ?",id:"what-does-this-look-like-in-practice-",level:3},{value:"I organize cultural events in my concert caf\xe9, what's the benefit for me ?",id:"i-organize-cultural-events-in-my-concert-caf\xe9-whats-the-benefit-for-me-",level:3},{value:"And for artists ?",id:"and-for-artists-",level:2}];function d(e){const t={h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h2,{id:"how-are-we-different",children:"How are we different?"}),"\n",(0,i.jsx)(t.p,{children:"We are an open source project, which means that the source code is available and accessible to everyone.\nThis makes it possible to modulate and personalize the solution according to its specific needs."}),"\n",(0,i.jsx)(t.p,{children:"It has been developed and maintained by a cooperative, which means that the profits generated by the project are distributed equitably among the cooperative members."}),"\n",(0,i.jsx)(t.p,{children:"It's a circular economy based model which aims to promote the reuse and valorization of already existing resources."}),"\n",(0,i.jsx)(t.p,{children:"We offers competitive prices for the purchase of equipment and the provision of services,\nwith the possibility of renting the equipment for a short period of time."}),"\n",(0,i.jsx)(t.p,{children:"TiBillet is setting up a federated cashless wallet system, which allows users to spend and exchange\nin an entire network of cultural places, with the same NFC card.\nNo more single-use festival bracelets!"}),"\n",(0,i.jsx)(t.p,{children:"By using blockchain to verify transactions, TiBillet aims to ensure maximum transparency and security in the exchange of the entire network."}),"\n",(0,i.jsx)(t.p,{children:"TiBillet sets up tools for users and for event organizers wishing to create links and synergy between the different actors in a territory."}),"\n",(0,i.jsx)(t.p,{children:"It is a social and solidarity solution: by offering beneficiaries the opportunity to join the SCIC (community interest company), TiBillet offers a unifying solution which makes it possible to develop a region cultural offer, to create a link between it's different networks and cultural spaces and to invite the circulation of artists and audiences."}),"\n",(0,i.jsx)(t.h3,{id:"did-you-say-cooperative-",children:"Did you say cooperative ?"}),"\n",(0,i.jsx)(t.p,{children:"TiBillet cashless is a decentralized payment system that allows users to spend and exchange money in a network of caf\xe9-concerts, third places and associative artisans, with the same wallet."}),"\n",(0,i.jsx)(t.p,{children:"Money recharged to the cashless wallet is available for life and refundable at any time, provided it remains active.\nIf a user does not use it for a certain period of time, and after numerous reminders encouraging the user to use their card in the network, the remaining money is gradually collected and reinjected into the cooperative system."}),"\n",(0,i.jsx)(t.p,{children:"This is done with full transparency and with the knowledge of the wallet holder."}),"\n",(0,i.jsx)(t.p,{children:"TiBillet's federated cashless wallet system thus makes it possible to keep money circulating in the network and to support the creation of new places and cultural events."}),"\n",(0,i.jsx)(t.p,{children:"In fact, the money collected is redistributed between all the actors in the network and helps to create new cultural spaces that wish to join the network."}),"\n",(0,i.jsx)(t.h3,{id:"what-does-this-look-like-in-practice-",children:"What does this look like in practice ?"}),"\n",(0,i.jsx)(t.p,{children:"Here is an example from the point of view of a TiBillet user as a festival-goer:"}),"\n",(0,i.jsx)(t.p,{children:"Imagine that you are a music enjoyer and used to frequenting many festivals and cultural events in your area."}),"\n",(0,i.jsx)(t.p,{children:"Thanks to TiBillet, you can buy your concert and festival tickets online, top up your cashless wallet on your smartphone and use this same wallet to buy food, drinks and all kinds of products on site. All this, without having to carry physical currency or credit cards, by using a local and federated currency throughout an entire territory, and by enormously simplifying the financial management of the organizing associations."}),"\n",(0,i.jsx)(t.p,{children:"But TiBillet doesn't stop there.\nAs a member of an instance, you are part of a network of beneficiaries from third places, cooperatives and associations who are committed to the social and solidarity economy and the promotion of culture in their region. ."}),"\n",(0,i.jsx)(t.p,{children:"You can therefore benefit from a federated agenda which allows you to discover new cultural events offered by other members of the network and to participate in collective projects aimed at supporting the cultural sector in your territory."}),"\n",(0,i.jsx)(t.p,{children:"Meetings, workshops, concerts, events, conferences, exhibitions, shows, screenings, etc. Everything can be organized via TiBillet."}),"\n",(0,i.jsx)(t.p,{children:"Finally, thanks to the time currency offered by TiBillet, you can also contribute to the life of the places you love by donating your time and your skills.\nFor example, you can offer to volunteer at a festival or at a third place\nin exchange for time credit allocated on the cashless card, which you can use to benefit from a future workshop."}),"\n",(0,i.jsx)(t.h3,{id:"i-organize-cultural-events-in-my-concert-caf\xe9-whats-the-benefit-for-me-",children:"I organize cultural events in my concert caf\xe9, what's the benefit for me ?"}),"\n",(0,i.jsx)(t.p,{children:"For an event organizer, using TiBillet has many advantages."}),"\n",(0,i.jsx)(t.p,{children:"First of all, it benefits from a complete and intuitive ticketing and venue management system, which allows it to efficiently manage\nreservations and on-site transactions.\nIn addition, by using cashless, TiBillet can offer an interesting alternative to cash or card payments:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"It can offer preferential rates for cashless card users, which helps build user loyalty and encourage them to return to events."}),"\n",(0,i.jsx)(t.li,{children:"It helps reduce costs related to cash and bank card transactions, particularly in terms of cash management and security."}),"\n",(0,i.jsx)(t.li,{children:"It offers better traceability of transactions and better visibility on customer consumption habits."}),"\n",(0,i.jsx)(t.li,{children:"It greatly reduces waiting times at the checkouts and streamlines customer circulation in the premises. (+30% sales!)"}),"\n",(0,i.jsx)(t.li,{children:"It benefits from a venue management and ordering system which optimizes order taking, kitchen preparation and inventory management."}),"\n",(0,i.jsx)(t.li,{children:"It can be used to provide targeted offers and promotions to customers, based on their spending habits."}),"\n",(0,i.jsx)(t.li,{children:"It can be used to establish partnerships with other actors in the cultural sector, by offering customers benefits in other partner locations."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"By using the cooperative model, event organizers can also integrate into a network of partners and festivals, which allows them to promote their event to a wider audience and create synergies with other stakeholders in the cultural industry."}),"\n",(0,i.jsx)(t.p,{children:"Finally, by using a local currency, they can contribute to the emergence of a social, solidarity and circular economy."}),"\n",(0,i.jsx)(t.h2,{id:"and-for-artists-",children:"And for artists ?"}),"\n",(0,i.jsx)(t.p,{children:"TiBillet's federated agenda is a tool for promoting cultural events which showcase the various events organized by the cooperative's partners.\nIt is a collaborative tool that allows events in the same region to be grouped together and highlighted to a target audience."}),"\n",(0,i.jsx)(t.p,{children:"For artists, the creation of a dedicated space and its connection with the federated agenda is a way to make themselves known to a wide audience and to find distribution opportunities."}),"\n",(0,i.jsx)(t.p,{children:"By being present on the federated agenda, artists can send proposals, be spotted by event organizers and thus be invited to perform in different partner venues of the cooperative."})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>r});var i=n(6540);const o={},a=i.createContext(o);function s(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d26ec100.f2f73c65.js b/assets/js/d26ec100.f2f73c65.js new file mode 100644 index 00000000..d37a974b --- /dev/null +++ b/assets/js/d26ec100.f2f73c65.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[5606],{2412:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var i=n(4848),o=n(8453);const a={sidebar_position:7,slug:"philosophie",title:"Philosophy",description:"We provide a cashless, ticketing and restaurant management solution for small structures forgotten by large companies.",image:"https://tibillet.org/img/logoTibMJ4300.png",keywords:["cashless","billetterie","ticketing","philosophy","venue","catering"],wiktags:["cashless","billetterie","ticketing","philosophy","venue","catering"],authors:"jonas"},s=void 0,r={id:"presentation/philo",title:"Philosophy",description:"We provide a cashless, ticketing and restaurant management solution for small structures forgotten by large companies.",source:"@site/docs/presentation/philo.md",sourceDirName:"presentation",slug:"/presentation/philosophie",permalink:"/docs/presentation/philosophie",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/presentation/philo.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,slug:"philosophie",title:"Philosophy",description:"We provide a cashless, ticketing and restaurant management solution for small structures forgotten by large companies.",image:"https://tibillet.org/img/logoTibMJ4300.png",keywords:["cashless","billetterie","ticketing","philosophy","venue","catering"],wiktags:["cashless","billetterie","ticketing","philosophy","venue","catering"],authors:"jonas"},sidebar:"tutorialSidebar",previous:{title:"D\xe9monstration",permalink:"/docs/presentation/demonstration"},next:{title:"Prices, conditions and licenses",permalink:"/docs/presentation/tarifs"}},l={},c=[{value:"How are we different?",id:"how-are-we-different",level:2},{value:"Did you say cooperative ?",id:"did-you-say-cooperative-",level:3},{value:"What does this look like in practice ?",id:"what-does-this-look-like-in-practice-",level:3},{value:"I organize cultural events in my concert caf\xe9, what's the benefit for me ?",id:"i-organize-cultural-events-in-my-concert-caf\xe9-whats-the-benefit-for-me-",level:3},{value:"And for artists ?",id:"and-for-artists-",level:2}];function d(e){const t={h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h2,{id:"how-are-we-different",children:"How are we different?"}),"\n",(0,i.jsx)(t.p,{children:"We are an open source project, which means that the source code is available and accessible to everyone.\nThis makes it possible to modulate and personalize the solution according to its specific needs."}),"\n",(0,i.jsx)(t.p,{children:"It has been developed and maintained by a cooperative, which means that the profits generated by the project are distributed equitably among the cooperative members."}),"\n",(0,i.jsx)(t.p,{children:"It's a circular economy based model which aims to promote the reuse and valorization of already existing resources."}),"\n",(0,i.jsx)(t.p,{children:"We offers competitive prices for the purchase of equipment and the provision of services,\nwith the possibility of renting the equipment for a short period of time."}),"\n",(0,i.jsx)(t.p,{children:"TiBillet is setting up a federated cashless wallet system, which allows users to spend and exchange\nin an entire network of cultural places, with the same NFC card.\nNo more single-use festival bracelets!"}),"\n",(0,i.jsx)(t.p,{children:"By using blockchain to verify transactions, TiBillet aims to ensure maximum transparency and security in the exchange of the entire network."}),"\n",(0,i.jsx)(t.p,{children:"TiBillet sets up tools for users and for event organizers wishing to create links and synergy between the different actors in a territory."}),"\n",(0,i.jsx)(t.p,{children:"It is a social and solidarity solution: by offering beneficiaries the opportunity to join the SCIC (community interest company), TiBillet offers a unifying solution which makes it possible to develop a region cultural offer, to create a link between it's different networks and cultural spaces and to invite the circulation of artists and audiences."}),"\n",(0,i.jsx)(t.h3,{id:"did-you-say-cooperative-",children:"Did you say cooperative ?"}),"\n",(0,i.jsx)(t.p,{children:"TiBillet cashless is a decentralized payment system that allows users to spend and exchange money in a network of caf\xe9-concerts, third places and associative artisans, with the same wallet."}),"\n",(0,i.jsx)(t.p,{children:"Money recharged to the cashless wallet is available for life and refundable at any time, provided it remains active.\nIf a user does not use it for a certain period of time, and after numerous reminders encouraging the user to use their card in the network, the remaining money is gradually collected and reinjected into the cooperative system."}),"\n",(0,i.jsx)(t.p,{children:"This is done with full transparency and with the knowledge of the wallet holder."}),"\n",(0,i.jsx)(t.p,{children:"TiBillet's federated cashless wallet system thus makes it possible to keep money circulating in the network and to support the creation of new places and cultural events."}),"\n",(0,i.jsx)(t.p,{children:"In fact, the money collected is redistributed between all the actors in the network and helps to create new cultural spaces that wish to join the network."}),"\n",(0,i.jsx)(t.h3,{id:"what-does-this-look-like-in-practice-",children:"What does this look like in practice ?"}),"\n",(0,i.jsx)(t.p,{children:"Here is an example from the point of view of a TiBillet user as a festival-goer:"}),"\n",(0,i.jsx)(t.p,{children:"Imagine that you are a music enjoyer and used to frequenting many festivals and cultural events in your area."}),"\n",(0,i.jsx)(t.p,{children:"Thanks to TiBillet, you can buy your concert and festival tickets online, top up your cashless wallet on your smartphone and use this same wallet to buy food, drinks and all kinds of products on site. All this, without having to carry physical currency or credit cards, by using a local and federated currency throughout an entire territory, and by enormously simplifying the financial management of the organizing associations."}),"\n",(0,i.jsx)(t.p,{children:"But TiBillet doesn't stop there.\nAs a member of an instance, you are part of a network of beneficiaries from third places, cooperatives and associations who are committed to the social and solidarity economy and the promotion of culture in their region. ."}),"\n",(0,i.jsx)(t.p,{children:"You can therefore benefit from a federated agenda which allows you to discover new cultural events offered by other members of the network and to participate in collective projects aimed at supporting the cultural sector in your territory."}),"\n",(0,i.jsx)(t.p,{children:"Meetings, workshops, concerts, events, conferences, exhibitions, shows, screenings, etc. Everything can be organized via TiBillet."}),"\n",(0,i.jsx)(t.p,{children:"Finally, thanks to the time currency offered by TiBillet, you can also contribute to the life of the places you love by donating your time and your skills.\nFor example, you can offer to volunteer at a festival or at a third place\nin exchange for time credit allocated on the cashless card, which you can use to benefit from a future workshop."}),"\n",(0,i.jsx)(t.h3,{id:"i-organize-cultural-events-in-my-concert-caf\xe9-whats-the-benefit-for-me-",children:"I organize cultural events in my concert caf\xe9, what's the benefit for me ?"}),"\n",(0,i.jsx)(t.p,{children:"For an event organizer, using TiBillet has many advantages."}),"\n",(0,i.jsx)(t.p,{children:"First of all, it benefits from a complete and intuitive ticketing and venue management system, which allows it to efficiently manage\nreservations and on-site transactions.\nIn addition, by using cashless, TiBillet can offer an interesting alternative to cash or card payments:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"It can offer preferential rates for cashless card users, which helps build user loyalty and encourage them to return to events."}),"\n",(0,i.jsx)(t.li,{children:"It helps reduce costs related to cash and bank card transactions, particularly in terms of cash management and security."}),"\n",(0,i.jsx)(t.li,{children:"It offers better traceability of transactions and better visibility on customer consumption habits."}),"\n",(0,i.jsx)(t.li,{children:"It greatly reduces waiting times at the checkouts and streamlines customer circulation in the premises. (+30% sales!)"}),"\n",(0,i.jsx)(t.li,{children:"It benefits from a venue management and ordering system which optimizes order taking, kitchen preparation and inventory management."}),"\n",(0,i.jsx)(t.li,{children:"It can be used to provide targeted offers and promotions to customers, based on their spending habits."}),"\n",(0,i.jsx)(t.li,{children:"It can be used to establish partnerships with other actors in the cultural sector, by offering customers benefits in other partner locations."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"By using the cooperative model, event organizers can also integrate into a network of partners and festivals, which allows them to promote their event to a wider audience and create synergies with other stakeholders in the cultural industry."}),"\n",(0,i.jsx)(t.p,{children:"Finally, by using a local currency, they can contribute to the emergence of a social, solidarity and circular economy."}),"\n",(0,i.jsx)(t.h2,{id:"and-for-artists-",children:"And for artists ?"}),"\n",(0,i.jsx)(t.p,{children:"TiBillet's federated agenda is a tool for promoting cultural events which showcase the various events organized by the cooperative's partners.\nIt is a collaborative tool that allows events in the same region to be grouped together and highlighted to a target audience."}),"\n",(0,i.jsx)(t.p,{children:"For artists, the creation of a dedicated space and its connection with the federated agenda is a way to make themselves known to a wide audience and to find distribution opportunities."}),"\n",(0,i.jsx)(t.p,{children:"By being present on the federated agenda, artists can send proposals, be spotted by event organizers and thus be invited to perform in different partner venues of the cooperative."})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>r});var i=n(6540);const o={},a=i.createContext(o);function s(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d527cc20.263ccf07.js b/assets/js/d527cc20.263ccf07.js new file mode 100644 index 00000000..5d2b3111 --- /dev/null +++ b/assets/js/d527cc20.263ccf07.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[6203],{4552:(e,i,r)=>{r.r(i),r.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var t=r(4848),n=r(8453);const a={sidebar_position:2,slug:"admin_add_primary",title:"Primary Cards",description:"Ajouter une ou plusieurs cartes primaires.",keywords:["cashless","android","Primary","Cards"],wiktags:["cashless","android","Primary","Cards"],authors:"Axel"},s=void 0,o={id:"Utilisateur/Cashless/2 CartePrimaire",title:"Primary Cards",description:"Ajouter une ou plusieurs cartes primaires.",source:"@site/docs/Utilisateur/Cashless/2 CartePrimaire.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_add_primary",permalink:"/docs/Utilisateur/Cashless/admin_add_primary",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/Utilisateur/Cashless/2 CartePrimaire.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"admin_add_primary",title:"Primary Cards",description:"Ajouter une ou plusieurs cartes primaires.",keywords:["cashless","android","Primary","Cards"],wiktags:["cashless","android","Primary","Cards"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Android application",permalink:"/docs/Utilisateur/Cashless/android"},next:{title:"Points of sale",permalink:"/docs/Utilisateur/Cashless/admin_add_pos"}},l={},d=[{value:"1- Register a new member.",id:"1--register-a-new-member",level:2},{value:"2- Create the primary card.",id:"2--create-the-primary-card",level:2},{value:"3- Test the card at a point of sale",id:"3--test-the-card-at-a-point-of-sale",level:2}];function c(e){const i={a:"a",admonition:"admonition",h2:"h2",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.p,{children:'Primary cards are required to open a point of sale (Android or terminal). They determine the level\nof authorization available to the user: For example, you can authorize access to a "BAR"\npoint of sale without giving access to the "CASHLESS" point of sale which allows recharges.'}),"\n",(0,t.jsx)(i.p,{children:"Always prefer to add named primary cards (linked to a user). This way, you will be able to trace each transaction more precisely.\nThe person responsible for the point of sale is visible in each payment."}),"\n",(0,t.jsx)(i.h2,{id:"1--register-a-new-member",children:"1- Register a new member."}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:'Click on the "Members" category in the left column.'}),"\n",(0,t.jsx)(i.li,{children:'Click on the "Add Member" button at the top right.'}),"\n",(0,t.jsx)(i.li,{children:"Enter the new card number in the corresponding field."}),"\n",(0,t.jsx)(i.li,{children:"Save."}),"\n"]}),"\n",(0,t.jsxs)(i.admonition,{type:"info",children:[(0,t.jsx)(i.mdxAdmonitionTitle,{}),(0,t.jsx)(i.p,{children:"We are talking here about authorization level, not associative membership."})]}),"\n",(0,t.jsx)(i.h2,{id:"2--create-the-primary-card",children:"2- Create the primary card."}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Click on the \u201cPrimary Cards\u201d category in the left menu."}),"\n",(0,t.jsx)(i.li,{children:'Click on the "Add Primary Card" button at the top right.'}),"\n",(0,t.jsx)(i.li,{children:"Enter the card number."}),"\n",(0,t.jsxs)(i.li,{children:["Designate the points of sale controlled (or not) by this card.","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Here you can determine the level of authorization your user has."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["Activate manager mode if you wish.","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"\u201cManager mode\u201d allows you to cancel an order already placed, even if it is paid. It's a superpower that requires great responsibilities :)"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.li,{children:"Save."}),"\n"]}),"\n",(0,t.jsxs)(i.admonition,{type:"info",children:[(0,t.jsx)(i.mdxAdmonitionTitle,{}),(0,t.jsx)(i.p,{children:"A member can have several primary cards provided that they did not enter an email address when creating the member in section 1."})]}),"\n",(0,t.jsx)(i.h2,{id:"3--test-the-card-at-a-point-of-sale",children:"3- Test the card at a point of sale"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Start the TiBillet application on a terminal or smartphone.","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Follow the ",(0,t.jsx)(i.a,{href:"/docs/Utilisateur/Cashless/android",children:"pairing procedure"})," if you have not already done so."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.li,{children:"Scan the card when requested by the app."}),"\n",(0,t.jsx)(i.li,{children:"Check that you only have the points of sale associated with the card."}),"\n"]}),"\n",(0,t.jsx)("video",{width:"100%",controls:!0,src:"/img/CartePrimaire.mp4"})]})}function h(e={}){const{wrapper:i}={...(0,n.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,i,r)=>{r.d(i,{R:()=>s,x:()=>o});var t=r(6540);const n={},a=t.createContext(n);function s(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d527cc20.390f55e5.js b/assets/js/d527cc20.390f55e5.js deleted file mode 100644 index 78409eb5..00000000 --- a/assets/js/d527cc20.390f55e5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[6203],{4552:(e,i,r)=>{r.r(i),r.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var t=r(4848),n=r(8453);const a={sidebar_position:2,slug:"admin_add_primary",title:"Primary Cards",description:"Ajouter une ou plusieurs cartes primaires.",keywords:["cashless","android","Primary","Cards"],wiktags:["cashless","android","Primary","Cards"],authors:"Axel"},s=void 0,o={id:"Utilisateur/Cashless/2 CartePrimaire",title:"Primary Cards",description:"Ajouter une ou plusieurs cartes primaires.",source:"@site/docs/Utilisateur/Cashless/2 CartePrimaire.md",sourceDirName:"Utilisateur/Cashless",slug:"/Utilisateur/Cashless/admin_add_primary",permalink:"/docs/Utilisateur/Cashless/admin_add_primary",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/Utilisateur/Cashless/2 CartePrimaire.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"admin_add_primary",title:"Primary Cards",description:"Ajouter une ou plusieurs cartes primaires.",keywords:["cashless","android","Primary","Cards"],wiktags:["cashless","android","Primary","Cards"],authors:"Axel"},sidebar:"tutorialSidebar",previous:{title:"Android application",permalink:"/docs/Utilisateur/Cashless/android"},next:{title:"Points of sale",permalink:"/docs/Utilisateur/Cashless/admin_add_pos"}},l={},d=[{value:"1- Register a new member.",id:"1--register-a-new-member",level:2},{value:"2- Create the primary card.",id:"2--create-the-primary-card",level:2},{value:"3- Test the card at a point of sale",id:"3--test-the-card-at-a-point-of-sale",level:2}];function c(e){const i={a:"a",admonition:"admonition",h2:"h2",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.p,{children:'Primary cards are required to open a point of sale (Android or terminal). They determine the level\nof authorization available to the user: For example, you can authorize access to a "BAR"\npoint of sale without giving access to the "CASHLESS" point of sale which allows recharges.'}),"\n",(0,t.jsx)(i.p,{children:"Always prefer to add named primary cards (linked to a user). This way, you will be able to trace each transaction more precisely.\nThe person responsible for the point of sale is visible in each payment."}),"\n",(0,t.jsx)(i.h2,{id:"1--register-a-new-member",children:"1- Register a new member."}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:'Click on the "Members" category in the left column.'}),"\n",(0,t.jsx)(i.li,{children:'Click on the "Add Member" button at the top right.'}),"\n",(0,t.jsx)(i.li,{children:"Enter the new card number in the corresponding field."}),"\n",(0,t.jsx)(i.li,{children:"Save."}),"\n"]}),"\n",(0,t.jsxs)(i.admonition,{type:"info",children:[(0,t.jsx)(i.mdxAdmonitionTitle,{}),(0,t.jsx)(i.p,{children:"We are talking here about authorization level, not associative membership."})]}),"\n",(0,t.jsx)(i.h2,{id:"2--create-the-primary-card",children:"2- Create the primary card."}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Click on the \u201cPrimary Cards\u201d category in the left menu."}),"\n",(0,t.jsx)(i.li,{children:'Click on the "Add Primary Card" button at the top right.'}),"\n",(0,t.jsx)(i.li,{children:"Enter the card number."}),"\n",(0,t.jsxs)(i.li,{children:["Designate the points of sale controlled (or not) by this card.","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Here you can determine the level of authorization your user has."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["Activate manager mode if you wish.","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"\u201cManager mode\u201d allows you to cancel an order already placed, even if it is paid. It's a superpower that requires great responsibilities :)"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.li,{children:"Save."}),"\n"]}),"\n",(0,t.jsxs)(i.admonition,{type:"info",children:[(0,t.jsx)(i.mdxAdmonitionTitle,{}),(0,t.jsx)(i.p,{children:"A member can have several primary cards provided that they did not enter an email address when creating the member in section 1."})]}),"\n",(0,t.jsx)(i.h2,{id:"3--test-the-card-at-a-point-of-sale",children:"3- Test the card at a point of sale"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Start the TiBillet application on a terminal or smartphone.","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Follow the ",(0,t.jsx)(i.a,{href:"/docs/Utilisateur/Cashless/android",children:"pairing procedure"})," if you have not already done so."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.li,{children:"Scan the card when requested by the app."}),"\n",(0,t.jsx)(i.li,{children:"Check that you only have the points of sale associated with the card."}),"\n"]}),"\n",(0,t.jsx)("video",{width:"100%",controls:!0,src:"/img/CartePrimaire.mp4"})]})}function h(e={}){const{wrapper:i}={...(0,n.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,i,r)=>{r.d(i,{R:()=>s,x:()=>o});var t=r(6540);const n={},a=t.createContext(n);function s(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d6715ccc.30619148.js b/assets/js/d6715ccc.30619148.js deleted file mode 100644 index 0543dc3d..00000000 --- a/assets/js/d6715ccc.30619148.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[9731],{3125:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>a,toc:()=>u});var r=s(4848),o=s(8453);const n={sidebar_position:2,slug:"laboutik",title:"Install LaBoutik",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas, mike"},i=void 0,a={id:"install/Raspberry Box/Software/LaBoutik_soft",title:"Install LaBoutik",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Software/LaBoutik_soft.md",sourceDirName:"install/Raspberry Box/Software",slug:"/install/Raspberry Box/Software/laboutik",permalink:"/docs/install/Raspberry Box/Software/laboutik",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/install/Raspberry Box/Software/LaBoutik_soft.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"laboutik",title:"Install LaBoutik",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Install Raspberry OS",permalink:"/docs/install/Raspberry Box/Software/raspberry_OS"},next:{title:"Hardware",permalink:"/docs/category/hardware"}},l={},u=[{value:"Download and launch the script to install: "LaBoutik" :",id:"download-and-launch-the-script-to-install-laboutik-",level:2},{value:"if you use your own server :",id:"if-you-use-your-own-server-",level:2},{value:"Troubleshooting :",id:"troubleshooting-",level:2},{value:"After "sudo apt-get install git -y" I have return "E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?"",id:"after-sudo-apt-get-install-git--y-i-have-return-e-unable-to-fetch-some-archives-maybe-run-apt-get-update-or-try-with---fix-missing",level:4}];function c(e){const t={blockquote:"blockquote",br:"br",code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"download-and-launch-the-script-to-install-laboutik-",children:'Download and launch the script to install: "LaBoutik" :'}),"\n",(0,r.jsx)(t.p,{children:"Connect to your Pi via ssh :"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{children:"updates the package list\nsudo apt-get update \n\n#install git on your Pi\nsudo apt-get install git -y \n\n#git clone this repro\ngit clone https://github.com/TiBillet/client-raspberry-cashless-LaBoutik \n\n#go to the repositorie\ncd client-raspberry-cashless-LaBoutik \n\n#permit exec\nsudo chmod +x LaBoutik.sh\n"})}),"\n",(0,r.jsx)(t.p,{children:"run the script"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{children:"sudo ./LaBoutik.sh \n"})}),"\n",(0,r.jsx)(t.p,{children:"And take a coffe :) around 20 minutes ."}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.p,{children:"Note: Run the script, without parameters, is for an installation hosted by Tibillet with the default settings.\nIf you have hosted your own server, read more below"}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"if-you-use-your-own-server-",children:"if you use your own server :"}),"\n",(0,r.jsx)(t.p,{children:"Run the script like this"}),"\n",(0,r.jsx)(t.p,{children:"sudo ./LaBoutik.sh nfc_type :: server_pin_code :: nfc_server_port :: nfc_server_address :: nfc_server_version :: front_type :: rotate"}),"\n",(0,r.jsxs)(t.p,{children:["with :",(0,r.jsx)(t.br,{}),"\n","nfc_type : gpio or usb"]}),"\n",(0,r.jsx)(t.p,{children:"server_pin_code : Your pin code server address"}),"\n",(0,r.jsx)(t.p,{children:"nfc_server_port: by default :3000"}),"\n",(0,r.jsxs)(t.p,{children:["nfc_server_address: by default ",":localhost"]}),"\n",(0,r.jsx)(t.p,{children:"nfc_server_version: by default(to day) :2.24.04.11.15.58"}),"\n",(0,r.jsxs)(t.p,{children:["front_type",":for"," raspberry : FPI for laptop: FPO"]}),"\n",(0,r.jsx)(t.p,{children:"rotate: 0 -> Normal , 1 -> 90\xb0, 2 -> 180\xb0, 3 -> 270\xb0"}),"\n",(0,r.jsx)(t.h2,{id:"troubleshooting-",children:"Troubleshooting :"}),"\n",(0,r.jsx)(t.h4,{id:"after-sudo-apt-get-install-git--y-i-have-return-e-unable-to-fetch-some-archives-maybe-run-apt-get-update-or-try-with---fix-missing",children:'After "sudo apt-get install git -y" I have return "E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?"'}),"\n",(0,r.jsx)(t.p,{children:"Make sudo apt-get update and try again"})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>a});var r=s(6540);const o={},n=r.createContext(o);function i(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d6715ccc.c831e321.js b/assets/js/d6715ccc.c831e321.js new file mode 100644 index 00000000..8e4c75b7 --- /dev/null +++ b/assets/js/d6715ccc.c831e321.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[9731],{3125:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var s=r(4848),n=r(8453);const o={sidebar_position:2,slug:"laboutik",title:"Install LaBoutik",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas, mike"},i=void 0,a={id:"install/Raspberry Box/Software/LaBoutik_soft",title:"Install LaBoutik",description:"Construct your own cash and cashless register box.",source:"@site/docs/install/Raspberry Box/Software/LaBoutik_soft.md",sourceDirName:"install/Raspberry Box/Software",slug:"/install/Raspberry Box/Software/laboutik",permalink:"/docs/install/Raspberry Box/Software/laboutik",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/install/Raspberry Box/Software/LaBoutik_soft.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"laboutik",title:"Install LaBoutik",description:"Construct your own cash and cashless register box.",keywords:["cashless","billetterie","ticketing"],wiktags:["cashless","billetterie","ticketing"],authors:"jonas, mike"},sidebar:"tutorialSidebar",previous:{title:"Install Raspberry OS",permalink:"/docs/install/Raspberry Box/Software/raspberry_OS"},next:{title:"Hardware",permalink:"/docs/category/hardware"}},l={},u=[{value:"Download and launch the script to install: "LaBoutik" :",id:"download-and-launch-the-script-to-install-laboutik-",level:2},{value:"if you use your own server :",id:"if-you-use-your-own-server-",level:2},{value:"Troubleshooting :",id:"troubleshooting-",level:2},{value:"After "sudo apt-get install git -y" I have return "E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?"",id:"after-sudo-apt-get-install-git--y-i-have-return-e-unable-to-fetch-some-archives-maybe-run-apt-get-update-or-try-with---fix-missing",level:4}];function c(e){const t={blockquote:"blockquote",br:"br",code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"download-and-launch-the-script-to-install-laboutik-",children:'Download and launch the script to install: "LaBoutik" :'}),"\n",(0,s.jsx)(t.p,{children:"Connect to your Pi via ssh :"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:"updates the package list\nsudo apt-get update \n\n#install git on your Pi\nsudo apt-get install git -y \n\n#git clone this repro\ngit clone https://github.com/TiBillet/client-raspberry-cashless-LaBoutik \n\n#go to the repositorie\ncd client-raspberry-cashless-LaBoutik \n\n#permit exec\nsudo chmod +x LaBoutik.sh\n"})}),"\n",(0,s.jsx)(t.p,{children:"run the script"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:"sudo ./LaBoutik.sh \n"})}),"\n",(0,s.jsx)(t.p,{children:"And take a coffe :) around 20 minutes ."}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Note: Run the script, without parameters, is for an installation hosted by Tibillet with the default settings.\nIf you have hosted your own server, read more below"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"if-you-use-your-own-server-",children:"if you use your own server :"}),"\n",(0,s.jsx)(t.p,{children:"Run the script like this"}),"\n",(0,s.jsx)(t.p,{children:"sudo ./LaBoutik.sh nfc_type :: server_pin_code :: nfc_server_port :: nfc_server_address :: nfc_server_version :: front_type :: rotate"}),"\n",(0,s.jsxs)(t.p,{children:["with :",(0,s.jsx)(t.br,{}),"\n","nfc_type : gpio or usb"]}),"\n",(0,s.jsx)(t.p,{children:"server_pin_code : Your pin code server address"}),"\n",(0,s.jsx)(t.p,{children:"nfc_server_port: by default :3000"}),"\n",(0,s.jsxs)(t.p,{children:["nfc_server_address: by default ",":localhost"]}),"\n",(0,s.jsx)(t.p,{children:"nfc_server_version: by default(to day) :2.24.04.11.15.58"}),"\n",(0,s.jsxs)(t.p,{children:["front_type",":for"," raspberry : FPI for laptop: FPO"]}),"\n",(0,s.jsx)(t.p,{children:"rotate: 0 -> Normal , 1 -> 90\xb0, 2 -> 180\xb0, 3 -> 270\xb0"}),"\n",(0,s.jsx)(t.h2,{id:"troubleshooting-",children:"Troubleshooting :"}),"\n",(0,s.jsx)(t.h4,{id:"after-sudo-apt-get-install-git--y-i-have-return-e-unable-to-fetch-some-archives-maybe-run-apt-get-update-or-try-with---fix-missing",children:'After "sudo apt-get install git -y" I have return "E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?"'}),"\n",(0,s.jsx)(t.p,{children:"Make sudo apt-get update and try again"})]})}function d(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>a});var s=r(6540);const n={},o=s.createContext(n);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fae28bbd.7ae19714.js b/assets/js/fae28bbd.7ae19714.js deleted file mode 100644 index 93dc120d..00000000 --- a/assets/js/fae28bbd.7ae19714.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[9625],{6405:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>t,metadata:()=>o,toc:()=>h});var r=i(4848),n=i(8453);const t={sidebar_position:30,slug:"user-stories",title:"User stories",keywords:["third places","volunteer","admin","customer","bar","festival","organizer","user stories","user persona"],tags:["third places","volunteer","admin","customer","bar","festival","organizer"],authors:"kaya"},a="User stories",o={id:"work-doc/user-stories",title:"User stories",description:"One of the straight-forward ways to define features is through user stories. I'm not gonna make a tutorial about it, go find some!",source:"@site/docs/work-doc/user-stories.md",sourceDirName:"work-doc",slug:"/work-doc/user-stories",permalink:"/docs/work-doc/user-stories",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/docs/work-doc/user-stories.md",tags:[{inline:!0,label:"third places",permalink:"/docs/tags/third-places"},{inline:!0,label:"volunteer",permalink:"/docs/tags/volunteer"},{inline:!0,label:"admin",permalink:"/docs/tags/admin"},{inline:!0,label:"customer",permalink:"/docs/tags/customer"},{inline:!0,label:"bar",permalink:"/docs/tags/bar"},{inline:!0,label:"festival",permalink:"/docs/tags/festival"},{inline:!0,label:"organizer",permalink:"/docs/tags/organizer"}],version:"current",sidebarPosition:30,frontMatter:{sidebar_position:30,slug:"user-stories",title:"User stories",keywords:["third places","volunteer","admin","customer","bar","festival","organizer","user stories","user persona"],tags:["third places","volunteer","admin","customer","bar","festival","organizer"],authors:"kaya"},sidebar:"tutorialSidebar",previous:{title:"Graphic design",permalink:"/docs/work-doc/design"},next:{title:"API",permalink:"/docs/category/api"}},d={},h=[{value:"Who uses TiBillet?",id:"who-uses-tibillet",level:2},{value:"KindCity, a fictional TiBillet federation",id:"kindcity-a-fictional-tibillet-federation",level:2},{value:"Adoni, they/them, event planner for TiSpace",id:"adoni-theythem-event-planner-for-tispace",level:3},{value:"Their stories",id:"their-stories",level:4},{value:"Irene, she/her, accountant and soup lady for PotoPotes",id:"irene-sheher-accountant-and-soup-lady-for-potopotes",level:3},{value:"Her stories",id:"her-stories",level:4},{value:"Hamza, he/him, aspiring rapper",id:"hamza-hehim-aspiring-rapper",level:3},{value:"His stories",id:"his-stories",level:4},{value:"James, he/him, KindCity member",id:"james-hehim-kindcity-member",level:3},{value:"His stories",id:"his-stories-1",level:4},{value:"Samia, she/they, TiSpace usher and KindCity board advisor",id:"samia-shethey-tispace-usher-and-kindcity-board-advisor",level:3},{value:"Their stories",id:"their-stories-1",level:4},{value:"Raphael, he/him, TiSpace bar customer",id:"raphael-hehim-tispace-bar-customer",level:3},{value:"His stories",id:"his-stories-2",level:4},{value:"Godfrey, he/them, TiSpace bartender and KindCity member",id:"godfrey-hethem-tispace-bartender-and-kindcity-member",level:3},{value:"His stories",id:"his-stories-3",level:4},{value:"Cynthia, community elder and KindCity board advisor",id:"cynthia-community-elder-and-kindcity-board-advisor",level:3},{value:"Her stories",id:"her-stories-1",level:4},{value:"Alastair, he/him, artist and performer at TiSpace",id:"alastair-hehim-artist-and-performer-at-tispace",level:3},{value:"His stories",id:"his-stories-4",level:4},{value:"Shane, she/her, resident craftswoman at TiSpace",id:"shane-sheher-resident-craftswoman-at-tispace",level:3},{value:"Her stories",id:"her-stories-2",level:4},{value:"Fezaar, he/them, co-creator of PotoPotes and SoberUp bartender",id:"fezaar-hethem-co-creator-of-potopotes-and-soberup-bartender",level:3},{value:"His stories",id:"his-stories-5",level:4},{value:"Pat, they/them, art curator and KindCity member",id:"pat-theythem-art-curator-and-kindcity-member",level:3},{value:"Their stories",id:"their-stories-2",level:4}];function l(e){const s={a:"a",admonition:"admonition",blockquote:"blockquote",br:"br",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",img:"img",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"user-stories",children:"User stories"})}),"\n",(0,r.jsxs)(s.p,{children:["One of the straight-forward ways to define features is through user stories. I'm not gonna make a tutorial about it, ",(0,r.jsx)(s.a,{href:"https://ddg.gg/?q=user-story+tutorial",children:"go find some"}),"!"]}),"\n",(0,r.jsx)(s.h2,{id:"who-uses-tibillet",children:"Who uses TiBillet?"}),"\n",(0,r.jsx)(s.p,{children:"Different roles use each engine."}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Role"}),(0,r.jsx)(s.th,{children:"Engines"}),(0,r.jsx)(s.th,{children:"Device"}),(0,r.jsx)(s.th,{children:"Requirements"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Cashiers"}),(0,r.jsx)(s.td,{children:"LaBoutik"}),(0,r.jsx)(s.td,{children:"\ud83d\udd22 Register"}),(0,r.jsxs)(s.td,{children:["- hold the LaBoutik register",(0,r.jsx)("br",{}),"- have an understanding of sales, stocks and the LaBoutik register app",(0,r.jsx)("br",{}),"- interact with Buyers, Card Holders and Accountants"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Accountants"}),(0,r.jsx)(s.td,{children:"LaBoutik"}),(0,r.jsx)(s.td,{children:"\ud83d\udcbb Laptop"}),(0,r.jsxs)(s.td,{children:["- survey cash and cashless flow",(0,r.jsx)("br",{}),"- have an understanding of money regulations, budget and LaBoutik transaction history",(0,r.jsx)("br",{}),"- interact with Cashiers, Event Planners and Coordinators"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Buyers"}),(0,r.jsx)(s.td,{children:"LaBoutik"}),(0,r.jsx)(s.td,{children:"\ud83d\udd22 Register"}),(0,r.jsxs)(s.td,{children:["- buy cash articles",(0,r.jsx)("br",{}),"- hear about cashless cards and benefits for volunteers",(0,r.jsx)("br",{}),"- interact with Cashiers"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Card Holders"}),(0,r.jsx)(s.td,{children:"LaBoutik, Lespass"}),(0,r.jsx)(s.td,{children:"\ud83d\udcbb\ud83d\udcf1 Laptop and smartphone"}),(0,r.jsxs)(s.td,{children:["- suscribers, collective members or cashless buyers",(0,r.jsx)("br",{}),"- have an understanding of their cashless wallet, Lespass navigation and events",(0,r.jsx)("br",{}),"- interact with Cashiers and Ushers"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Ushers"}),(0,r.jsx)(s.td,{children:"Lespass"}),(0,r.jsx)(s.td,{children:"\ud83d\udcf1 Smarthphone"}),(0,r.jsxs)(s.td,{children:["- open and check in for events",(0,r.jsx)("br",{}),"- understand Card Holder profiles, Lespass events and bookings",(0,r.jsx)("br",{}),"- interact with Card Holders and Event Planners"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Event Planners"}),(0,r.jsx)(s.td,{children:"Lesspass"}),(0,r.jsx)(s.td,{children:"\ud83d\udcbb Laptop"}),(0,r.jsxs)(s.td,{children:["- organize events plan for use of a specific Lespass space",(0,r.jsx)("br",{}),"- have an understanding or planning, cultural networks, the Lespass calendar and ticket pricing",(0,r.jsx)("br",{}),"- interact with Accountants, Ushers and Coordinators"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Coordinators"}),(0,r.jsx)(s.td,{children:"Fedow"}),(0,r.jsx)(s.td,{children:"\ud83d\udcbb Laptop"}),(0,r.jsxs)(s.td,{children:["- consult with spaces, federations and the general population to reach consensus on what is federated where and how",(0,r.jsx)("br",{}),"- have an understanding of horizontal organizing, mediation, local economics and the Fedow administration",(0,r.jsx)("br",{}),"- interact with Accountants, Event Planners and anyone with a opinion"]})]})]})]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{src:i(496).A+"",width:"922",height:"796"})}),"\n",(0,r.jsx)(s.admonition,{title:"First draft",type:"note",children:(0,r.jsx)(s.p,{children:"This is a first attempt at defining the user roles that TiBillet has to account for. Feel free to correct or add to them, this work document will be better for it!"})}),"\n","\n",(0,r.jsx)(s.h2,{id:"kindcity-a-fictional-tibillet-federation",children:"KindCity, a fictional TiBillet federation"}),"\n",(0,r.jsx)(s.p,{children:"Let's make a few personas based on these roles to keep going. They're using a collaborative, non-hierarchical third place called TiSpace, with a space for play, exhibitions and a bar. Some also work for a soup kitchen called PotoPotes. Together, they form a federation called KindCity."}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Adoni",src:i(1599).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"adoni-theythem-event-planner-for-tispace",children:"Adoni, they/them, event planner for TiSpace"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)(s.p,{children:["Adoni is smart, serious and convinced of their good taste. They ",(0,r.jsx)(s.em,{children:"will"})," make TiSpace into an avant-garde art and performance space."]}),(0,r.jsx)(s.h4,{id:"their-stories",children:"Their stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an even planner,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," access all the events, confirmed and otherwise,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," plan the upcoming cultural season (5 months)."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Adoni,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," promote specific events about TiSpace on social media",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," show off."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a TiSpace admin,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to limit the amount of tickets",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not let the space get too crowded and break regulations."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Irene",src:i(9603).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"irene-sheher-accountant-and-soup-lady-for-potopotes",children:"Irene, she/her, accountant and soup lady for PotoPotes"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Irene is always energetic and very involved in the soup kitchen she cofounded with Fezaar. She wants to expand the federation through her city so more volunteers come help."}),(0,r.jsx)(s.h4,{id:"her-stories",children:"Her stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a soup kitchen cashier,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," easily record the name-your-price soup sales",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," serve people better."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an accountant,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," export the operations into accounting software",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," deal with taxes and declarations."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a volunteer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have a different kind of terminal",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," be able to operate it when I'm wearing food gloves."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Hamza",src:i(9635).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"hamza-hehim-aspiring-rapper",children:"Hamza, he/him, aspiring rapper"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Hamza is the first in his family to speak fluently the language of this place. At 14, he dreams of making his way into the world and taking some of the burden off his parent's back. They all see a social worker at TiSpace on a regular basis (he translates). After hearing a few of his bars, he was invited to perform there by Adoni. His parents accepted with reservations, as he is a minor in a very adult space. They also don't like him working."}),(0,r.jsx)(s.h4,{id:"his-stories",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a rapper,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to get notified of open mic nights",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," perform and get recognition."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Hamza,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to bring my friends and pay soft drinks for them",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," look cool."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a minor,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," the HeartBits on my card to be of usable in shops by my parents",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," help with household expenses."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"James",src:i(9814).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"james-hehim-kindcity-member",children:"James, he/him, KindCity member"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"James lives in a van and volunteers in the federation in exchange for HeartBits, which allows him to afford food and communal showers. He's trying to setup a non-profit local insurance that covers the neighbourhood."}),(0,r.jsx)(s.h4,{id:"his-stories-1",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a card holder,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to read my card at a terminal",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not require a smartphone."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," James,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," see a list of what I can afford",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," next to my account balance."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a volunteer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have a place to speak and ask questions",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," give a voice to my very specific needs."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Samia",src:i(3657).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"samia-shethey-tispace-usher-and-kindcity-board-advisor",children:"Samia, she/they, TiSpace usher and KindCity board advisor"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Working part-time at a supermarket, Samia is an avid music fan, always volunteering for concerts to happen. She also dreams of organizing a music festival in the city and joined the KindCity board for that purpose."}),(0,r.jsx)(s.h4,{id:"their-stories-1",children:"Their stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an usher,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have access to the bookings",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," help people who lost their ticket."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a coordinator,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," see where HeartBits are circulating and where they're stagnating",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," improve our presence in the city."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Samia,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," reminders about my favorite artists",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," volunteer when they get announced."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Raphael",src:i(4629).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"raphael-hehim-tispace-bar-customer",children:"Raphael, he/him, TiSpace bar customer"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)(s.p,{children:["Raphael just likes the vibe at TiSpace. He goes on dates there ",(0,r.jsx)(s.em,{children:"a lot"}),". To him, TiBillet is a nice initiative, he just hasn't felt curious enough to go to a show or pay his tab in HeartBits."]}),(0,r.jsx)(s.p,{children:"Also, it's money, you know? You don't play with money."}),(0,r.jsx)(s.h4,{id:"his-stories-2",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a customer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," the cash register to work just as well as a regular one",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not be discouraged by new fancy tech."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a someone who dates a lot,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to split the bill however I see fit",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," avoid an embarassing moment at the table."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Raphael,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to have my HeartBits refunded",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," feel safe."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Godfrey",src:i(3698).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"godfrey-hethem-tispace-bartender-and-kindcity-member",children:"Godfrey, he/them, TiSpace bartender and KindCity member"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Godfrey's own community bar had its non-profit lease taken away when their neighboorhood gentrified. He invested himself in the new TiSpace project because its stability doesn't relies on public funding and the political whims of the city council. Having burned out, they've taken a step back from the organizing and are happy getting their needs met through \"volunteer\" bartending in exchange for HeartBits."}),(0,r.jsx)(s.h4,{id:"his-stories-3",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a volunteer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to have a lot of organizational freedom",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not feel exploited."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Godfrey,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have insight into of the decisions of the KindCity board",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," trust them."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a card holder,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to rely on KindCity's backing",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," make significant purchases I can't afford on HeartBits."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Cynthia",src:i(7166).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"cynthia-community-elder-and-kindcity-board-advisor",children:"Cynthia, community elder and KindCity board advisor"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:'Cynthia has lived in the neighboorhood for fifty years. Young people might not always want her advice, but she\'s gonna give it! Her hope is to revitalize the streets, small shops and former "village" vibe.'}),(0,r.jsx)(s.h4,{id:"her-stories-1",children:"Her stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a coordinator,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to send invites to federation members",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," check in and discuss points of order."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a community elder,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," the will of my community to have weight in KindCity",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," believe in its mission."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Cynthia,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," be able to hold federation events",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," feel togetherness."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Alastair",src:i(95).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"alastair-hehim-artist-and-performer-at-tispace",children:"Alastair, he/him, artist and performer at TiSpace"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Alastair has a vision, and a bigger-than-life attitude. Whether he's displaying his lastest chainsaw sculptures or performing as Mimi Zandry, he's giving it his all. He wants to encourage the federation's growth by accepting HeartBits for his performances and some of his art."}),(0,r.jsx)(s.h4,{id:"his-stories-4",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a featured artist,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to show my pieces up for sale to people with HeartBits",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," sell them."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Alastair,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to operate my own Lespass and Laboutik from my smartphone",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," get tips and manage my sales."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a performer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," be able to update my TiSpace events",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not let my voice get diluted by institution."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Shane",src:i(9435).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"shane-sheher-resident-craftswoman-at-tispace",children:"Shane, she/her, resident craftswoman at TiSpace"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:'After spending her twenties in sales, Shane left it all behind in order to pursue jewelry crafting. She has a little stall in the TiSpace courtyard, and an "arrangement" with the other members where she can drink on a tab as long as she makes it back in sales.'}),(0,r.jsx)(s.h4,{id:"her-stories-2",children:"Her stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," resident,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have a tab",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," have more freedom with my income."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an craftswoman,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," my jewelry to be claimed online but only paid on physical hand-off",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not have to deal with deliveries."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Shane,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"}),' to be able to ask for a minimum ratio of "real money" from my buyers',(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," help with rent."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Fezaar",src:i(2309).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"fezaar-hethem-co-creator-of-potopotes-and-soberup-bartender",children:"Fezaar, he/them, co-creator of PotoPotes and SoberUp bartender"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Fezaar co-created PotoPotes but doesn't manage it anymore. They have instead invested their time in the TiSpace bar. As a recovered alcoholic, he understands the importance of sober-friendly spaces in his community and hold SoberUp, a mocktail bar, half of every week."}),(0,r.jsx)(s.h4,{id:"his-stories-5",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a part of a vulnerable community,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to voice my concerns and needs",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," be safe in the federation spaces."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a former alcoholic,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to know in advance which events and going to be alcohol-free",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not show up at the wrong time."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a bartender,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," be able to signal misbehaving members",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," compare notes and have discussions with them / about them before incidents happen."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Pat",src:i(329).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"pat-theythem-art-curator-and-kindcity-member",children:"Pat, they/them, art curator and KindCity member"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Pat loooves the indie scene. They don't tend to go out much as they get really sick in crowds and have a ton of allergies. They turned an inherited sandwich shop into a gallery and they're hoping to find upcoming artists to exhibit there."}),(0,r.jsx)(s.h4,{id:"their-stories-2",children:"Their stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," someone fragile,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to find detailed info on events",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not get sick in public."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an art curator,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," a list of past events and exhibits",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," see what I missed."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Pat,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be reminded of the exhibitions that interest me",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," attend them."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"https://getavataaars.com",children:"Random avatars"})," curtesy of Pablo Stanley & Fang-Pen Lin."]})]})}function c(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1599:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/adoni-6b8dcd6f75302efb4fcd30d9eaa1cddf.png"},95:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/alastair-4a1880accda1db5bfbd24552e795fb5f.png"},7166:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/cynthia-5bd6cd9574158750428df2c469af4d48.png"},2309:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/fezaar-6dbd4759ec70e0657fcb4e41560bbba2.png"},3698:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/godfrey-e1f01ae26fd1e8da13500b2bce0465b5.png"},9635:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/hamza-212448d08fb23e89a1f85864090c59f0.png"},9603:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/irene-5b6654584fee7e19fe0acff406a87a80.png"},9814:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/james-a0678997ec9ccf55d8e0f91f9efd4115.png"},329:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/pat-0c67d5a2eaf6c8c4a5e052d6dc3d2744.png"},4629:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/raphael-c7ecb3a47f24db46bcf3c313ed8f3bc6.png"},3657:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/samia-4c0f0cd14d98828936309d980c4839de.png"},9435:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/shane-4b43b9843b507bcfa937207be554e999.png"},496:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/roles-diagram-86d20617d8a2c263df8066d515fe182d.png"},8453:(e,s,i)=>{i.d(s,{R:()=>a,x:()=>o});var r=i(6540);const n={},t=r.createContext(n);function a(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fae28bbd.dea8ee04.js b/assets/js/fae28bbd.dea8ee04.js new file mode 100644 index 00000000..00a7c915 --- /dev/null +++ b/assets/js/fae28bbd.dea8ee04.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[9625],{6405:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>t,metadata:()=>o,toc:()=>h});var r=i(4848),n=i(8453);const t={sidebar_position:30,slug:"user-stories",title:"User stories",keywords:["third places","volunteer","admin","customer","bar","festival","organizer","user stories","user persona"],tags:["third places","volunteer","admin","customer","bar","festival","organizer"],authors:"kaya"},a="User stories",o={id:"work-doc/user-stories",title:"User stories",description:"One of the straight-forward ways to define features is through user stories. I'm not gonna make a tutorial about it, go find some!",source:"@site/docs/work-doc/user-stories.md",sourceDirName:"work-doc",slug:"/work-doc/user-stories",permalink:"/docs/work-doc/user-stories",draft:!1,unlisted:!1,editUrl:"https://github.com/TiBillet/documentation_v2/tree/main/docs/work-doc/user-stories.md",tags:[{inline:!0,label:"third places",permalink:"/docs/tags/third-places"},{inline:!0,label:"volunteer",permalink:"/docs/tags/volunteer"},{inline:!0,label:"admin",permalink:"/docs/tags/admin"},{inline:!0,label:"customer",permalink:"/docs/tags/customer"},{inline:!0,label:"bar",permalink:"/docs/tags/bar"},{inline:!0,label:"festival",permalink:"/docs/tags/festival"},{inline:!0,label:"organizer",permalink:"/docs/tags/organizer"}],version:"current",sidebarPosition:30,frontMatter:{sidebar_position:30,slug:"user-stories",title:"User stories",keywords:["third places","volunteer","admin","customer","bar","festival","organizer","user stories","user persona"],tags:["third places","volunteer","admin","customer","bar","festival","organizer"],authors:"kaya"},sidebar:"tutorialSidebar",previous:{title:"Graphic design",permalink:"/docs/work-doc/design"},next:{title:"API",permalink:"/docs/category/api"}},d={},h=[{value:"Who uses TiBillet?",id:"who-uses-tibillet",level:2},{value:"KindCity, a fictional TiBillet federation",id:"kindcity-a-fictional-tibillet-federation",level:2},{value:"Adoni, they/them, event planner for TiSpace",id:"adoni-theythem-event-planner-for-tispace",level:3},{value:"Their stories",id:"their-stories",level:4},{value:"Irene, she/her, accountant and soup lady for PotoPotes",id:"irene-sheher-accountant-and-soup-lady-for-potopotes",level:3},{value:"Her stories",id:"her-stories",level:4},{value:"Hamza, he/him, aspiring rapper",id:"hamza-hehim-aspiring-rapper",level:3},{value:"His stories",id:"his-stories",level:4},{value:"James, he/him, KindCity member",id:"james-hehim-kindcity-member",level:3},{value:"His stories",id:"his-stories-1",level:4},{value:"Samia, she/they, TiSpace usher and KindCity board advisor",id:"samia-shethey-tispace-usher-and-kindcity-board-advisor",level:3},{value:"Their stories",id:"their-stories-1",level:4},{value:"Raphael, he/him, TiSpace bar customer",id:"raphael-hehim-tispace-bar-customer",level:3},{value:"His stories",id:"his-stories-2",level:4},{value:"Godfrey, he/them, TiSpace bartender and KindCity member",id:"godfrey-hethem-tispace-bartender-and-kindcity-member",level:3},{value:"His stories",id:"his-stories-3",level:4},{value:"Cynthia, community elder and KindCity board advisor",id:"cynthia-community-elder-and-kindcity-board-advisor",level:3},{value:"Her stories",id:"her-stories-1",level:4},{value:"Alastair, he/him, artist and performer at TiSpace",id:"alastair-hehim-artist-and-performer-at-tispace",level:3},{value:"His stories",id:"his-stories-4",level:4},{value:"Shane, she/her, resident craftswoman at TiSpace",id:"shane-sheher-resident-craftswoman-at-tispace",level:3},{value:"Her stories",id:"her-stories-2",level:4},{value:"Fezaar, he/them, co-creator of PotoPotes and SoberUp bartender",id:"fezaar-hethem-co-creator-of-potopotes-and-soberup-bartender",level:3},{value:"His stories",id:"his-stories-5",level:4},{value:"Pat, they/them, art curator and KindCity member",id:"pat-theythem-art-curator-and-kindcity-member",level:3},{value:"Their stories",id:"their-stories-2",level:4}];function l(e){const s={a:"a",admonition:"admonition",blockquote:"blockquote",br:"br",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",img:"img",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"user-stories",children:"User stories"})}),"\n",(0,r.jsxs)(s.p,{children:["One of the straight-forward ways to define features is through user stories. I'm not gonna make a tutorial about it, ",(0,r.jsx)(s.a,{href:"https://ddg.gg/?q=user-story+tutorial",children:"go find some"}),"!"]}),"\n",(0,r.jsx)(s.h2,{id:"who-uses-tibillet",children:"Who uses TiBillet?"}),"\n",(0,r.jsx)(s.p,{children:"Different roles use each engine."}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Role"}),(0,r.jsx)(s.th,{children:"Engines"}),(0,r.jsx)(s.th,{children:"Device"}),(0,r.jsx)(s.th,{children:"Requirements"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Cashiers"}),(0,r.jsx)(s.td,{children:"LaBoutik"}),(0,r.jsx)(s.td,{children:"\ud83d\udd22 Register"}),(0,r.jsxs)(s.td,{children:["- hold the LaBoutik register",(0,r.jsx)("br",{}),"- have an understanding of sales, stocks and the LaBoutik register app",(0,r.jsx)("br",{}),"- interact with Buyers, Card Holders and Accountants"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Accountants"}),(0,r.jsx)(s.td,{children:"LaBoutik"}),(0,r.jsx)(s.td,{children:"\ud83d\udcbb Laptop"}),(0,r.jsxs)(s.td,{children:["- survey cash and cashless flow",(0,r.jsx)("br",{}),"- have an understanding of money regulations, budget and LaBoutik transaction history",(0,r.jsx)("br",{}),"- interact with Cashiers, Event Planners and Coordinators"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Buyers"}),(0,r.jsx)(s.td,{children:"LaBoutik"}),(0,r.jsx)(s.td,{children:"\ud83d\udd22 Register"}),(0,r.jsxs)(s.td,{children:["- buy cash articles",(0,r.jsx)("br",{}),"- hear about cashless cards and benefits for volunteers",(0,r.jsx)("br",{}),"- interact with Cashiers"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Card Holders"}),(0,r.jsx)(s.td,{children:"LaBoutik, Lespass"}),(0,r.jsx)(s.td,{children:"\ud83d\udcbb\ud83d\udcf1 Laptop and smartphone"}),(0,r.jsxs)(s.td,{children:["- suscribers, collective members or cashless buyers",(0,r.jsx)("br",{}),"- have an understanding of their cashless wallet, Lespass navigation and events",(0,r.jsx)("br",{}),"- interact with Cashiers and Ushers"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Ushers"}),(0,r.jsx)(s.td,{children:"Lespass"}),(0,r.jsx)(s.td,{children:"\ud83d\udcf1 Smarthphone"}),(0,r.jsxs)(s.td,{children:["- open and check in for events",(0,r.jsx)("br",{}),"- understand Card Holder profiles, Lespass events and bookings",(0,r.jsx)("br",{}),"- interact with Card Holders and Event Planners"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Event Planners"}),(0,r.jsx)(s.td,{children:"Lesspass"}),(0,r.jsx)(s.td,{children:"\ud83d\udcbb Laptop"}),(0,r.jsxs)(s.td,{children:["- organize events plan for use of a specific Lespass space",(0,r.jsx)("br",{}),"- have an understanding or planning, cultural networks, the Lespass calendar and ticket pricing",(0,r.jsx)("br",{}),"- interact with Accountants, Ushers and Coordinators"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Coordinators"}),(0,r.jsx)(s.td,{children:"Fedow"}),(0,r.jsx)(s.td,{children:"\ud83d\udcbb Laptop"}),(0,r.jsxs)(s.td,{children:["- consult with spaces, federations and the general population to reach consensus on what is federated where and how",(0,r.jsx)("br",{}),"- have an understanding of horizontal organizing, mediation, local economics and the Fedow administration",(0,r.jsx)("br",{}),"- interact with Accountants, Event Planners and anyone with a opinion"]})]})]})]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{src:i(496).A+"",width:"922",height:"796"})}),"\n",(0,r.jsx)(s.admonition,{title:"First draft",type:"note",children:(0,r.jsx)(s.p,{children:"This is a first attempt at defining the user roles that TiBillet has to account for. Feel free to correct or add to them, this work document will be better for it!"})}),"\n","\n",(0,r.jsx)(s.h2,{id:"kindcity-a-fictional-tibillet-federation",children:"KindCity, a fictional TiBillet federation"}),"\n",(0,r.jsx)(s.p,{children:"Let's make a few personas based on these roles to keep going. They're using a collaborative, non-hierarchical third place called TiSpace, with a space for play, exhibitions and a bar. Some also work for a soup kitchen called PotoPotes. Together, they form a federation called KindCity."}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Adoni",src:i(1599).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"adoni-theythem-event-planner-for-tispace",children:"Adoni, they/them, event planner for TiSpace"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)(s.p,{children:["Adoni is smart, serious and convinced of their good taste. They ",(0,r.jsx)(s.em,{children:"will"})," make TiSpace into an avant-garde art and performance space."]}),(0,r.jsx)(s.h4,{id:"their-stories",children:"Their stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an even planner,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," access all the events, confirmed and otherwise,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," plan the upcoming cultural season (5 months)."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Adoni,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," promote specific events about TiSpace on social media",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," show off."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a TiSpace admin,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to limit the amount of tickets",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not let the space get too crowded and break regulations."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Irene",src:i(9603).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"irene-sheher-accountant-and-soup-lady-for-potopotes",children:"Irene, she/her, accountant and soup lady for PotoPotes"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Irene is always energetic and very involved in the soup kitchen she cofounded with Fezaar. She wants to expand the federation through her city so more volunteers come help."}),(0,r.jsx)(s.h4,{id:"her-stories",children:"Her stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a soup kitchen cashier,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," easily record the name-your-price soup sales",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," serve people better."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an accountant,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," export the operations into accounting software",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," deal with taxes and declarations."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a volunteer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have a different kind of terminal",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," be able to operate it when I'm wearing food gloves."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Hamza",src:i(9635).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"hamza-hehim-aspiring-rapper",children:"Hamza, he/him, aspiring rapper"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Hamza is the first in his family to speak fluently the language of this place. At 14, he dreams of making his way into the world and taking some of the burden off his parent's back. They all see a social worker at TiSpace on a regular basis (he translates). After hearing a few of his bars, he was invited to perform there by Adoni. His parents accepted with reservations, as he is a minor in a very adult space. They also don't like him working."}),(0,r.jsx)(s.h4,{id:"his-stories",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a rapper,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to get notified of open mic nights",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," perform and get recognition."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Hamza,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to bring my friends and pay soft drinks for them",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," look cool."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a minor,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," the HeartBits on my card to be of usable in shops by my parents",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," help with household expenses."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"James",src:i(9814).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"james-hehim-kindcity-member",children:"James, he/him, KindCity member"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"James lives in a van and volunteers in the federation in exchange for HeartBits, which allows him to afford food and communal showers. He's trying to setup a non-profit local insurance that covers the neighbourhood."}),(0,r.jsx)(s.h4,{id:"his-stories-1",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a card holder,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to read my card at a terminal",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not require a smartphone."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," James,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," see a list of what I can afford",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," next to my account balance."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a volunteer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have a place to speak and ask questions",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," give a voice to my very specific needs."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Samia",src:i(3657).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"samia-shethey-tispace-usher-and-kindcity-board-advisor",children:"Samia, she/they, TiSpace usher and KindCity board advisor"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Working part-time at a supermarket, Samia is an avid music fan, always volunteering for concerts to happen. She also dreams of organizing a music festival in the city and joined the KindCity board for that purpose."}),(0,r.jsx)(s.h4,{id:"their-stories-1",children:"Their stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an usher,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have access to the bookings",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," help people who lost their ticket."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a coordinator,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," see where HeartBits are circulating and where they're stagnating",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," improve our presence in the city."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Samia,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," reminders about my favorite artists",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," volunteer when they get announced."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Raphael",src:i(4629).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"raphael-hehim-tispace-bar-customer",children:"Raphael, he/him, TiSpace bar customer"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)(s.p,{children:["Raphael just likes the vibe at TiSpace. He goes on dates there ",(0,r.jsx)(s.em,{children:"a lot"}),". To him, TiBillet is a nice initiative, he just hasn't felt curious enough to go to a show or pay his tab in HeartBits."]}),(0,r.jsx)(s.p,{children:"Also, it's money, you know? You don't play with money."}),(0,r.jsx)(s.h4,{id:"his-stories-2",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a customer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," the cash register to work just as well as a regular one",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not be discouraged by new fancy tech."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a someone who dates a lot,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to split the bill however I see fit",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," avoid an embarassing moment at the table."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Raphael,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to have my HeartBits refunded",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," feel safe."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Godfrey",src:i(3698).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"godfrey-hethem-tispace-bartender-and-kindcity-member",children:"Godfrey, he/them, TiSpace bartender and KindCity member"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Godfrey's own community bar had its non-profit lease taken away when their neighboorhood gentrified. He invested himself in the new TiSpace project because its stability doesn't relies on public funding and the political whims of the city council. Having burned out, they've taken a step back from the organizing and are happy getting their needs met through \"volunteer\" bartending in exchange for HeartBits."}),(0,r.jsx)(s.h4,{id:"his-stories-3",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a volunteer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to have a lot of organizational freedom",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not feel exploited."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Godfrey,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have insight into of the decisions of the KindCity board",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," trust them."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a card holder,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," be able to rely on KindCity's backing",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," make significant purchases I can't afford on HeartBits."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Cynthia",src:i(7166).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"cynthia-community-elder-and-kindcity-board-advisor",children:"Cynthia, community elder and KindCity board advisor"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:'Cynthia has lived in the neighboorhood for fifty years. Young people might not always want her advice, but she\'s gonna give it! Her hope is to revitalize the streets, small shops and former "village" vibe.'}),(0,r.jsx)(s.h4,{id:"her-stories-1",children:"Her stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a coordinator,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to send invites to federation members",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," check in and discuss points of order."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a community elder,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," the will of my community to have weight in KindCity",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," believe in its mission."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Cynthia,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," be able to hold federation events",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," feel togetherness."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Alastair",src:i(95).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"alastair-hehim-artist-and-performer-at-tispace",children:"Alastair, he/him, artist and performer at TiSpace"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Alastair has a vision, and a bigger-than-life attitude. Whether he's displaying his lastest chainsaw sculptures or performing as Mimi Zandry, he's giving it his all. He wants to encourage the federation's growth by accepting HeartBits for his performances and some of his art."}),(0,r.jsx)(s.h4,{id:"his-stories-4",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a featured artist,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to show my pieces up for sale to people with HeartBits",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," sell them."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Alastair,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to operate my own Lespass and Laboutik from my smartphone",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," get tips and manage my sales."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a performer,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," be able to update my TiSpace events",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not let my voice get diluted by institution."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Shane",src:i(9435).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"shane-sheher-resident-craftswoman-at-tispace",children:"Shane, she/her, resident craftswoman at TiSpace"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:'After spending her twenties in sales, Shane left it all behind in order to pursue jewelry crafting. She has a little stall in the TiSpace courtyard, and an "arrangement" with the other members where she can drink on a tab as long as she makes it back in sales.'}),(0,r.jsx)(s.h4,{id:"her-stories-2",children:"Her stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," resident,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want to"})," have a tab",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," have more freedom with my income."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an craftswoman,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," my jewelry to be claimed online but only paid on physical hand-off",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not have to deal with deliveries."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Shane,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"}),' to be able to ask for a minimum ratio of "real money" from my buyers',(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," help with rent."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Fezaar",src:i(2309).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"fezaar-hethem-co-creator-of-potopotes-and-soberup-bartender",children:"Fezaar, he/them, co-creator of PotoPotes and SoberUp bartender"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Fezaar co-created PotoPotes but doesn't manage it anymore. They have instead invested their time in the TiSpace bar. As a recovered alcoholic, he understands the importance of sober-friendly spaces in his community and hold SoberUp, a mocktail bar, half of every week."}),(0,r.jsx)(s.h4,{id:"his-stories-5",children:"His stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a part of a vulnerable community,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to voice my concerns and needs",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," be safe in the federation spaces."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a former alcoholic,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to know in advance which events and going to be alcohol-free",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not show up at the wrong time."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," a bartender,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," be able to signal misbehaving members",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," compare notes and have discussions with them / about them before incidents happen."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)("article",{style:{display:"flex"},children:[(0,r.jsxs)("figure",{style:{width:"18rem"},children:[(0,r.jsx)("div",{style:{height:"16rem",width:"15rem",marginBottom:"1rem"},children:(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Pat",src:i(329).A+"",width:"528",height:"560"})})}),(0,r.jsx)("figcaption",{children:(0,r.jsx)(s.h3,{id:"pat-theythem-art-curator-and-kindcity-member",children:"Pat, they/them, art curator and KindCity member"})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(s.p,{children:"Pat loooves the indie scene. They don't tend to go out much as they get really sick in crowds and have a ton of allergies. They turned an inherited sandwich shop into a gallery and they're hoping to find upcoming artists to exhibit there."}),(0,r.jsx)(s.h4,{id:"their-stories-2",children:"Their stories"}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," someone fragile,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be able to find detailed info on events",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," not get sick in public."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," an art curator,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," a list of past events and exhibits",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," see what I missed."]}),"\n"]}),(0,r.jsxs)(s.blockquote,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"As"})," Pat,",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"I want"})," to be reminded of the exhibitions that interest me",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.em,{children:"in order to"})," attend them."]}),"\n"]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"https://getavataaars.com",children:"Random avatars"})," curtesy of Pablo Stanley & Fang-Pen Lin."]})]})}function c(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1599:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/adoni-6b8dcd6f75302efb4fcd30d9eaa1cddf.png"},95:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/alastair-4a1880accda1db5bfbd24552e795fb5f.png"},7166:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/cynthia-5bd6cd9574158750428df2c469af4d48.png"},2309:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/fezaar-6dbd4759ec70e0657fcb4e41560bbba2.png"},3698:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/godfrey-e1f01ae26fd1e8da13500b2bce0465b5.png"},9635:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/hamza-212448d08fb23e89a1f85864090c59f0.png"},9603:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/irene-5b6654584fee7e19fe0acff406a87a80.png"},9814:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/james-a0678997ec9ccf55d8e0f91f9efd4115.png"},329:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/pat-0c67d5a2eaf6c8c4a5e052d6dc3d2744.png"},4629:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/raphael-c7ecb3a47f24db46bcf3c313ed8f3bc6.png"},3657:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/samia-4c0f0cd14d98828936309d980c4839de.png"},9435:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/shane-4b43b9843b507bcfa937207be554e999.png"},496:(e,s,i)=>{i.d(s,{A:()=>r});const r=i.p+"assets/images/roles-diagram-86d20617d8a2c263df8066d515fe182d.png"},8453:(e,s,i)=>{i.d(s,{R:()=>a,x:()=>o});var r=i(6540);const n={},t=r.createContext(n);function a(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.75c81d86.js b/assets/js/main.6d295b13.js similarity index 74% rename from assets/js/main.75c81d86.js rename to assets/js/main.6d295b13.js index 4289bcbf..5922dd87 100644 --- a/assets/js/main.75c81d86.js +++ b/assets/js/main.6d295b13.js @@ -1,2 +1,2 @@ -/*! For license information please see main.75c81d86.js.LICENSE.txt */ -(self.webpackChunkdocumentation_v_2=self.webpackChunkdocumentation_v_2||[]).push([[8792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),a=n.n(r),o=n(4054);const i={"02c41862":[()=>n.e(9863).then(n.t.bind(n,5859,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-cooperative-fc7.json",5859],"0392a4a7":[()=>n.e(1302).then(n.t.bind(n,5351,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-local-currencies-549.json",5351],"0492922a":[()=>n.e(8180).then(n.t.bind(n,2788,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-cashback-464.json",2788],"07b63270":[()=>n.e(9498).then(n.t.bind(n,8958,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-django-070.json",8958],"0a1333cb":[()=>n.e(8255).then(n.t.bind(n,5559,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-tdd-874.json",5559],"0efb64b9":[()=>n.e(5875).then(n.bind(n,9528)),"@site/docs/Utilisateur/Cashless/200 Cashback.md",9528],"101b6b4f":[()=>n.e(4859).then(n.t.bind(n,6281,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-island-4e9.json",6281],"10e5cebe":[()=>n.e(269).then(n.t.bind(n,7150,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-hardware-08e.json",7150],"10eb5702":[()=>n.e(4967).then(n.t.bind(n,9366,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-software-91d.json",9366],11632215:[()=>n.e(1938).then(n.bind(n,9182)),"@site/docs/Utilisateur/Billetterie/40 webhook.md",9182],"11b43341":[()=>n.e(2256).then(n.t.bind(n,7674,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-7fc.json",7674],"14eb3368":[()=>Promise.all([n.e(1869),n.e(6969)]).then(n.bind(n,4136)),"@theme/DocCategoryGeneratedIndexPage",4136],"1623311b":[()=>n.e(5418).then(n.bind(n,3749)),"@site/docs/Utilisateur/Cashless/12 PointVente.md",3749],17896441:[()=>Promise.all([n.e(1869),n.e(6255),n.e(8401)]).then(n.bind(n,7838)),"@theme/DocItem",7838],"1eec3456":[()=>n.e(7293).then(n.bind(n,3122)),"@site/docs/Utilisateur/Billetterie/70 event gratuit.md",3122],"1f391b9e":[()=>Promise.all([n.e(1869),n.e(6255),n.e(6061)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],"27da2698":[()=>n.e(472).then(n.t.bind(n,9138,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-card-204.json",9138],"285ac952":[()=>n.e(6590).then(n.t.bind(n,1151,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-associations-95a.json",1151],"2c241401":[()=>n.e(6330).then(n.t.bind(n,6207,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-caisse-enregistreuse-b32.json",6207],"2c5a8c25":[()=>n.e(4280).then(n.t.bind(n,8294,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-poetry-66c.json",8294],"2c890d29":[()=>n.e(4384).then(n.t.bind(n,7213,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-contribute-6b8.json",7213],"2d9a2f91":[()=>n.e(8657).then(n.t.bind(n,9892,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-monnaies-locales-147.json",9892],"2e4a270e":[()=>n.e(853).then(n.bind(n,3342)),"@site/docs/Utilisateur/Cashless/30 SuppCommande.md",3342],"2e7de751":[()=>n.e(8503).then(n.t.bind(n,1393,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-api-e70.json",1393],"2f43816e":[()=>n.e(8214).then(n.t.bind(n,2785,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-contributing-f0f.json",2785],"321184fb":[()=>n.e(8678).then(n.bind(n,5749)),"@site/docs/presentation/usage.md",5749],"36c171c8":[()=>n.e(9393).then(n.t.bind(n,275,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-e14.json",275],"3720c009":[()=>Promise.all([n.e(1869),n.e(4787)]).then(n.bind(n,876)),"@theme/DocTagsListPage",876],"3c048722":[()=>n.e(7734).then(n.bind(n,7601)),"@site/docs/install/Raspberry Box/Hardware/03_wiring.md",7601],"3c33afe8":[()=>n.e(9565).then(n.t.bind(n,3547,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-colors-656.json",3547],"3da2692a":[()=>n.e(795).then(n.t.bind(n,5754,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-stripe-564.json",5754],"3dd44a97":[()=>Promise.all([n.e(1869),n.e(7679)]).then(n.bind(n,2143)),"@site/docs/api/02 Apikey.md",2143],"3ddc391e":[()=>n.e(8019).then(n.t.bind(n,752,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-prise-de-commandes-3e7.json",752],"3e8c9b6f":[()=>n.e(381).then(n.t.bind(n,824,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-arts-eb7.json",824],"3f20655a":[()=>n.e(8703).then(n.bind(n,7374)),"@site/docs/install/server_install.md",7374],"3fd7c400":[()=>n.e(6142).then(n.bind(n,4716)),"@site/docs/Utilisateur/Billetterie/60 creation event.md",4716],"441e967c":[()=>n.e(8438).then(n.t.bind(n,7486,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-admin-7a7.json",7486],"495e69cb":[()=>n.e(3648).then(n.t.bind(n,8696,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-diy-7cc.json",8696],"4ee12e50":[()=>n.e(9720).then(n.t.bind(n,2345,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-billetterie-37f.json",2345],"512b8e12":[()=>n.e(6557).then(n.bind(n,3982)),"@site/docs/Utilisateur/Cashless/150 Badgeuse.md",3982],"527523d7":[()=>n.e(5808).then(n.t.bind(n,5849,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-trucs-et-astuces-903.json",5849],"52efbe89":[()=>n.e(7537).then(n.t.bind(n,4286,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-cashless-4d3.json",4286],"54bc6b6f":[()=>n.e(3189).then(n.t.bind(n,5721,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-paiement-dematerialise-2ec.json",5721],"57b2c8d2":[()=>Promise.all([n.e(1869),n.e(6604)]).then(n.bind(n,2193)),"@site/docs/api/10 Event.md",2193],"59008b8e":[()=>n.e(3622).then(n.t.bind(n,2451,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-modern-886.json",2451],"5e95c892":[()=>n.e(9647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"64e6a03e":[()=>n.e(5075).then(n.t.bind(n,9950,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-third-places-07a.json",9950],"659fa473":[()=>n.e(2560).then(n.t.bind(n,1267,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-fidelity-9bf.json",1267],"6a4065f0":[()=>n.e(4285).then(n.t.bind(n,6045,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-git-741.json",6045],"6da2f242":[()=>n.e(4222).then(n.t.bind(n,5868,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-free-software-178.json",5868],"726c8938":[()=>n.e(2045).then(n.t.bind(n,849,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-cashless-d61.json",849],"731a8187":[()=>n.e(2365).then(n.bind(n,6931)),"@site/docs/presentation/eco.md",6931],"737faae9":[()=>n.e(9846).then(n.t.bind(n,7758,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-bar-b65.json",7758],"7424cbe5":[()=>n.e(9833).then(n.bind(n,6875)),"@site/docs/install/Raspberry Box/Hardware/05_10inch.md",6875],"74b3184d":[()=>n.e(7972).then(n.bind(n,977)),"@site/docs/Utilisateur/Cashless/20 Articles.md",977],"79300ddd":[()=>n.e(4078).then(n.bind(n,3834)),"@site/docs/Utilisateur/Billetterie/41 Int\xe9gration.md",3834],"7e0acfec":[()=>n.e(4713).then(n.t.bind(n,2519,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-docker-a0b.json",2519],"7ec4066a":[()=>n.e(7967).then(n.bind(n,4774)),"@site/docs/Utilisateur/Cashless/15 Categories.md",4774],"7f42cc60":[()=>n.e(2074).then(n.bind(n,5748)),"@site/docs/api/03 Tenants.md",5748],"86b2e310":[()=>n.e(8198).then(n.bind(n,1795)),"@site/docs/Utilisateur/Cashless/160 Fidelity.md",1795],"8c76d684":[()=>n.e(4825).then(n.t.bind(n,5461,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-badge-inter-lieux-77c.json",5461],"8daeed5c":[()=>n.e(26).then(n.bind(n,5647)),"@site/docs/api/05 Products.md",5647],"927f7f94":[()=>n.e(1329).then(n.bind(n,9878)),"@site/docs/contribute/dev.md",9878],"9623fc80":[()=>n.e(1722).then(n.t.bind(n,3814,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-volunteer-6c7.json",3814],"9812aca5":[()=>n.e(4171).then(n.bind(n,7982)),"@site/docs/Tips/facebook.md",7982],"9830a4d3":[()=>n.e(7761).then(n.bind(n,341)),"@site/docs/work-doc/design.md",341],"9a4c38d3":[()=>n.e(5072).then(n.bind(n,9771)),"@site/docs/presentation/07-Demonstration.md",9771],"9b32cf81":[()=>n.e(7527).then(n.t.bind(n,8669,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-cash-register-2ce.json",8669],"9b9953c6":[()=>n.e(3347).then(n.t.bind(n,7045,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-design-605.json",7045],"9cd72b32":[()=>n.e(3387).then(n.t.bind(n,6368,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-fidelite-32a.json",6368],"9f55499f":[()=>n.e(4256).then(n.t.bind(n,9778,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-exhibits-b9c.json",9778],a168b62a:[()=>n.e(3452).then(n.t.bind(n,5937,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-loyalty-3ee.json",5937],a30fd2e3:[()=>n.e(3659).then(n.t.bind(n,9887,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-organizer-7af.json",9887],a3b977fd:[()=>n.e(6072).then(n.t.bind(n,9925,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-culture-3aa.json",9925],a54bce21:[()=>n.e(3948).then(n.bind(n,6340)),"@site/docs/install/Raspberry Box/Hardware/02_Laser_cut-the-body.md",6340],a7456010:[()=>n.e(1235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a78153fe:[()=>n.e(1005).then(n.bind(n,3432)),"@site/docs/Utilisateur/Cashless/25 Impressions des commandes.md",3432],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,1723)),"@theme/DocVersionRoot",1723],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,1377)),"@theme/DocRoot",1377],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],abf152e8:[()=>n.e(8163).then(n.bind(n,5692)),"@site/docs/install/Raspberry Box/Software/raspberry_soft.md",5692],b221afeb:[()=>n.e(2240).then(n.bind(n,2895)),"@site/src/pages/cgucgv.md",2895],b4e94af8:[()=>n.e(8908).then(n.bind(n,5802)),"@site/src/pages/roadmap.md",5802],b5426a6c:[()=>n.e(3800).then(n.t.bind(n,4563,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-inspiration-29d.json",4563],b6ab51ce:[()=>n.e(2092).then(n.bind(n,5103)),"@site/docs/install/Raspberry Box/Hardware/04_Assembly_7_back_fix.md",5103],baa2bd41:[()=>n.e(966).then(n.t.bind(n,197,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-presentation-f5e.json",197],bbe20111:[()=>n.e(6801).then(n.t.bind(n,4132,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-retro-880.json",4132],bcf52ae3:[()=>n.e(418).then(n.bind(n,5384)),"@site/docs/presentation/01-intro.md",5384],c02dc41d:[()=>n.e(382).then(n.bind(n,374)),"@site/docs/Utilisateur/Billetterie/50 rss.md",374],c046ee4b:[()=>n.e(5004).then(n.t.bind(n,9792,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-logiciel-libre-c84.json",9792],c0ac7b9c:[()=>n.e(2561).then(n.bind(n,9965)),"@site/docs/api/01 intro.md",9965],c1e0fb1f:[()=>n.e(8433).then(n.t.bind(n,3589,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-documentation-utilisateur-462.json",3589],c45ca271:[()=>n.e(6443).then(n.t.bind(n,5333,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-customer-009.json",5333],c4f5d8e4:[()=>Promise.all([n.e(1869),n.e(2634)]).then(n.bind(n,6467)),"@site/src/pages/index.js",6467],c5077074:[()=>n.e(9044).then(n.bind(n,1089)),"@site/docs/install/Raspberry Box/Hardware/01_The_Goal.md",1089],c7170f78:[()=>n.e(8194).then(n.bind(n,2903)),"@site/docs/api/11 Reservations.md",2903],c7bb5360:[()=>n.e(3579).then(n.t.bind(n,1084,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-monnaies-temps-3a2.json",1084],c8142407:[()=>n.e(5120).then(n.t.bind(n,2458,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-research-172.json",2458],cbabd45f:[()=>n.e(2404).then(n.t.bind(n,9e3,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-python-b8f.json",9e3],cc3b42c3:[()=>n.e(4910).then(n.bind(n,2534)),"@site/docs/Utilisateur/Cashless/1 Application android.md",2534],ce2cc516:[()=>n.e(1127).then(n.t.bind(n,4740,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-festival-392.json",4740],cee7ef96:[()=>n.e(4271).then(n.t.bind(n,7357,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-raspberry-box-6dd.json",7357],d083fab2:[()=>n.e(8059).then(n.t.bind(n,9561,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-order-taking-e74.json",9561],d159361a:[()=>n.e(5741).then(n.t.bind(n,9378,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-dematerialized-payment-2cf.json",9378],d26ec100:[()=>n.e(5606).then(n.bind(n,2412)),"@site/docs/presentation/philo.md",2412],d2d25e00:[()=>n.e(9045).then(n.t.bind(n,5275,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-catering-cc6.json",5275],d527cc20:[()=>n.e(6203).then(n.bind(n,4552)),"@site/docs/Utilisateur/Cashless/2 CartePrimaire.md",4552],d6715ccc:[()=>n.e(9731).then(n.bind(n,3125)),"@site/docs/install/Raspberry Box/Software/LaBoutik_soft.md",3125],d9316390:[()=>n.e(6924).then(n.t.bind(n,3421,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-plays-671.json",3421],da7a2e8a:[()=>n.e(8440).then(n.t.bind(n,6785,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-time-currencies-767.json",6785],df203c0f:[()=>Promise.all([n.e(1869),n.e(4279)]).then(n.bind(n,5921)),"@theme/DocTagDocListPage",5921],e0d6de2a:[()=>n.e(9672).then(n.t.bind(n,3675,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-monnaie-locale-04a.json",3675],e568d197:[()=>n.e(726).then(n.t.bind(n,7909,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-tiers-lieux-98c.json",7909],f293808f:[()=>n.e(9397).then(n.t.bind(n,2820,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-federated-5ab.json",2820],f306de51:[()=>n.e(7415).then(n.t.bind(n,2875,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-ticketing-ec1.json",2875],f353014f:[()=>n.e(889).then(n.t.bind(n,9462,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-events-2d5.json",9462],f45aee62:[()=>n.e(1377).then(n.t.bind(n,7490,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-dokos-077.json",7490],f5245bec:[()=>n.e(4507).then(n.t.bind(n,7427,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-demonstration-035.json",7427],f64e22e3:[()=>n.e(2098).then(n.t.bind(n,3132,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-open-source-4f4.json",3132],fa75baf9:[()=>n.e(4568).then(n.t.bind(n,648,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-access-card-a80.json",648],fae28bbd:[()=>n.e(9625).then(n.bind(n,6405)),"@site/docs/work-doc/user-stories.md",6405],fc5b8a36:[()=>n.e(9425).then(n.t.bind(n,124,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-venue-4cd.json",124],fc924a68:[()=>n.e(8328).then(n.t.bind(n,8172,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-billetterie-c29.json",8172],ff005427:[()=>n.e(7077).then(n.t.bind(n,3202,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-tags-help-2e0.json",3202]};var s=n(4848);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(6921),u=n(3102);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(2237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},p=[],f=[],m=(0,c.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),a().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;delete a.__context;const l=a.__props;return delete a.__props,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(o,{...a,...l,...n})})}})}const p=[{path:"/cgucgv/",component:d("/cgucgv/","838"),exact:!0},{path:"/roadmap/",component:d("/roadmap/","fb4"),exact:!0},{path:"/docs/",component:d("/docs/","807"),routes:[{path:"/docs/",component:d("/docs/","f6e"),routes:[{path:"/docs/tags/",component:d("/docs/tags/","dc9"),exact:!0},{path:"/docs/tags/access-card/",component:d("/docs/tags/access-card/","128"),exact:!0},{path:"/docs/tags/admin/",component:d("/docs/tags/admin/","e24"),exact:!0},{path:"/docs/tags/arts/",component:d("/docs/tags/arts/","96f"),exact:!0},{path:"/docs/tags/associations/",component:d("/docs/tags/associations/","dd1"),exact:!0},{path:"/docs/tags/badge-inter-lieux/",component:d("/docs/tags/badge-inter-lieux/","e3d"),exact:!0},{path:"/docs/tags/bar/",component:d("/docs/tags/bar/","436"),exact:!0},{path:"/docs/tags/billetterie/",component:d("/docs/tags/billetterie/","f30"),exact:!0},{path:"/docs/tags/caisse-enregistreuse/",component:d("/docs/tags/caisse-enregistreuse/","635"),exact:!0},{path:"/docs/tags/card/",component:d("/docs/tags/card/","2dd"),exact:!0},{path:"/docs/tags/cash-register/",component:d("/docs/tags/cash-register/","f44"),exact:!0},{path:"/docs/tags/cashback/",component:d("/docs/tags/cashback/","c42"),exact:!0},{path:"/docs/tags/cashless/",component:d("/docs/tags/cashless/","b6e"),exact:!0},{path:"/docs/tags/catering/",component:d("/docs/tags/catering/","bd6"),exact:!0},{path:"/docs/tags/colors/",component:d("/docs/tags/colors/","5b5"),exact:!0},{path:"/docs/tags/contribute/",component:d("/docs/tags/contribute/","0b3"),exact:!0},{path:"/docs/tags/cooperative/",component:d("/docs/tags/cooperative/","ac3"),exact:!0},{path:"/docs/tags/culture/",component:d("/docs/tags/culture/","bb7"),exact:!0},{path:"/docs/tags/customer/",component:d("/docs/tags/customer/","4c1"),exact:!0},{path:"/docs/tags/dematerialized-payment/",component:d("/docs/tags/dematerialized-payment/","d5a"),exact:!0},{path:"/docs/tags/demonstration/",component:d("/docs/tags/demonstration/","ae3"),exact:!0},{path:"/docs/tags/design/",component:d("/docs/tags/design/","233"),exact:!0},{path:"/docs/tags/django/",component:d("/docs/tags/django/","ab1"),exact:!0},{path:"/docs/tags/docker/",component:d("/docs/tags/docker/","fe9"),exact:!0},{path:"/docs/tags/dokos/",component:d("/docs/tags/dokos/","3f2"),exact:!0},{path:"/docs/tags/events/",component:d("/docs/tags/events/","3b7"),exact:!0},{path:"/docs/tags/exhibits/",component:d("/docs/tags/exhibits/","8a2"),exact:!0},{path:"/docs/tags/federated/",component:d("/docs/tags/federated/","a1a"),exact:!0},{path:"/docs/tags/festival/",component:d("/docs/tags/festival/","71b"),exact:!0},{path:"/docs/tags/fidelite/",component:d("/docs/tags/fidelite/","f3b"),exact:!0},{path:"/docs/tags/fidelity/",component:d("/docs/tags/fidelity/","68a"),exact:!0},{path:"/docs/tags/free-software/",component:d("/docs/tags/free-software/","ee7"),exact:!0},{path:"/docs/tags/git/",component:d("/docs/tags/git/","0ef"),exact:!0},{path:"/docs/tags/help/",component:d("/docs/tags/help/","37d"),exact:!0},{path:"/docs/tags/inspiration/",component:d("/docs/tags/inspiration/","e59"),exact:!0},{path:"/docs/tags/island/",component:d("/docs/tags/island/","107"),exact:!0},{path:"/docs/tags/local-currencies/",component:d("/docs/tags/local-currencies/","e59"),exact:!0},{path:"/docs/tags/logiciel-libre/",component:d("/docs/tags/logiciel-libre/","0b5"),exact:!0},{path:"/docs/tags/loyalty/",component:d("/docs/tags/loyalty/","3a7"),exact:!0},{path:"/docs/tags/modern/",component:d("/docs/tags/modern/","1a5"),exact:!0},{path:"/docs/tags/monnaie-locale/",component:d("/docs/tags/monnaie-locale/","52e"),exact:!0},{path:"/docs/tags/monnaies-locales/",component:d("/docs/tags/monnaies-locales/","15a"),exact:!0},{path:"/docs/tags/monnaies-temps/",component:d("/docs/tags/monnaies-temps/","140"),exact:!0},{path:"/docs/tags/open-source/",component:d("/docs/tags/open-source/","129"),exact:!0},{path:"/docs/tags/order-taking/",component:d("/docs/tags/order-taking/","b7a"),exact:!0},{path:"/docs/tags/organizer/",component:d("/docs/tags/organizer/","a63"),exact:!0},{path:"/docs/tags/paiement-dematerialise/",component:d("/docs/tags/paiement-dematerialise/","acc"),exact:!0},{path:"/docs/tags/plays/",component:d("/docs/tags/plays/","b12"),exact:!0},{path:"/docs/tags/poetry/",component:d("/docs/tags/poetry/","2d8"),exact:!0},{path:"/docs/tags/prise-de-commandes/",component:d("/docs/tags/prise-de-commandes/","f1b"),exact:!0},{path:"/docs/tags/python/",component:d("/docs/tags/python/","629"),exact:!0},{path:"/docs/tags/retro/",component:d("/docs/tags/retro/","2b4"),exact:!0},{path:"/docs/tags/stripe/",component:d("/docs/tags/stripe/","d76"),exact:!0},{path:"/docs/tags/tdd/",component:d("/docs/tags/tdd/","37d"),exact:!0},{path:"/docs/tags/third-places/",component:d("/docs/tags/third-places/","a4f"),exact:!0},{path:"/docs/tags/ticketing/",component:d("/docs/tags/ticketing/","437"),exact:!0},{path:"/docs/tags/tiers-lieux/",component:d("/docs/tags/tiers-lieux/","1c5"),exact:!0},{path:"/docs/tags/time-currencies/",component:d("/docs/tags/time-currencies/","e4c"),exact:!0},{path:"/docs/tags/venue/",component:d("/docs/tags/venue/","387"),exact:!0},{path:"/docs/tags/volunteer/",component:d("/docs/tags/volunteer/","c67"),exact:!0},{path:"/docs/",component:d("/docs/","e19"),routes:[{path:"/docs/api/apikey/",component:d("/docs/api/apikey/","59c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/events/",component:d("/docs/api/events/","b27"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/intro/",component:d("/docs/api/intro/","c73"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/products/",component:d("/docs/api/products/","485"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/reservations/",component:d("/docs/api/reservations/","f86"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tenants/",component:d("/docs/api/tenants/","66a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/api/",component:d("/docs/category/api/","a54"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/billetterie/",component:d("/docs/category/billetterie/","2bc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/cashless/",component:d("/docs/category/cashless/","64c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/contributing/",component:d("/docs/category/contributing/","722"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/diy/",component:d("/docs/category/diy/","125"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/documentation-utilisateur/",component:d("/docs/category/documentation-utilisateur/","064"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/hardware/",component:d("/docs/category/hardware/","b23"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/pr\xe9sentation/",component:d("/docs/category/pr\xe9sentation/","f2a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/raspberry-box/",component:d("/docs/category/raspberry-box/","891"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/research/",component:d("/docs/category/research/","24d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/software/",component:d("/docs/category/software/","cd8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/trucs-et-astuces/",component:d("/docs/category/trucs-et-astuces/","4c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/contribute/development/",component:d("/docs/contribute/development/","020"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/install/docker_install/",component:d("/docs/install/docker_install/","b63"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/install/Raspberry Box/Hardware/10inch/",component:d("/docs/install/Raspberry Box/Hardware/10inch/","127"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/install/Raspberry Box/Hardware/7inchBackFix/",component:d("/docs/install/Raspberry Box/Hardware/7inchBackFix/","9bd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/install/Raspberry Box/Hardware/Goal/",component:d("/docs/install/Raspberry Box/Hardware/Goal/","c96"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/install/Raspberry Box/Hardware/lazer_cut/",component:d("/docs/install/Raspberry Box/Hardware/lazer_cut/","bb8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/install/Raspberry Box/Hardware/wiring/",component:d("/docs/install/Raspberry Box/Hardware/wiring/","538"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/install/Raspberry Box/Software/laboutik/",component:d("/docs/install/Raspberry Box/Software/laboutik/","352"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/install/Raspberry Box/Software/raspberry_OS/",component:d("/docs/install/Raspberry Box/Software/raspberry_OS/","84f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/presentation/demonstration/",component:d("/docs/presentation/demonstration/","703"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/presentation/introduction/",component:d("/docs/presentation/introduction/","802"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/presentation/philosophie/",component:d("/docs/presentation/philosophie/","69f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/presentation/tarifs/",component:d("/docs/presentation/tarifs/","195"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/presentation/usages/",component:d("/docs/presentation/usages/","0ca"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Tips/facebook/",component:d("/docs/Tips/facebook/","d49"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Billetterie/admin_add_new_event/",component:d("/docs/Utilisateur/Billetterie/admin_add_new_event/","e8a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Billetterie/admin_add_new_free_event/",component:d("/docs/Utilisateur/Billetterie/admin_add_new_free_event/","01d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Billetterie/iframe/",component:d("/docs/Utilisateur/Billetterie/iframe/","211"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Billetterie/rss/",component:d("/docs/Utilisateur/Billetterie/rss/","6e1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Billetterie/webhook/",component:d("/docs/Utilisateur/Billetterie/webhook/","e9e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/admin_add_article/",component:d("/docs/Utilisateur/Cashless/admin_add_article/","a7a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/admin_add_categorie/",component:d("/docs/Utilisateur/Cashless/admin_add_categorie/","8c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/admin_add_pos/",component:d("/docs/Utilisateur/Cashless/admin_add_pos/","614"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/admin_add_primary/",component:d("/docs/Utilisateur/Cashless/admin_add_primary/","81e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/admin_supp/",component:d("/docs/Utilisateur/Cashless/admin_supp/","ce5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/android/",component:d("/docs/Utilisateur/Cashless/android/","90a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/badge/",component:d("/docs/Utilisateur/Cashless/badge/","ac0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/cashback/",component:d("/docs/Utilisateur/Cashless/cashback/","0e7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/fidelity/",component:d("/docs/Utilisateur/Cashless/fidelity/","63e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Utilisateur/Cashless/impression_preparation/",component:d("/docs/Utilisateur/Cashless/impression_preparation/","f3a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/work-doc/design/",component:d("/docs/work-doc/design/","946"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/work-doc/user-stories/",component:d("/docs/work-doc/user-stories/","90c"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/",component:d("/","2e1"),exact:!0},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>o,x:()=>i});var r=n(6540),a=n(4848);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},7815:(e,t,n)=>{"use strict";var r=n(6540),a=n(5338),o=n(545),i=n(4625),s=n(4784),l=n(8193);const c=[n(119),n(6134),n(6294),n(1043)];var u=n(8328),d=n(6347),p=n(2831),f=n(4848);function m(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var g=n(5260),h=n(4586),b=n(6025),y=n(6342),v=n(1003),w=n(2131),k=n(4090);var x=n(440),_=n(1463);function S(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.A)(),r=(0,w.o)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,f.jsxs)(g.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.A)(),{pathname:r}=(0,d.zy)();return e+(0,x.Ks)((0,b.Ay)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:a}),(0,f.jsx)("link",{rel:"canonical",href:a})]})}function C(){const{i18n:{currentLocale:e}}=(0,h.A)(),{metadata:t,image:n}=(0,y.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:k.w})]}),n&&(0,f.jsx)(v.be,{image:n}),(0,f.jsx)(E,{}),(0,f.jsx)(S,{}),(0,f.jsx)(_.A,{tag:"default",locale:e}),(0,f.jsx)(g.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const A=new Map;var T=n(6125),j=n(6988),R=n(205);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,R.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),L("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(P,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const D=O,I="__docusaurus-base-url-issue-banner-suggestion-container";function F(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '__docusaurus-base-url-issue-banner-container';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return A.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return A.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(D,{location:e,children:H})}function V(){return(0,f.jsx)(U.A,{children:(0,f.jsx)(j.l,{children:(0,f.jsxs)(T.x,{children:[(0,f.jsxs)(m,{children:[(0,f.jsx)(z,{}),(0,f.jsx)(C,{}),(0,f.jsx)(B,{}),(0,f.jsx)(G,{})]}),(0,f.jsx)(q,{})]})})})}var W=n(4054);const Q=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(6921);const Y=new Set,Z=new Set,X=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,J={prefetch:e=>{if(!(e=>!X()&&!Z.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const t=(0,p.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!X()&&!Z.has(e))(e)&&(Z.add(e),N(e))},ee=Object.freeze(J);function te(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const ne=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=ee;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(o.vd,{children:(0,f.jsx)(te,{children:(0,f.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ne)window.docusaurusRoot=a.hydrateRoot(e,t,{onRecoverableError:n});else{const r=a.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};N(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"presentation/intro","docs":[{"id":"api/01 intro","path":"/docs/api/intro","sidebar":"tutorialSidebar"},{"id":"api/02 Apikey","path":"/docs/api/apikey","sidebar":"tutorialSidebar"},{"id":"api/03 Tenants","path":"/docs/api/tenants","sidebar":"tutorialSidebar"},{"id":"api/05 Products","path":"/docs/api/products","sidebar":"tutorialSidebar"},{"id":"api/10 Event","path":"/docs/api/events","sidebar":"tutorialSidebar"},{"id":"api/11 Reservations","path":"/docs/api/reservations","sidebar":"tutorialSidebar"},{"id":"contribute/dev","path":"/docs/contribute/development","sidebar":"tutorialSidebar"},{"id":"install/Raspberry Box/Hardware/05_10inch","path":"/docs/install/Raspberry Box/Hardware/10inch","sidebar":"tutorialSidebar"},{"id":"install/Raspberry Box/Hardware/Assembly_7_back_fix","path":"/docs/install/Raspberry Box/Hardware/7inchBackFix","sidebar":"tutorialSidebar"},{"id":"install/Raspberry Box/Hardware/Laser_cut-the-body","path":"/docs/install/Raspberry Box/Hardware/lazer_cut","sidebar":"tutorialSidebar"},{"id":"install/Raspberry Box/Hardware/The_Goal","path":"/docs/install/Raspberry Box/Hardware/Goal","sidebar":"tutorialSidebar"},{"id":"install/Raspberry Box/Hardware/wiring","path":"/docs/install/Raspberry Box/Hardware/wiring","sidebar":"tutorialSidebar"},{"id":"install/Raspberry Box/Software/LaBoutik_soft","path":"/docs/install/Raspberry Box/Software/laboutik","sidebar":"tutorialSidebar"},{"id":"install/Raspberry Box/Software/raspberry_soft","path":"/docs/install/Raspberry Box/Software/raspberry_OS","sidebar":"tutorialSidebar"},{"id":"install/server_install","path":"/docs/install/docker_install","sidebar":"tutorialSidebar"},{"id":"presentation/Demonstration","path":"/docs/presentation/demonstration","sidebar":"tutorialSidebar"},{"id":"presentation/eco","path":"/docs/presentation/tarifs","sidebar":"tutorialSidebar"},{"id":"presentation/intro","path":"/docs/presentation/introduction","sidebar":"tutorialSidebar"},{"id":"presentation/philo","path":"/docs/presentation/philosophie","sidebar":"tutorialSidebar"},{"id":"presentation/usage","path":"/docs/presentation/usages","sidebar":"tutorialSidebar"},{"id":"Tips/facebook","path":"/docs/Tips/facebook","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Billetterie/40 webhook","path":"/docs/Utilisateur/Billetterie/webhook","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Billetterie/41 Int\xe9gration","path":"/docs/Utilisateur/Billetterie/iframe","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Billetterie/50 rss","path":"/docs/Utilisateur/Billetterie/rss","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Billetterie/60 creation event","path":"/docs/Utilisateur/Billetterie/admin_add_new_event","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Billetterie/70 event gratuit","path":"/docs/Utilisateur/Billetterie/admin_add_new_free_event","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/1 Application android","path":"/docs/Utilisateur/Cashless/android","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/12 PointVente","path":"/docs/Utilisateur/Cashless/admin_add_pos","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/15 Categories","path":"/docs/Utilisateur/Cashless/admin_add_categorie","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/150 Badgeuse","path":"/docs/Utilisateur/Cashless/badge","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/160 Fidelity","path":"/docs/Utilisateur/Cashless/fidelity","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/2 CartePrimaire","path":"/docs/Utilisateur/Cashless/admin_add_primary","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/20 Articles","path":"/docs/Utilisateur/Cashless/admin_add_article","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/200 Cashback","path":"/docs/Utilisateur/Cashless/cashback","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/25 Impressions des commandes","path":"/docs/Utilisateur/Cashless/impression_preparation","sidebar":"tutorialSidebar"},{"id":"Utilisateur/Cashless/30 SuppCommande","path":"/docs/Utilisateur/Cashless/admin_supp","sidebar":"tutorialSidebar"},{"id":"work-doc/design","path":"/docs/work-doc/design","sidebar":"tutorialSidebar"},{"id":"work-doc/user-stories","path":"/docs/work-doc/user-stories","sidebar":"tutorialSidebar"},{"id":"/category/pr\xe9sentation","path":"/docs/category/pr\xe9sentation","sidebar":"tutorialSidebar"},{"id":"/category/documentation-utilisateur","path":"/docs/category/documentation-utilisateur","sidebar":"tutorialSidebar"},{"id":"/category/cashless","path":"/docs/category/cashless","sidebar":"tutorialSidebar"},{"id":"/category/billetterie","path":"/docs/category/billetterie","sidebar":"tutorialSidebar"},{"id":"/category/trucs-et-astuces","path":"/docs/category/trucs-et-astuces","sidebar":"tutorialSidebar"},{"id":"/category/diy","path":"/docs/category/diy","sidebar":"tutorialSidebar"},{"id":"/category/raspberry-box","path":"/docs/category/raspberry-box","sidebar":"tutorialSidebar"},{"id":"/category/software","path":"/docs/category/software","sidebar":"tutorialSidebar"},{"id":"/category/hardware","path":"/docs/category/hardware","sidebar":"tutorialSidebar"},{"id":"/category/contributing","path":"/docs/category/contributing","sidebar":"tutorialSidebar"},{"id":"/category/research","path":"/docs/category/research","sidebar":"tutorialSidebar"},{"id":"/category/api","path":"/docs/category/api","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/category/pr\xe9sentation","label":"Presentation"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","fr"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en-GB","calendar":"gregory","path":"en"},"fr":{"label":"Fran\xe7ais","direction":"ltr","htmlLang":"fr-FR","calendar":"gregory","path":"fr"}}}');var s=n(2654);const l=JSON.parse('{"docusaurusVersion":"3.5.2","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.5.2"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.5.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.5.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.5.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.5.2"}}}');var c=n(4848);const u={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var r=n(6540),a=n(8193),o=n(5260),i=n(440),s=n(781),l=n(3102),c=n(4848);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(g,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(o.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.A,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const m=e=>(0,c.jsx)(f,{...e});class g extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(545),a=n(4848);function o(e){return(0,a.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),a=n(4625),o=n(440),i=n(4586),s=n(6654),l=n(8193),c=n(3427),u=n(6025),d=n(4848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:w,baseUrl:k}=v,x=v.future.experimental_router,{withBaseUrl:_}=(0,u.hH)(),S=(0,c.A)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>E.current));const C=p||f;const A=(0,s.A)(C),T=C?.replace("pathname://","");let j=void 0!==T?(R=T,b&&(e=>e.startsWith("/"))(R)?_(R):R):void 0;var R;"hash"===x&&j?.startsWith("./")&&(j=j?.slice(1)),j&&A&&(j=(0,o.Ks)(j,{trailingSlash:w,baseUrl:k}));const L=(0,r.useRef)(!1),P=n?a.k2:a.N_,N=l.A.canUseIntersectionObserver,O=(0,r.useRef)(),D=()=>{L.current||null==j||(window.docusaurus.preload(j),L.current=!0)};(0,r.useEffect)((()=>(!N&&A&&l.A.canUseDOM&&null!=j&&window.docusaurus.prefetch(j),()=>{N&&O.current&&O.current.disconnect()})),[O,j,N,A]);const I=j?.startsWith("#")??!1,F=!y.target||"_self"===y.target,M=!j||!A||!F||I&&"hash"!==x;h||!I&&M||S.collectLink(j),y.id&&S.collectAnchor(y.id);const B={};return M?(0,d.jsx)("a",{ref:E,href:j,...C&&!A&&{target:"_blank",rel:"noopener noreferrer"},...y,...B}):(0,d.jsx)(P,{...y,onMouseEnter:D,onTouchStart:D,innerRef:e=>{E.current=e,N&&e&&A&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=j&&window.docusaurus.prefetch(j))}))})),O.current.observe(e))},to:j,...n&&{isActive:g,activeClassName:m},...B})}const f=r.forwardRef(p)},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>l});var r=n(6540),a=n(4848);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(6540),a=n(4586),o=n(6654);function i(){const{siteConfig:e}=(0,a.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:a=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,o.z)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(a)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6988);function o(){return(0,r.useContext)(a.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6125);function o(){return(0,r.useContext)(a.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540);const a=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>o});var r=n(6540),a=n(4848);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:s,children:t})}},3886:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>h,g1:()=>y});var r=n(6540),a=n(4070),o=n(7065),i=n(6342),s=n(679),l=n(9532),c=n(4848);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,s.Wf)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,s.Wf)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,s.Wf)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return(0,c.jsx)(f.Provider,{value:n,children:t})}function h(e){let{children:t}=e;return(0,c.jsx)(g,{children:t})}function b(){const e=(0,r.useContext)(f);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},609:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>c});var r=n(6540),a=n(9532),o=n(4848);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new a.dV("DocsSidebarProvider");return e}},6972:(e,t,n)=>{"use strict";n.d(t,{$S:()=>m,B5:()=>E,Nr:()=>f,OF:()=>k,QB:()=>S,Vd:()=>x,Y:()=>v,cC:()=>p,d1:()=>C,fW:()=>_,w8:()=>b});var r=n(6540),a=n(6347),o=n(2831),i=n(4070),s=n(9169),l=n(1682),c=n(3886),u=n(3025),d=n(609);function p(e){const t=(0,u.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}function m(){const{pathname:e}=(0,a.zy)(),t=(0,d.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=w({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,s.ys)(e,t),h=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||h(e.items,t))}function y(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>y(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function v(e,t){return(0,r.useMemo)((()=>e.filter((e=>y(e,t)))),[e,t])}function w(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,s.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,s.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function k(){const e=(0,d.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?w({sidebarItems:e.items,pathname:t}):null}function x(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,c.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,l.sb)([t,n,a].filter(Boolean))),[t,n,a])}function _(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,l.sb)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,a.zy)(),r=(0,u.r)(),i=t.routes,s=i.find((e=>(0,a.B6)(n.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?r.docsSidebars[l]:void 0;return{docElement:(0,o.v)(i),sidebarName:l,sidebarItems:c}}function C(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!f(e)))}},3025:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new a.dV("DocsVersionProvider");return e}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>g,vT:()=>p,Gy:()=>u,HW:()=>h,ht:()=>d,r7:()=>m,jh:()=>f});var r=n(6347),a=n(4586),o=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>{try{return function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return s(t)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return l(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(5947),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},6134:(e,t,n)=>{"use strict";var r=n(1765),a=n(4784);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(8692)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(4164),a=n(1312),o=n(6342),i=n(8774),s=n(3427);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(4848);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:p}}=(0,o.p)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,a.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.A)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(4848);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},781:(e,t,n)=>{"use strict";n.d(t,{A:()=>ft});var r=n(6540),a=n(4164),o=n(7489),i=n(1003),s=n(6347),l=n(1312),c=n(5062),u=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(7559),b=n(4090);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(g,{className:y.skipToContent})}var w=n(6342),k=n(5041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:a,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const _={closeButton:"closeButton_CVFx"};function S(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.A)("clean-btn close",_.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,a.A)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.M)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,u.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,u.jsx)("div",{className:A.announcementBarPlaceholder}),(0,u.jsx)(C,{className:A.announcementBarContent}),o&&(0,u.jsx)(S,{onClick:n,className:A.announcementBarClose})]})}var j=n(2069),R=n(3104);var L=n(9532),P=n(5600);const N=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,j.M)(),t=(0,P.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,L.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,u.jsx)(N.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(N);if(!e)throw new L.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:D(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=I();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(5293),B=n(2303);function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function U(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,B.A)(),s=(0,l.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,a.A)($.toggle,t),children:(0,u.jsxs)("button",{className:(0,a.A)("clean-btn",$.toggleButton,!i&&$.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(z,{className:(0,a.A)($.toggleIcon,$.lightToggleIcon)}),(0,u.jsx)(U,{className:(0,a.A)($.toggleIcon,$.darkToggleIcon)})]})})}const H=r.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,M.G)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var W=n(3465);function Q(){return(0,u.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Q,{}),(0,u.jsx)(V,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(a,{forcePrependBaseUrl:!0}),m=o&&a&&!(0,J.A)(a),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,m&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return a?(0,u.jsx)(Z.A,{href:l?f:a,...c,...g}):(0,u.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,u.jsx)(ne,{className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,a.A)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,u.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),se=n(9169),le=n(4586);const ce="dropdownNavbarItemMobile_S0Fm";function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.A)("navbar__link",o),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ee,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),(0,u.jsxs)("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,a.A)(ce,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Ee,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var me=n(2131);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var be=n(418);const ye={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,a.A)(n,ye.navbarSearchContainer),children:t})}var we=n(4070),ke=n(6972);var xe=n(3886);function _e(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find((t=>t.id===e.mainDocId))}(e)}const Se={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.A)(),p=(0,me.o)(),{search:f,hash:m}=(0,s.zy)(),g=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,l.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...o,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(ge,{className:he}),h]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(ve,{className:n,children:(0,u.jsx)(be.A,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,u.jsx)(i,{className:(0,a.A)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,ke.QB)(t,r),s=o?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>s||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,ke.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ke.Vd)(r)[0],i=t??o.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,u.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:c,hash:d}=(0,s.zy)(),p=(0,we.zK)(n),f=(0,we.jh)(n),{savePreferredVersionName:m}=(0,xe.g1)(n),g=[...a,...f.map((function(e){const t=_e(e,p);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...o],h=(0,ke.Vd)(n)[0],b=t&&g.length>1?(0,l.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&g.length>1?void 0:_e(h,p).path;return g.length<=1?(0,u.jsx)(oe,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:b,to:y,items:g,isActive:r?()=>!1:void 0})}};function Ee(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Se[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(a,{...n})}function Ce(){const e=(0,j.M)(),t=(0,w.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ee,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ae(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,w.p)().navbar.items.length,t=I();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ae,{onClick:()=>t.hide()}),t.content]})}function je(){const e=(0,j.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(F,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(Ce,{}),secondaryMenu:(0,u.jsx)(Te,{})}):null}const Re={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Le(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,a.A)("navbar-sidebar__backdrop",e.className)})}function Pe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.p)(),i=(0,j.M)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,R.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.A)("navbar","navbar--fixed-top",n&&[Re.navbarHideable,!d&&Re.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Le,{onClick:i.toggle}),(0,u.jsx)(je,{})]})}var Ne=n(440);const Oe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function De(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ie(e){let{error:t}=e;const n=(0,Ne.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Oe.errorBoundaryError,children:n})}class Fe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Me="right";function Be(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function ze(){const{toggle:e,shown:t}=(0,j.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Be,{})})}const Ue={colorModeToggle:"colorModeToggle_DEke"};function $e(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Fe,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Ee,{...e})},t)))})}function qe(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function He(){const e=(0,j.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Me)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,u.jsx)(qe,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(ze,{}),(0,u.jsx)(Q,{}),(0,u.jsx)($e,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)($e,{items:r}),(0,u.jsx)(V,{className:Ue.colorModeToggle}),!a&&(0,u.jsx)(ve,{children:(0,u.jsx)(be.A,{})})]})})}function Ge(){return(0,u.jsx)(Pe,{children:(0,u.jsx)(He,{})})}function Ve(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,X.Ay)(n),l=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Z.A,{className:"footer__link-item",...r?{href:o?l:r}:{to:s},...i,children:[a,r&&!(0,J.A)(r)&&(0,u.jsx)(te.A,{})]})}function We(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(Ve,{item:t})},t.href??t.to)}function Qe(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(We,{item:e},t)))})]})}function Ke(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(Qe,{column:e},t)))})}function Ye(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(Ve,{item:t})}function Xe(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(Ze,{item:e}),t.length!==n+1&&(0,u.jsx)(Ye,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(Ke,{columns:t}):(0,u.jsx)(Xe,{links:t})}var et=n(1122);const tt="footerLogoLink_BH7S";function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(et.A,{className:(0,a.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Z.A,{href:t.href,className:tt,target:t.target,children:(0,u.jsx)(nt,{logo:t})}):(0,u.jsx)(nt,{logo:t})}function at(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,u.jsx)("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function it(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,u.jsx)(ot,{style:a,links:n&&n.length>0&&(0,u.jsx)(Je,{links:n}),logo:r&&(0,u.jsx)(rt,{logo:r}),copyright:t&&(0,u.jsx)(at,{copyright:t})})}const st=r.memo(it),lt=(0,L.fM)([M.a,k.o,R.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(P.y_,{children:(0,u.jsx)(j.e,{children:(0,u.jsx)(O,{children:t})})})}]);function ct(e){let{children:t}=e;return(0,u.jsx)(lt,{children:t})}var ut=n(1107);function dt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(ut.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(De,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Ie,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.J)(),(0,u.jsxs)(ct,{children:[(0,u.jsx)(i.be,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(T,{}),(0,u.jsx)(Ge,{}),(0,u.jsx)("div",{id:d,className:(0,a.A)(h.G.wrapper.main,pt.mainWrapper,r),children:(0,u.jsx)(o.A,{fallback:e=>(0,u.jsx)(dt,{...e}),children:t})}),!n&&(0,u.jsx)(st,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(8774),a=n(6025),o=n(4586),i=n(6342),s=n(1122),l=n(4848);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Ay)(t.src),dark:(0,a.Ay)(t.srcDark||t.src)},i=(0,l.jsx)(s.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,o.A)(),{navbar:{title:n,logo:s}}=(0,i.p)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,a.Ay)(s?.href||"/"),m=n?"":t,g=s?.alt??m;return(0,l.jsxs)(r.A,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:g,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(5260),a=n(4848);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.A,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(6540),a=n(4164),o=n(2303),i=n(5293);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(4848);function c(e){let{className:t,children:n}=e;const c=(0,o.A)(),{colorMode:u}=(0,i.G)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function u(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>b,u:()=>c});var r=n(6540),a=n(8193),o=n(205),i=n(3109),s=n(4848);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return p(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function m(e){if(!a.A.canUseDOM)return e?u:d}function g(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:u,style:c?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:a})}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,o.A)((()=>{t||i(!0)}),[t]),(0,o.A)((()=>{a&&c(t)}),[a,t]),a?(0,s.jsx)(g,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?h:g;return(0,s.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>g,o:()=>m});var r=n(6540),a=n(2303),o=n(679),i=n(9532),s=n(6342),l=n(4848);const c=(0,o.Wf)("docusaurus.announcement.dismiss"),u=(0,o.Wf)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.p)(),t=(0,a.A)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>b,a:()=>h});var r=n(6540),a=n(8193),o=n(9532),i=n(679),s=n(6342),l=n(4848);const c=r.createContext(void 0),u="theme",d=(0,i.Wf)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>a.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),g=e=>{d.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.p)(),[a,o]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&g(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[a,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},2069:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(6540),a=n(5600),o=n(4581),i=n(7485),s=n(6342),l=n(9532),c=n(4848);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,s.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.$Z)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function p(e){let{children:t}=e;const n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function f(){const e=r.useContext(u);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>c,YL:()=>l,y_:()=>s});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(6540);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(6540),a=n(8193);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!a.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},7485:(e,t,n)=>{"use strict";n.d(t,{$Z:()=>i,aZ:()=>l});var r=n(6540),a=n(6347),o=n(9532);function i(e){!function(e){const t=(0,a.W6)(),n=(0,o._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){const t=(0,a.W6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function l(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},1682:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{XI:()=>r,sb:()=>a})},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>d,Jx:()=>m});var r=n(6540),a=n(4164),o=n(5260),i=n(3102);function s(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(6025),c=n(4586);var u=n(4848);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const s=function(e){const{siteConfig:t}=(0,c.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.hH)(),p=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.A,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),s=(0,a.A)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(o.A,{children:(0,u.jsx)("html",{className:s})}),n]})}function m(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,a.A)(r,o),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>c,ZC:()=>s,_q:()=>i,dV:()=>l,fM:()=>u});var r=n(6540),a=n(205),o=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,a.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,a.A)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>s,ys:()=>i});var r=n(6540),a=n(8328),o=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>f,Tv:()=>u,a_:()=>m,gk:()=>g});var r=n(6540),a=n(8193),o=n(2303),i=n(205),s=n(9532),l=n(4848);const c=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(c);if(null==e)throw new s.dV("ScrollControllerProvider");return e}const p=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),a=(0,r.useRef)(p()),o=(0,s._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function m(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.A)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function g(){const e=(0,r.useRef)(null),t=(0,o.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>u,Dv:()=>d});var r=n(6540);const a=JSON.parse('{"N":"localStorage","M":""}'),o=a.N;function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function s(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){const n=`${e}${a.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const r=s(t?.persistence);return null===r?c:{get:()=>{try{return r.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=r.getItem(n);r.setItem(n,e),i({key:n,oldValue:t,newValue:e,storage:r})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=r.getItem(n);r.removeItem(n),i({key:n,oldValue:e,newValue:null,storage:r})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===r&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),a=n(6347),o=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.A)(),{pathname:l}=(0,a.zy)(),c=(0,o.Ks)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(9532);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(4586);function a(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=a,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,c=n,c?a(l):o(l));var l,c;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=o;const r=n(2566);function a(e){return e.endsWith("/")?e:`${e}/`}function o(e){return(0,r.removeSuffix)(e,"/")}},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},440:(e,t,n)=>{"use strict";t.rA=t.Ks=void 0;const r=n(1635);var a=n(2983);Object.defineProperty(t,"Ks",{enumerable:!0,get:function(){return r.__importDefault(a).default}});var o=n(2566);var i=n(253);Object.defineProperty(t,"rA",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>f,sC:()=>T,AO:()=>p});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(1561);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),g=l(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},6969:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,t,n)=>{const r=n(6969),a=n(8380),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),o.add(e)}))}i.silent=!1,e.exports=i},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=o.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++a;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];g&&y.push.apply(y,i([g])),y.push(h),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},8692:(e,t,n)=>{var r={"./":8722};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=8692},3157:(e,t,n)=>{var r={"./":8722};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=3157},8380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in a(t,o),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),m=u;a(m);){for(var g in p={},m){var h=l[g];t(h&&h.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var y in f(b))if(y in u){p[b]=!0;break}for(var v in m=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var a,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)a=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));o?a=o(p,(function(){return r(e)})):r(e)}return s[e]=a}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(9982);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n