spree_cm_commissioner 1.17.0.pre.pre2 → 1.17.0.pre.pre4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bd0a9d4b3819bd12ab5e38ffd050cf46ca5b8a937965a25ae911f9208b26586a
4
- data.tar.gz: a17a1eea391cdf4c4c2c17d300ee275ab70b67dbc87b4448cbc4a2a6cae1c533
3
+ metadata.gz: 27eaa71cfc36b120e800e8d027a0bac70c7896a47349b57334e9b311f1a8bfa4
4
+ data.tar.gz: 3721c925d915dc0e02660abf2abefbc42e62e66ace288f9bc57c0d8adf23b335
5
5
  SHA512:
6
- metadata.gz: 45451b1d44bf6820463098e3c2a37cfd113753206b1ccbc13247a7f3db577be706fff5b1dd54e528036e6120dacfb4d9472672f3f196d8866dbdfff7557bbdde
7
- data.tar.gz: d52c8b30b4e67599eac1eba6f75025c6ee01c6967caaebd7874e22fa71ca7202a1927facd4d8c3ad0e8da256ece71e3977b83a3ea56292e0a740c0b56bc05566
6
+ metadata.gz: 764f2f2ea0a5894c6a0110264f497a2d879b23c58951c46cfcbae15bf752b9c63cd7401adb353981d1e4ef7c1e58d0991668397ffda4b7f9ab6431b5bad6403b
7
+ data.tar.gz: 8030d23be060aa290f79ed06cb25cf0caa6250aa677b59b9f5410def6269a62f8d7948c3e030618c0906954a5a0e11e5b9fce1a690adc8872115c5ed4c545aa5
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (1.17.0.pre.pre2)
37
+ spree_cm_commissioner (1.17.0.pre.pre4)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -0,0 +1,63 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="payment_proccessing" data-name="payment proccessing" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 334 200">
3
+ <defs>
4
+ <clipPath id="clippath">
5
+ <path d="m332.72,16.62v166.75c0,8.27-6.28,15.08-14.33,15.92-.55.05-1.11.08-1.67.08H16c-.48,0-.96-.02-1.43-.06-8.17-.73-14.57-7.59-14.57-15.94V16.62C0,7.78,7.16.62,16,.62h300.72c8.84,0,16,7.16,16,16Z" style="fill: none;"/>
6
+ </clipPath>
7
+ </defs>
8
+ <g style="clip-path: url(#clippath);">
9
+ <path d="m332.72,16.62v166.75c0,8.27-6.28,15.08-14.33,15.92-.55.05-1.11.08-1.67.08H16c-.48,0-.96-.02-1.43-.06-8.17-.73-14.57-7.59-14.57-15.94V16.62C0,7.78,7.16.62,16,.62h300.72c8.84,0,16,7.16,16,16Z" style="fill: #130d07;"/>
10
+ <path d="m160.11,89.69c1.41-5.81-3.61-9.74-10.21-9.27-6.6.47-26.31,10.68-28.51,12.26-2.2,1.57-29.54,6.6-34.25,3.77-4.71-2.83-12.46-7.49-12.46-7.49,0,0-23.81-23.81-40.47,2.86-16.67,26.66-13.99,61.42-13.99,61.42l-24.1,29.05s-10.95,10,3.81,19.05,22.11,18.14,31.15,21.3c9.04,3.16,14.46-7,14.46-7.68,0-.68,19.43-30.27,19.43-30.27,10.27-.69,20.53-1.41,30.79-2.17,10.81-.8,24.65.44,31.99-9.08,3.2-4.15,1.59-8.37-.02-12.85.06.18,3.68-1,4-1.13,1.81-.72,3.12-1.91,3.94-3.7,1.55-3.36,2.03-8.12.07-11.41-2.91-4.88-3.85-5.31-3.85-5.31.93.42,4.7-2.76,5.32-3.27,2.69-2.21,4.81-5.03,5.27-8.57,1.31-10.16-10.01-17.26-18.56-19.27,5.59,1.31,10.8,2.15,16.21-.39,3.01-1.41,5.69-3.43,8.35-5.44,4.02-3.03,10.38-7.18,11.65-12.41" style="fill: #e89875;"/>
11
+ <path d="m138.73,45.68c-1.83-.91-5.84-1.99-7.86-2.27-3.17-.44-12.78-.68-12.78-.68l-1.24,3.76-31.45-1.3c-4.73-.2-8.98,2.88-10.27,7.44l-27.87,101.59c-1.74,6.14,2.5,12.35,8.85,12.97l49.44,1.78c4.98.49,9.59-2.69,10.89-7.53l27.25-101.35c.17-.64.26-1.28.31-1.92,0-.02.01-.05.02-.07,1.59-7.52-1.35-10.47-5.29-12.43Z" style="fill: #302b31;"/>
12
+ <path d="m51.51,163.26l49.44,1.78c4.98.49,9.59-2.69,10.89-7.53l27.25-101.35c1.7-6.33-2.91-12.61-9.46-12.88l-48.82-2.02c-4.73-.2-8.98,2.88-10.27,7.44l-27.87,101.59c-1.74,6.14,2.5,12.35,8.85,12.97Z" style="fill: #212028;"/>
13
+ <path d="m108.45,126.85c-1.64.07-3.43-.23-5.08-.3-4.13-.18-8.26-.36-12.39-.54l-22.43-.98-.81-.04c-2.87-.41-4.61-1.99-3.7-4.96l.84-3.54c.55-2.49,2.89-4.15,5.42-3.86,13.54.41,27.15.41,40.66,1.23,2,.12,4.17.45,4.34,2.96.15,2.13-1.09,4.94-1.91,6.87-1.02,2.41-2.87,3.07-4.95,3.16Z" style="fill: #f59b1d;"/>
14
+ <path d="m117.78,96.1l-48.7-1.94c-2.03-.08-3.25-1.77-2.74-3.76l8.36-32.34c.52-2,2.58-3.55,4.61-3.47l48.7,1.94c2.03.08,3.25,1.77,2.74,3.76l-8.36,32.34c-.52,2-2.58,3.55-4.61,3.47Z" style="fill: #fffaf8;"/>
15
+ <path d="m85.83,77.72l-8.87-.35c-.88-.04-1.41-.77-1.19-1.63l1.23-4.78c.22-.87,1.12-1.54,2-1.51l8.87.35c.88.04,1.41.77,1.19,1.63l-1.23,4.78c-.22.87-1.12,1.54-2,1.51Z" style="fill: #d6d6d6;"/>
16
+ <path d="m124.55,64.16l-9.8-.39c-.62-.02-1-.54-.84-1.15l.45-1.74c.16-.61.79-1.09,1.41-1.06l9.8.39c.62.02,1,.54.84,1.15l-.45,1.74c-.16.61-.79,1.09-1.41,1.06Z" style="fill: #d6d6d6;"/>
17
+ <path d="m84.05,81.98l-8.95-.36c-.47-.02-.75-.41-.63-.87l.22-.86c.12-.46.59-.82,1.06-.8l8.95.36c.47.02.75.41.63.87l-.22.86c-.12.46-.59.82-1.06.8Z" style="fill: #d6d6d6;"/>
18
+ <path d="m99.83,91.71l-27.44-1.09c-.25-.01-.41-.22-.34-.47l.42-1.62c.06-.25.32-.44.57-.43l27.44,1.09c.25.01.41.22.34.47l-.42,1.62c-.06.25-.32.44-.57.43Z" style="fill: #d6d6d6;"/>
19
+ <path d="m95.54,82.43l-8.95-.36c-.47-.02-.75-.41-.63-.87l.22-.86c.12-.46.59-.82,1.06-.8l8.95.36c.47.02.75.41.63.87l-.22.86c-.12.46-.59.82-1.06.8Z" style="fill: #d6d6d6;"/>
20
+ <path d="m107.03,82.89l-8.95-.36c-.47-.02-.75-.41-.63-.87l.22-.86c.12-.46.59-.82,1.06-.8l8.95.36c.47.02.75.41.63.87l-.22.86c-.12.46-.59.82-1.06.8Z" style="fill: #d6d6d6;"/>
21
+ <path d="m118.52,83.35l-8.95-.36c-.47-.02-.75-.41-.63-.87l.22-.86c.12-.46.59-.82,1.06-.8l8.95.36c.47.02.75.41.63.87l-.22.86c-.12.46-.59.82-1.06.8Z" style="fill: #d6d6d6;"/>
22
+ <path d="m111.65,93.7c-.49.15-.94.45-1.44.61-2.03.64-4.12-.62-4.15-2.53-.02-1.28.45-2.44,1.6-3.42.84-.72,1.78-1.08,2.78-1.14.88-.05,1.65.12,2.24.65.12.11.29.16.44.24-.17.19.02.23.08.32.37.57.57,1.21.45,1.96-.2,1.22-.73,2.32-1.89,3.17-.05.03-.08.09-.11.14Z" style="fill: #d6d6d6;"/>
23
+ <path d="m111.65,93.7s.07-.11.11-.14c1.16-.85,1.69-1.95,1.89-3.17.12-.75-.08-1.39-.45-1.96-.06-.09-.25-.14-.08-.32.59-.27,1.16-.59,1.79-.67,2.25-.26,3.6.86,3.66,2.68.06,1.96-1.32,3.73-3.42,4.37-1.29.39-2.36.14-3.23-.58-.09-.07-.18-.15-.26-.22Z" style="fill: #5e5e5e;"/>
24
+ <path d="m53.69,110.12s1.51-5.75,5.56,2.51c4.05,8.27,15.38,11.23,20.41,6.86s-.79-23.41-15.54-36.21c-14.75-12.8-30.48,5.41-37.12,19.9-6.65,14.49-6.78,50.07-6.78,50.07l48.9,21.12s8.3-15.25.02-34.98c-4.68-11.15-9.08-16.86-12.8-21.88-3.73-5.02-2.64-7.37-2.64-7.37Z" style="fill: #e89875;"/>
25
+ <g>
26
+ <rect x="222.73" y="98.72" width="8.27" height="27.35" style="fill: #fbc01a;"/>
27
+ <polygon points="231 100.13 222.73 100.13 221.53 95.4 232.39 95.4 231 100.13" style="fill: #fbc01a;"/>
28
+ <line x1="223.67" y1="100.13" x2="231" y2="100.13" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
29
+ <polygon points="222.73 126.08 231 126.08 232.2 130.8 221.33 130.8 222.73 126.08" style="fill: #fbc01a;"/>
30
+ <line x1="231" y1="126.08" x2="222.73" y2="126.08" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
31
+ </g>
32
+ <g>
33
+ <rect x="240.34" y="98.72" width="8.27" height="27.35" style="fill: #f4b200;"/>
34
+ <polygon points="248.61 100.13 240.34 100.13 239.15 95.4 250.01 95.4 248.61 100.13" style="fill: #f4b200;"/>
35
+ <polygon points="240.35 126.08 248.62 126.08 249.81 130.8 238.95 130.8 240.35 126.08" style="fill: #f4b200;"/>
36
+ </g>
37
+ <g>
38
+ <rect x="257.95" y="98.72" width="8.27" height="27.35" style="fill: #fbc01a;"/>
39
+ <polygon points="266.22 100.13 257.95 100.13 256.76 95.4 267.62 95.4 266.22 100.13" style="fill: #fbc01a;"/>
40
+ <line x1="258.9" y1="100.13" x2="266.22" y2="100.13" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
41
+ <polygon points="257.96 126.08 266.23 126.08 267.42 130.8 256.56 130.8 257.96 126.08" style="fill: #fbc01a;"/>
42
+ <line x1="266.22" y1="126.08" x2="257.96" y2="126.08" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
43
+ </g>
44
+ <g>
45
+ <rect x="275.56" y="98.72" width="8.27" height="27.35" style="fill: #fbc01a;"/>
46
+ <polygon points="283.84 100.13 275.56 100.13 274.37 95.4 285.23 95.4 283.84 100.13" style="fill: #fbc01a;"/>
47
+ <line x1="276.51" y1="100.13" x2="283.84" y2="100.13" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
48
+ <polygon points="275.57 126.08 283.84 126.08 285.04 130.8 274.17 130.8 275.57 126.08" style="fill: #fbc01a;"/>
49
+ <line x1="283.84" y1="126.08" x2="275.57" y2="126.08" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
50
+ </g>
51
+ <rect x="218.79" y="91.42" width="69.46" height="3.98" style="fill: #f9b500;"/>
52
+ <rect x="218.79" y="130.8" width="69.46" height="3.98" style="fill: #fbc01a;"/>
53
+ <rect x="209.25" y="134.79" width="88.53" height="4.09" style="fill: #f4b200;"/>
54
+ <path d="m216.67,88.29l34.23-15.08c2.1-.93,4.5-.93,6.6,0l34.23,15.08c1.62.71,1.11,3.13-.66,3.13h-73.75c-1.77,0-2.28-2.42-.66-3.13Z" style="fill: #fbc01a;"/>
55
+ <path d="m230.81,86.16l21.33-9.4c1.31-.58,2.8-.58,4.11,0l21.33,9.4c1.01.44.69,1.95-.41,1.95h-45.96c-1.1,0-1.42-1.51-.41-1.95Z" style="fill: #f4b200;"/>
56
+ <path d="m256.72,83.21c0-1.39-1.13-2.51-2.51-2.51s-2.51,1.13-2.51,2.51,1.13,2.51,2.51,2.51,2.51-1.13,2.51-2.51Z" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
57
+ <line x1="218.8" y1="131.54" x2="288.24" y2="131.54" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
58
+ <path d="m143.42,43.43l2.99-1.92c34.81-22.3,81.11-12.16,103.41,22.65h0" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 4px;"/>
59
+ <polyline points="242.93 64.16 250.34 64.16 250.34 56.12" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 3px;"/>
60
+ <path d="m253.66,141.68l-3.52,4.34c-28.53,29.92-75.91,31.04-105.83,2.5h0" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 4px;"/>
61
+ <polyline points="151 146.9 143.8 148.65 145.77 156.76" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 3px;"/>
62
+ </g>
63
+ </svg>
@@ -0,0 +1,56 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ viewBox="0 0 52 52"
5
+ width="100"
6
+ height="100"
7
+ >
8
+ <style>
9
+ .svg-failed {
10
+ stroke: white;
11
+ stroke-width: 5;
12
+ stroke-miterlimit: 10;
13
+ stroke-linecap: round;
14
+ stroke-linejoin: round;
15
+ fill: none;
16
+ animation: svg-failed-scale 0.3s ease-in-out 0.9s both;
17
+ }
18
+
19
+ .svg-failed-circle {
20
+ stroke: none;
21
+ fill: #FF5A5F;
22
+ }
23
+
24
+ .svg-failed-x {
25
+ stroke-dasharray: 48;
26
+ stroke-dashoffset: 48;
27
+ animation: svg-failed-draw 0.5s ease forwards 0.6s;
28
+ }
29
+
30
+ @keyframes svg-failed-draw {
31
+ to {
32
+ stroke-dashoffset: 0;
33
+ }
34
+ }
35
+
36
+ @keyframes svg-failed-scale {
37
+ 0%, 100% {
38
+ transform: scale(1);
39
+ }
40
+ 50% {
41
+ transform: scale(1.1);
42
+ }
43
+ }
44
+ </style>
45
+
46
+ <circle class="svg-failed-circle" cx="26" cy="26" r="25" />
47
+ <!-- X mark: two lines crossing -->
48
+ <path
49
+ class="svg-failed svg-failed-x"
50
+ d="M16 16 L36 36"
51
+ />
52
+ <path
53
+ class="svg-failed svg-failed-x"
54
+ d="M36 16 L16 36"
55
+ />
56
+ </svg>
@@ -0,0 +1,50 @@
1
+ <svg class="pl" width="300" height="300" viewBox="0 0 300 300" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <style>
3
+ .pl__ring { animation: ringA 3s linear infinite; }
4
+ .pl__ring--a { stroke: #F79E1B; }
5
+ .pl__ring--b { animation-name: ringB; stroke: #F79E1B; }
6
+ .pl__ring--c { animation-name: ringC; stroke: #F79E1B; }
7
+ .pl__ring--d { animation-name: ringD; stroke: #F79E1B; }
8
+
9
+ @keyframes ringA {
10
+ from, 4% { stroke-dasharray: 0 660; stroke-width: 20; stroke-dashoffset: -330; }
11
+ 12% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -335; }
12
+ 32% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -595; }
13
+ 40%, 54% { stroke-dasharray: 0 660; stroke-width: 20; stroke-dashoffset: -660; }
14
+ 62% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -665; }
15
+ 82% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -925; }
16
+ 90%, to { stroke-dasharray: 0 660; stroke-width: 20; stroke-dashoffset: -990; }
17
+ }
18
+ @keyframes ringB {
19
+ from, 12% { stroke-dasharray: 0 220; stroke-width: 20; stroke-dashoffset: -110; }
20
+ 20% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -115; }
21
+ 40% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -195; }
22
+ 48%, 62% { stroke-dasharray: 0 220; stroke-width: 20; stroke-dashoffset: -220; }
23
+ 70% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -225; }
24
+ 90% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -305; }
25
+ 98%, to { stroke-dasharray: 0 220; stroke-width: 20; stroke-dashoffset: -330; }
26
+ }
27
+ @keyframes ringC {
28
+ from { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: 0; }
29
+ 8% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -5; }
30
+ 28% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -175; }
31
+ 36%, 58% { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -220; }
32
+ 66% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -225; }
33
+ 86% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -395; }
34
+ 94%, to { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -440; }
35
+ }
36
+ @keyframes ringD {
37
+ from, 8% { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: 0; }
38
+ 16% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -5; }
39
+ 36% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -175; }
40
+ 44%, 50% { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -220; }
41
+ 58% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -225; }
42
+ 78% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -395; }
43
+ 86%, to { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -440; }
44
+ }
45
+ </style>
46
+ <circle class="pl__ring pl__ring--a" cx="150" cy="150" r="105" fill="none" stroke-width="20" stroke-dasharray="0 660" stroke-dashoffset="-330" stroke-linecap="round"/>
47
+ <circle class="pl__ring pl__ring--b" cx="150" cy="150" r="35" fill="none" stroke-width="20" stroke-dasharray="0 220" stroke-dashoffset="-110" stroke-linecap="round"/>
48
+ <circle class="pl__ring pl__ring--c" cx="115" cy="150" r="70" fill="none" stroke-width="20" stroke-dasharray="0 440" stroke-linecap="round"/>
49
+ <circle class="pl__ring pl__ring--d" cx="185" cy="150" r="70" fill="none" stroke-width="20" stroke-dasharray="0 440" stroke-linecap="round"/>
50
+ </svg>
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ viewBox="0 0 52 52"
5
+ width="100"
6
+ height="100"
7
+ >
8
+ <style>
9
+ .svg-checkmark {
10
+ stroke: white;
11
+ stroke-width: 5;
12
+ stroke-miterlimit: 10;
13
+ stroke-linecap: round;
14
+ stroke-linejoin: round;
15
+ fill: none;
16
+ animation: svg-success-scale 0.3s ease-in-out 0.9s both;
17
+ }
18
+
19
+ .svg-checkmark-circle {
20
+ stroke: none;
21
+ fill: #00D290;
22
+ }
23
+
24
+ .svg-checkmark-check {
25
+ stroke-dasharray: 48;
26
+ stroke-dashoffset: 48;
27
+ animation: svg-success-draw 0.5s ease forwards 0.6s;
28
+ }
29
+
30
+ @keyframes svg-success-draw {
31
+ to {
32
+ stroke-dashoffset: 0;
33
+ }
34
+ }
35
+
36
+ @keyframes svg-success-scale {
37
+ 0%, 100% {
38
+ transform: scale(1);
39
+ }
40
+ 50% {
41
+ transform: scale(1.1);
42
+ }
43
+ }
44
+ </style>
45
+
46
+ <circle class="svg-checkmark-circle" cx="26" cy="26" r="25" />
47
+ <path
48
+ class="svg-checkmark svg-checkmark-check"
49
+ d="M14.1 27.2l7.1 7.2 16.7-16.8"
50
+ />
51
+ </svg>
@@ -11,3 +11,4 @@
11
11
  //= require spree_cm_commissioner/selected_field_filter_origin_destination
12
12
  //= require spree_cm_commissioner/location_checkbox_manager
13
13
  //= require spree_cm_commissioner/trip_stop_selection
14
+ //= require spree_cm_commissioner/tenant_payment_icon_fields
@@ -0,0 +1,87 @@
1
+ function getAssetUrl(path) {
2
+ if (!path) return '';
3
+ if (path.startsWith('http') || path.startsWith('//') || path.startsWith('/')) {
4
+ return path;
5
+ }
6
+ return '/assets/' + path;
7
+ }
8
+
9
+ function removeIcon(fieldId) {
10
+ const field = document.getElementById(fieldId);
11
+ const preview = document.getElementById('preview_' + fieldId);
12
+ const removeBtn = document.getElementById('remove_' + fieldId);
13
+
14
+ if (field) {
15
+ field.value = '';
16
+ }
17
+ if (preview) {
18
+ preview.src = '';
19
+ preview.style.display = 'none';
20
+ }
21
+ if (removeBtn) {
22
+ removeBtn.classList.add('hidden');
23
+ }
24
+
25
+ const $select = $(".select2-icon-picker[data-target-field='" + fieldId + "']");
26
+ if ($select.length) {
27
+ $select.val(null).trigger('change');
28
+ }
29
+ }
30
+
31
+ function formatIconOption(icon) {
32
+ if (!icon.id) return icon.text;
33
+ return $(`<span>
34
+ <img src="${getAssetUrl(icon.id)}" style="height:20px;width:auto;margin-right:5px;" />
35
+ ${icon.text}
36
+ </span>`);
37
+ }
38
+
39
+ function formatIconSelection(icon) {
40
+ if (!icon.id) return icon.text;
41
+ return $(`<span>
42
+ <img src="${getAssetUrl(icon.id)}" style="height:20px;width:auto;margin-right:5px;" />
43
+ ${icon.text}
44
+ </span>`);
45
+ }
46
+
47
+ document.addEventListener("turbo:load", function () {
48
+ $('.select2-icon-picker').each(function () {
49
+ if ($(this).hasClass("select2-hidden-accessible")) {
50
+ $(this).select2('destroy');
51
+ }
52
+ });
53
+
54
+ $('.select2-icon-picker').select2({
55
+ width: '100%',
56
+ allowClear: true,
57
+ placeholder: 'None',
58
+ templateResult: formatIconOption,
59
+ templateSelection: formatIconSelection
60
+ });
61
+
62
+ $('.select2-icon-picker').on('select2:select', function (e) {
63
+ const selectedIcon = e.params.data.id;
64
+ const fieldId = $(this).data('target-field');
65
+ const previewId = $(this).data('target_preview');
66
+ const removeBtnId = $(this).data('remove_btn');
67
+
68
+ const field = document.getElementById(fieldId);
69
+ const preview = document.getElementById(previewId);
70
+ const removeBtn = document.getElementById(removeBtnId);
71
+
72
+ if (field) {
73
+ field.value = selectedIcon;
74
+ }
75
+ if (preview) {
76
+ preview.src = getAssetUrl(selectedIcon);
77
+ preview.style.display = selectedIcon ? 'inline' : 'none';
78
+ }
79
+ if (removeBtn) {
80
+ if (selectedIcon) {
81
+ removeBtn.classList.remove('hidden');
82
+ } else {
83
+ removeBtn.classList.add('hidden');
84
+ }
85
+ }
86
+ });
87
+ });
@@ -3,3 +3,4 @@
3
3
  @import "spree_cm_commissioner/backend/service_calendar";
4
4
  @import "spree_cm_commissioner/backend/guest_qr_code";
5
5
  @import "spree_cm_commissioner/backend/vehicle_seat";
6
+ @import "spree_cm_commissioner/backend/tenant_payment_icon_fields";
@@ -0,0 +1,47 @@
1
+ .payment-icon-preview {
2
+ max-height: 60px;
3
+ max-width: 120px;
4
+ min-height: 60px;
5
+ min-width: 120px;
6
+ background: #f8f9fa;
7
+ border: 1px dashed #ccc;
8
+ display: inline-block;
9
+ object-fit: contain;
10
+ cursor: pointer;
11
+ position: relative;
12
+ }
13
+
14
+ .icon-preview-container {
15
+ position: relative;
16
+ display: inline-block;
17
+ }
18
+
19
+ .remove-icon-btn {
20
+ position: absolute;
21
+ top: -8px;
22
+ right: -8px;
23
+ width: 24px;
24
+ height: 24px;
25
+ border-radius: 50%;
26
+ background: #dc3545;
27
+ color: white;
28
+ border: 2px solid white;
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: center;
32
+ cursor: pointer;
33
+ font-size: 12px;
34
+ box-shadow: 0 2px 4px rgba(0,0,0,0.2);
35
+ transition: all 0.2s ease;
36
+ z-index: 10;
37
+ }
38
+
39
+ .remove-icon-btn:hover {
40
+ background: #c82333;
41
+ transform: scale(1.1);
42
+ box-shadow: 0 3px 6px rgba(0,0,0,0.3);
43
+ }
44
+
45
+ .remove-icon-btn.hidden {
46
+ display: none;
47
+ }
@@ -1,6 +1,8 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class TenantsController < Spree::Admin::ResourceController
4
+ before_action :load_vector_icons, only: %i[new edit]
5
+
4
6
  # override
5
7
  def collection
6
8
  params[:q] = {} if params[:q].blank?
@@ -31,6 +33,12 @@ module Spree
31
33
  def collection_url(options = {})
32
34
  admin_tenants_url(options)
33
35
  end
36
+
37
+ private
38
+
39
+ def load_vector_icons
40
+ @vector_icons = SpreeCmCommissioner::VectorIcon.all
41
+ end
34
42
  end
35
43
  end
36
44
  end
@@ -5,6 +5,10 @@ module SpreeCmCommissioner
5
5
  included do
6
6
  preference :assetlinks, :string, default: ''
7
7
  preference :apple_app_site_association, :string, default: ''
8
+ preference :payment_checkout_image, :string, default: ''
9
+ preference :payment_failed_image, :string, default: ''
10
+ preference :payment_success_image, :string, default: ''
11
+ preference :payment_loader, :string, default: ''
8
12
  end
9
13
  end
10
14
  end
@@ -4,7 +4,6 @@ module SpreeCmCommissioner
4
4
  base.include SpreeCmCommissioner::TaxonKind
5
5
  base.include SpreeCmCommissioner::Transit::TaxonBitwise
6
6
  base.include SpreeCmCommissioner::ParticipationTypeBitwise
7
- base.include SpreeCmCommissioner::EventCheckInFlowable
8
7
 
9
8
  base.preference :background_color, :string
10
9
  base.preference :foreground_color, :string
@@ -8,36 +8,20 @@ module SpreeCmCommissioner
8
8
 
9
9
  def event_id = params[:event_id]
10
10
 
11
- def call # rubocop:disable Metrics/PerceivedComplexity
11
+ def call
12
12
  return SpreeCmCommissioner::Guest.none if event_id.blank?
13
13
 
14
- if params[:qr_data].present? && order_qr_data?
15
- search_by_order_qr
16
- elsif params[:qr_data].present? && line_item_qr_data?
17
- search_by_line_item_qr
18
- elsif params[:qr_data].present? && guest_qr_data?
14
+ if params[:qr_data].present?
19
15
  search_by_guest_qr
20
16
  elsif params[:term].present?
21
17
  search_by_term
22
- elsif params[:ids].present?
23
- SpreeCmCommissioner::Guest.complete_or_canceled.where(event_id: event_id, id: params[:ids])
24
18
  else
25
- SpreeCmCommissioner::Guest.complete_or_canceled.where(event_id: event_id)
19
+ SpreeCmCommissioner::Guest.none
26
20
  end
27
21
  end
28
22
 
29
23
  private
30
24
 
31
- def search_by_order_qr
32
- order = Spree::Order.complete_or_canceled.search_by_qr_data!(params[:qr_data])
33
- order.guests.where(event_id: event_id)
34
- end
35
-
36
- def search_by_line_item_qr
37
- line_item = Spree::LineItem.complete_or_canceled.search_by_qr_data!(params[:qr_data])
38
- line_item.guests.where(event_id: event_id)
39
- end
40
-
41
25
  def search_by_guest_qr
42
26
  SpreeCmCommissioner::Guest.complete_or_canceled.where(
43
27
  token: params[:qr_data],
@@ -45,32 +29,6 @@ module SpreeCmCommissioner
45
29
  )
46
30
  end
47
31
 
48
- def order_qr_data?
49
- matches = construct_matches
50
- matches&.size == 2
51
- end
52
-
53
- def line_item_qr_data?
54
- matches = construct_matches
55
- matches&.size == 3
56
- end
57
-
58
- def guest_qr_data?
59
- matches = construct_matches
60
- matches.nil?
61
- end
62
-
63
- def construct_matches
64
- qr_data = params[:qr_data]
65
- return nil unless qr_data
66
-
67
- if qr_data =~ /-L\d+$/
68
- qr_data.match(/(R\d+)-([A-Za-z0-9_\-]+)-(L\d+)/)&.captures
69
- else
70
- qr_data.match(/(R\d+)-([A-Za-z0-9_\-]+)/)&.captures
71
- end
72
- end
73
-
74
32
  def search_by_term
75
33
  terms = params[:term].split.map { |term| "%#{term.downcase}%" }
76
34
 
@@ -2,10 +2,7 @@ module SpreeCmCommissioner
2
2
  module V2
3
3
  module Operator
4
4
  class DashboardCrewEventSerializer < BaseSerializer
5
- attributes :id, :name, :permalink,
6
- :from_date, :to_date,
7
- :check_in_flows,
8
- :updated_at
5
+ attributes :id, :name, :permalink, :from_date, :to_date, :updated_at
9
6
 
10
7
  has_many :children_classifications, serializer: :classification
11
8
  has_one :category_icon, serializer: SpreeCmCommissioner::V2::Storefront::AssetSerializer
@@ -3,17 +3,21 @@
3
3
  <div class="col-6">
4
4
  <%= f.field_container :name do %>
5
5
  <%= f.label :name, raw(Spree.t(:name) + required_span_tag) %>
6
- <%= f.text_field :name, required: true, class: 'form-control', placeholder: 'eg. bookme plus'%>
7
- <%= f.error_message_on :name %>
6
+ <%= f.text_field :name, required: true, class: 'form-control', placeholder: 'eg. bookme plus' %>
7
+ <% if f.object.errors[:name].any? %>
8
+ <div class="error text-danger"><%= f.object.errors[:name].join(', ') %></div>
9
+ <% end %>
8
10
  <% end %>
9
11
  </div>
10
12
 
11
- <!-- Slug Field (only show if editing) -->
13
+ <!-- Slug Field -->
12
14
  <div class="col-6">
13
15
  <%= f.field_container :slug do %>
14
16
  <%= f.label :slug, raw(Spree.t(:slug)) %>
15
17
  <%= f.text_field :slug, class: 'form-control', placeholder: 'slug' %>
16
- <%= f.error_message_on :slug %>
18
+ <% if f.object.errors[:slug].any? %>
19
+ <div class="error text-danger"><%= f.object.errors[:slug].join(', ') %></div>
20
+ <% end %>
17
21
  <% end %>
18
22
  </div>
19
23
 
@@ -22,16 +26,20 @@
22
26
  <%= f.field_container :description do %>
23
27
  <%= f.label :description, raw(Spree.t(:description)) %>
24
28
  <%= f.text_area :description, class: 'form-control', placeholder: 'description' %>
25
- <%= f.error_message_on :description %>
29
+ <% if f.object.errors[:description].any? %>
30
+ <div class="error text-danger"><%= f.object.errors[:description].join(', ') %></div>
31
+ <% end %>
26
32
  <% end %>
27
33
  </div>
28
34
 
29
- <!-- Host Field -->
35
+ <!-- Host Field -->
30
36
  <div class="col-12">
31
37
  <%= f.field_container :host do %>
32
38
  <%= f.label :host, raw(Spree.t(:host) + required_span_tag) %>
33
39
  <%= f.text_field :host, required: true, class: 'form-control', placeholder: 'host' %>
34
- <%= f.error_message_on :host %>
40
+ <% if f.object.errors[:host].any? %>
41
+ <div class="error text-danger"><%= f.object.errors[:host].join(', ') %></div>
42
+ <% end %>
35
43
  <% end %>
36
44
  </div>
37
45
 
@@ -39,21 +47,25 @@
39
47
  <div class="col-12">
40
48
  <%= f.field_container :preferred_assetlinks do %>
41
49
  <%= f.label :preferred_assetlinks, raw(Spree.t(:assetlinks)) %>
42
- <%= f.text_area :preferred_assetlinks, class: 'form-control',
43
- placeholder: 'example:
44
- [
45
- {
46
- "relation": ["delegate_permission/common.handle_all_urls"],
47
- "target": {
48
- "namespace": "android_app",
49
- "package_name": "com.yourapp.app",
50
- "sha256_cert_fingerprints": [
51
- "SHA256_CERTIFICATE_FINGERPRINT_HERE"
52
- ]
53
- }
50
+ <%= f.text_area :preferred_assetlinks, class: 'form-control', rows: 5, placeholder: <<~JSON.strip
51
+ example:
52
+ [
53
+ {
54
+ "relation": ["delegate_permission/common.handle_all_urls"],
55
+ "target": {
56
+ "namespace": "android_app",
57
+ "package_name": "com.yourapp.app",
58
+ "sha256_cert_fingerprints": [
59
+ "SHA256_CERTIFICATE_FINGERPRINT_HERE"
60
+ ]
54
61
  }
55
- ]', rows: 5 %>
56
- <%= f.error_message_on :preferred_assetlinks %>
62
+ }
63
+ ]
64
+ JSON
65
+ %>
66
+ <% if f.object.errors[:preferred_assetlinks].any? %>
67
+ <div class="error text-danger"><%= f.object.errors[:preferred_assetlinks].join(', ') %></div>
68
+ <% end %>
57
69
  <% end %>
58
70
  </div>
59
71
 
@@ -61,25 +73,29 @@
61
73
  <div class="col-12">
62
74
  <%= f.field_container :preferred_apple_app_site_association do %>
63
75
  <%= f.label :preferred_apple_app_site_association, raw(Spree.t(:apple_app_site_association)) %>
64
- <%= f.text_area :preferred_apple_app_site_association, class: 'form-control',
65
- placeholder: 'example:
66
- {
67
- "webcredentials": {
68
- "apps": [
69
- "TEAM_ID.com.yourapp.app"
70
- ]
71
- },
72
- "applinks": {
73
- "apps": [],
74
- "details": [
75
- {
76
- "appID": "TEAM_ID.com.yourapp.app",
77
- "paths": ["*"]
78
- }
79
- ]
80
- }
81
- }', rows: 5 %>
82
- <%= f.error_message_on :preferred_apple_app_site_association %>
76
+ <%= f.text_area :preferred_apple_app_site_association, class: 'form-control', rows: 5, placeholder: <<~JSON.strip
77
+ example:
78
+ {
79
+ "webcredentials": {
80
+ "apps": [
81
+ "TEAM_ID.com.yourapp.app"
82
+ ]
83
+ },
84
+ "applinks": {
85
+ "apps": [],
86
+ "details": [
87
+ {
88
+ "appID": "TEAM_ID.com.yourapp.app",
89
+ "paths": ["*"]
90
+ }
91
+ ]
92
+ }
93
+ }
94
+ JSON
95
+ %>
96
+ <% if f.object.errors[:preferred_apple_app_site_association].any? %>
97
+ <div class="error text-danger"><%= f.object.errors[:preferred_apple_app_site_association].join(', ') %></div>
98
+ <% end %>
83
99
  <% end %>
84
100
  </div>
85
101
 
@@ -87,8 +103,67 @@
87
103
  <div class="col-6">
88
104
  <%= f.field_container :state do %>
89
105
  <%= f.label :state, raw(Spree.t(:state)) %>
90
- <%= f.select :state, options_for_select([['Enabled', 'enabled'], ['Disabled', 'disabled']], @object.state), { required: true }, class: 'select2 form-control' %>
91
- <%= f.error_message_on :state %>
106
+ <%= f.select :state,
107
+ options_for_select([['Enabled', 'enabled'], ['Disabled', 'disabled']], f.object&.state),
108
+ { required: true },
109
+ class: 'select2 form-control' %>
110
+ <% if f.object.errors[:state].any? %>
111
+ <div class="error text-danger"><%= f.object.errors[:state].join(', ') %></div>
112
+ <% end %>
92
113
  <% end %>
93
114
  </div>
94
115
  </div>
116
+
117
+ <div data-hook="admin_tenant_form_fields" class="row">
118
+ <% [
119
+ { field: :preferred_payment_checkout_image, label: :payment_checkout_image },
120
+ { field: :preferred_payment_failed_image, label: :payment_failed_image },
121
+ { field: :preferred_payment_success_image, label: :payment_success_image },
122
+ { field: :preferred_payment_loader, label: :payment_loader }
123
+ ].each do |config| %>
124
+ <div class="col-6">
125
+ <div class="card mb-3">
126
+ <div class="card-body text-center">
127
+ <%= f.field_container config[:field] do %>
128
+ <%= f.label config[:field], raw(Spree.t(config[:label])), class: 'font-weight-bold' %>
129
+
130
+ <div class="mb-2">
131
+ <div class="icon-preview-container">
132
+ <% value = f.object.send(config[:field]) %>
133
+ <% if value.present? %>
134
+ <%= image_tag asset_path(value), alt: "#{Spree.t(config[:label])}", class: 'img-thumbnail bg-light border payment-icon-preview', id: "preview_#{config[:field]}" %>
135
+ <% end %>
136
+ <button
137
+ type="button"
138
+ class="remove-icon-btn <%= 'hidden' unless value.present? %>"
139
+ id="remove_<%= config[:field] %>"
140
+ title="Remove icon"
141
+ onclick="removeIcon('<%= config[:field] %>')"
142
+ >
143
+ &times;
144
+ </button>
145
+ </div>
146
+ </div>
147
+
148
+ <%= f.select config[:field],
149
+ options_for_select(
150
+ @vector_icons&.map { |icon| [icon.path, icon.path] },
151
+ f.object.send(config[:field])
152
+ ),
153
+ { include_blank: 'None' },
154
+ class: 'form-control select2-icon-picker',
155
+ data: {
156
+ target_field: config[:field],
157
+ target_preview: "preview_#{config[:field]}",
158
+ remove_btn: "remove_#{config[:field]}"
159
+ } %>
160
+
161
+ <% if f.object.errors[config[:field]].any? %>
162
+ <div class="error text-danger"><%= f.object.errors[config[:field]].join(', ') %></div>
163
+ <% end %>
164
+ <% end %>
165
+ </div>
166
+ </div>
167
+ </div>
168
+ <% end %>
169
+ </div>
@@ -31,8 +31,6 @@ module Spree
31
31
  subtitle
32
32
  preferred_background_color
33
33
  preferred_foreground_color
34
- preferred_group_check_in_enabled
35
- preferred_individual_check_in_enabled
36
34
  show_badge_status
37
35
  purchasable_on
38
36
  available_on
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.17.0-pre2'.freeze
2
+ VERSION = '1.17.0-pre4'.freeze
3
3
 
4
4
  module_function
5
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.17.0.pre.pre2
4
+ version: 1.17.0.pre.pre4
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-07-01 00:00:00.000000000 Z
11
+ date: 2025-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -600,6 +600,10 @@ files:
600
600
  - app/assets/images/cm-fitness-room-icon.svg
601
601
  - app/assets/images/cm-front-desk-icon.svg
602
602
  - app/assets/images/cm-hair-dryer-icon.svg
603
+ - app/assets/images/cm-hangmeas-checkout_image.svg
604
+ - app/assets/images/cm-hangmeas-failed.svg
605
+ - app/assets/images/cm-hangmeas-loader.svg
606
+ - app/assets/images/cm-hangmeas-success.svg
603
607
  - app/assets/images/cm-hiking-icon.svg
604
608
  - app/assets/images/cm-iron-icon.svg
605
609
  - app/assets/images/cm-lcd-tv-icon.svg
@@ -705,6 +709,7 @@ files:
705
709
  - app/assets/javascripts/spree_cm_commissioner/selected_field_filter_origin_destination.js
706
710
  - app/assets/javascripts/spree_cm_commissioner/telegram.js
707
711
  - app/assets/javascripts/spree_cm_commissioner/telegram/order_confirmation.js
712
+ - app/assets/javascripts/spree_cm_commissioner/tenant_payment_icon_fields.js
708
713
  - app/assets/javascripts/spree_cm_commissioner/trip_stop_selection.js
709
714
  - app/assets/javascripts/spree_cm_commissioner/update_popup_confirmation.js
710
715
  - app/assets/javascripts/spree_cm_commissioner/vehicle_seat.js
@@ -714,6 +719,7 @@ files:
714
719
  - app/assets/stylesheets/spree_cm_commissioner/backend/guest_qr_code.scss
715
720
  - app/assets/stylesheets/spree_cm_commissioner/backend/invoice.scss
716
721
  - app/assets/stylesheets/spree_cm_commissioner/backend/service_calendar.scss
722
+ - app/assets/stylesheets/spree_cm_commissioner/backend/tenant_payment_icon_fields.scss
717
723
  - app/assets/stylesheets/spree_cm_commissioner/backend/vehicle_seat.scss
718
724
  - app/assets/stylesheets/spree_cm_commissioner/telegram.css
719
725
  - app/assets/stylesheets/spree_cm_commissioner/telegram/telegram_bot.css.scss
@@ -1179,7 +1185,6 @@ files:
1179
1185
  - app/mailers/spree_cm_commissioner/pin_code_mailer.rb
1180
1186
  - app/mailers/spree_cm_commissioner/team_invite_mailer.rb
1181
1187
  - app/models/.gitkeep
1182
- - app/models/concerns/spree_cm_commissioner/event_check_in_flowable.rb
1183
1188
  - app/models/concerns/spree_cm_commissioner/homepage_section_bitwise.rb
1184
1189
  - app/models/concerns/spree_cm_commissioner/json_preference_validator.rb
1185
1190
  - app/models/concerns/spree_cm_commissioner/kyc_bitwise.rb
@@ -1485,7 +1490,6 @@ files:
1485
1490
  - app/overrides/spree/admin/taxons/_form/assets_form.html.erb.deface
1486
1491
  - app/overrides/spree/admin/taxons/_form/available_on.html.erb.deface
1487
1492
  - app/overrides/spree/admin/taxons/_form/background_color_and_foreground_color.html.erb.deface
1488
- - app/overrides/spree/admin/taxons/_form/check_in_flows.html.erb.deface
1489
1493
  - app/overrides/spree/admin/taxons/_form/custom_redirect_url.html.erb.deface
1490
1494
  - app/overrides/spree/admin/taxons/_form/hide_video_banner.html.erb.deface
1491
1495
  - app/overrides/spree/admin/taxons/_form/kind_html.erb.deface
@@ -1,30 +0,0 @@
1
- module SpreeCmCommissioner
2
- module EventCheckInFlowable
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- preference :group_check_in_enabled, :boolean, default: true
7
- preference :individual_check_in_enabled, :boolean, default: true
8
-
9
- before_validation :validate_at_least_one_check_in_flow_presence
10
- end
11
-
12
- def check_in_flows
13
- flows = []
14
- flows << 'group' if group_check_in_enabled?
15
- flows << 'individual' if individual_check_in_enabled?
16
- flows
17
- end
18
-
19
- def group_check_in_enabled? = preferred_group_check_in_enabled
20
- def individual_check_in_enabled? = preferred_individual_check_in_enabled
21
-
22
- private
23
-
24
- def validate_at_least_one_check_in_flow_presence
25
- return if check_in_flows.any?
26
-
27
- errors.add(:check_in_flows, 'must have at least one flow selected')
28
- end
29
- end
30
- end
@@ -1,18 +0,0 @@
1
- <!-- insert_before "erb[loud]:contains('field_container :hide_from_nav')" -->
2
-
3
- <%# Sections don't use video banner, so we hide the form here to avoid confusing admin. %>
4
-
5
- <%= f.field_container :preferred_group_check_in_enabled, class: ['custom-control', 'custom-checkbox', 'my-4'] do %>
6
- <%= f.check_box :preferred_group_check_in_enabled, class: 'custom-control-input' %>
7
- <%= f.label :preferred_group_check_in_enabled, Spree.t(:enable_group_check_in), class: 'custom-control-label' %>
8
- <%= f.error_message_on :preferred_group_check_in_enabled %>
9
- <small class="form-text text-muted">
10
- Enabled by default for most events where users can purchase multiple tickets or use group scanning. For large events (like PSK, ASK, etc.) or invitation-based events, you should disable this to ensure each ticket or invitation is scanned individually.
11
- </small>
12
- <% end if @taxon.event? && @taxon.depth == 1 %> %>
13
-
14
- <%= f.field_container :preferred_individual_check_in_enabled, class: ['custom-control', 'custom-checkbox', 'my-4'] do %>
15
- <%= f.check_box :preferred_individual_check_in_enabled, class: 'custom-control-input' %>
16
- <%= f.label :preferred_individual_check_in_enabled, Spree.t(:enable_individual_check_in), class: 'custom-control-label' %>
17
- <%= f.error_message_on :preferred_individual_check_in_enabled %>
18
- <% end if @taxon.event? && @taxon.depth == 1 %> %>