spree_cm_commissioner 1.17.0.pre.pre → 1.17.0.pre.pre1

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: 6cc0c166a073d01107caea18b4b7f2381d12b9372ac67aa80b570687aaf59702
4
- data.tar.gz: 0d736865e66226bed4f07171d02879c6d009d760595d88f6f63605e57bc228a6
3
+ metadata.gz: 3bfd7c55dbc9cdd4a8350cf03314306aa656b233423084e4e5cd6e85977270d6
4
+ data.tar.gz: a243e2ec33cd9ddf4980fd14d31d47c4a39c663e04609a1de6e92aafa1584441
5
5
  SHA512:
6
- metadata.gz: e55841d41f47a5aedd68cb9c81309f356f1731d24c1771d8955f6d20d0cb8050f5aefe867bbe3d1501b4fb421aca87daea26a9314281efda5d2b89792f332c63
7
- data.tar.gz: 2f6b56fb52a8cf35206c8b24c99d0b991fbed3343c8ca56377f53febc7080c25af53ff1d839ae63c6bfa6ca6a148ffcb427c88fce10e58f60892d536106a14bb
6
+ metadata.gz: 85ce5b60b28ab3c4daaf710134d89f81b5b77db09b67fb12ce633c2c50c6fbca66d5ea397fed87b17e44c44252e076d9af68b3e0f841aa41379652713f54937a
7
+ data.tar.gz: 5e0d6775a3ac52c9fadbf1842a589730f0b4551c5ee770b38ff39398cf994396f3cb62a4fa7b4bc3ecbbb480f6863d090f6c41187aa6ffcad0dab59338e4eb7a
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.pre)
37
+ spree_cm_commissioner (1.17.0.pre.pre1)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -572,6 +572,10 @@ GEM
572
572
  nokogiri (1.15.4)
573
573
  mini_portile2 (~> 2.8.2)
574
574
  racc (~> 1.4)
575
+ nokogiri (1.15.4-x86_64-darwin)
576
+ racc (~> 1.4)
577
+ nokogiri (1.15.4-x86_64-linux)
578
+ racc (~> 1.4)
575
579
  noticed (1.6.3)
576
580
  http (>= 4.0.0)
577
581
  rails (>= 5.2.0)
@@ -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 2s 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="120" cy="120" 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="120" cy="120" 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="85" cy="120" r="70" fill="none" stroke-width="20" stroke-dasharray="0 440" stroke-linecap="round"/>
49
+ <circle class="pl__ring pl__ring--d" cx="155" cy="120" 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>
@@ -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
@@ -51,7 +51,7 @@ module SpreeCmCommissioner
51
51
  validates :seat_number, uniqueness: { scope: :event_id }, allow_nil: true, if: -> { event_id.present? }
52
52
  validates :bib_index, uniqueness: true, allow_nil: true
53
53
 
54
- self.whitelisted_ransackable_associations = %w[id_card event]
54
+ self.whitelisted_ransackable_associations = %w[id_card event line_item]
55
55
  self.whitelisted_ransackable_attributes = %w[first_name last_name phone_number gender contact occupation_id card_type created_at check_in_status]
56
56
 
57
57
  def self.csv_importable_columns
@@ -2,5 +2,6 @@ module SpreeCmCommissioner
2
2
  class UserTaxon < Base
3
3
  belongs_to :user, class_name: Spree.user_class.to_s, optional: false
4
4
  belongs_to :taxon, class_name: 'Spree::Taxon', optional: false
5
+ has_many :invite_user_taxons, class_name: 'SpreeCmCommissioner::InviteUserTaxon', dependent: :destroy
5
6
  end
6
7
  end
@@ -1,8 +1,6 @@
1
- require_dependency 'spree_cm_commissioner'
2
-
3
1
  module SpreeCmCommissioner
4
- class VendorPlace < ApplicationRecord
5
- enum place_type: { branch: 0, stop: 1, locations: 2 }
2
+ class VendorPlace < Base
3
+ enum place_type: { location: 0, branch: 1, stop: 2 }
6
4
  acts_as_list scope: :vendor
7
5
 
8
6
  belongs_to :vendor, class_name: 'Spree::Vendor', optional: false
@@ -13,9 +11,9 @@ module SpreeCmCommissioner
13
11
 
14
12
  accepts_nested_attributes_for :place, allow_destroy: true
15
13
 
16
- scope :branches, -> { where(place_type: :branch) }
17
- scope :stops, -> { where(place_type: :stop) }
18
- scope :locations, -> { where(place_type: :locations) }
14
+ scope :branches, -> { where(place_type: :branch) }
15
+ scope :stops, -> { where(place_type: :stop) }
16
+ scope :locations, -> { where(place_type: :location) }
19
17
 
20
18
  def selected
21
19
  vendor.selected_place_references.include?(place&.reference)
@@ -1,11 +1,12 @@
1
1
  module SpreeCmCommissioner
2
2
  module Organizer
3
3
  class ExportGuestCsvService
4
- attr_reader :event_id, :columns
4
+ attr_reader :event_id, :columns, :filters
5
5
 
6
- def initialize(event_id, columns)
6
+ def initialize(event_id, columns, filters = {})
7
7
  @event_id = event_id
8
8
  @columns = columns
9
+ @filters = filters
9
10
  end
10
11
 
11
12
  def call
@@ -18,7 +19,7 @@ module SpreeCmCommissioner
18
19
  private
19
20
 
20
21
  def headers
21
- columns.map(&:humanize).uniq
22
+ columns.map { |col| col.titleize(keep_id_suffix: true) }.uniq
22
23
  end
23
24
 
24
25
  def build_row(guest)
@@ -28,10 +29,8 @@ module SpreeCmCommissioner
28
29
  def fetch_value(guest, column)
29
30
  if guest_field?(column)
30
31
  fetch_guest_value(guest, column)
31
- elsif option_type_field?(column)
32
- fetch_option_value(guest, column)
33
32
  else
34
- ''
33
+ fetch_option_value(guest, column)
35
34
  end
36
35
  end
37
36
 
@@ -39,19 +38,21 @@ module SpreeCmCommissioner
39
38
  SpreeCmCommissioner::KycBitwise::ORDERED_BIT_FIELDS.include?(column.to_sym)
40
39
  end
41
40
 
42
- def option_type_field?(column)
43
- Spree::OptionType.exists?(name: column)
44
- end
45
-
46
41
  def fetch_guest_value(guest, column)
47
42
  column_mappings(guest)[column] || ''
48
43
  end
49
44
 
50
- def fetch_option_value(guest, option_type_name)
51
- return guest.formatted_bib_number if option_type_name == 'bib-prefix'
45
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
46
+ def fetch_option_value(guest, column_name)
47
+ return guest.formatted_bib_number if column_name == 'bib-prefix'
48
+ return guest.line_item&.number if column_name == 'item_id'
49
+ return guest.line_item&.order&.number if column_name == 'order_id'
50
+ return guest.created_at if column_name == 'created_at'
51
+ return guest.updated_at if column_name == 'updated_at'
52
52
 
53
- guest.line_item&.variant&.find_option_value_name_for(option_type_name: option_type_name)
53
+ guest.line_item&.variant&.find_option_value_name_for(option_type_name: column_name) || ''
54
54
  end
55
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
55
56
 
56
57
  def column_mappings(guest)
57
58
  {
@@ -77,12 +78,19 @@ module SpreeCmCommissioner
77
78
  end
78
79
 
79
80
  def guests_with_associations
80
- event.guests.includes(
81
+ scope = event.guests.includes(
81
82
  :occupation,
82
83
  :nationality,
83
84
  :id_card,
84
85
  line_item: { variant: { option_values: :option_type } }
85
- )
86
+ ).complete
87
+ scope = scope.where('cm_guests.created_at >= ?', formatted_date_time(filters[:from_date])) if filters[:from_date].present?
88
+ scope = scope.where('cm_guests.created_at <= ?', formatted_date_time(filters[:to_date])) if filters[:to_date].present?
89
+ scope
90
+ end
91
+
92
+ def formatted_date_time(date)
93
+ Time.zone.parse(date.to_s).strftime('%Y-%m-%d %H:%M:%S %z')
86
94
  end
87
95
 
88
96
  def event
@@ -92,3 +92,256 @@
92
92
  <% end %>
93
93
  </div>
94
94
  </div>
95
+ <div data-hook="admin_tenant_form_fields" class="row">
96
+
97
+ <!-- payment icon fields improved UI -->
98
+ <div class="col-3">
99
+ <div class="card mb-3">
100
+ <div class="card-body text-center">
101
+ <%= f.field_container :preferred_payment_checkout_image do %>
102
+ <%= f.label :payment_checkout_image, raw(Spree.t(:payment_checkout_image)), class: 'font-weight-bold' %>
103
+ <div class="mb-2 position-relative">
104
+ <img id="preview_preferred_payment_checkout_image"
105
+ src="<%= (f.object.preferred_payment_checkout_image.present? ? asset_path(f.object.preferred_payment_checkout_image) : asset_path('cm-hangmeas-checkout_image.svg')) %>"
106
+ alt="Icon Preview"
107
+ class="img-thumbnail bg-light border payment-icon-preview"
108
+ data-toggle="tooltip" title="Click to select icon"
109
+ onclick="$('#vector-icons-modal').modal('show'); setOptionValueId('preferred_payment_checkout_image'); setCurrentSelectedIcon(document.getElementById('preferred_payment_checkout_image').value);">
110
+ <button type="button" class="btn btn-sm btn-outline-danger position-absolute" style="top:5px; right:5px;" title="Remove icon" onclick="document.getElementById('preferred_payment_checkout_image').value=''; document.getElementById('preview_preferred_payment_checkout_image').src='<%= asset_path('cm-hangmeas-checkout_image.svg') %>'; document.getElementById('preview_preferred_payment_checkout_image').style.display='inline'; return false;">
111
+ <i class="fa fa-times"></i>
112
+ </button>
113
+ </div>
114
+ <div class="input-group">
115
+ <%= f.text_field :preferred_payment_checkout_image, class: 'form-control', placeholder: 'eg. https://example.com/icon.png', id: 'preferred_payment_checkout_image', 'aria-label': 'Payment Checkout Image' %>
116
+ <div class="input-group-append">
117
+ <button type="button" class="btn btn-outline-secondary option-value-toggler" data-toggle="modal" data-target="#vector-icons-modal" data-id="preferred_payment_checkout_image" data-vector-icon="<%= f.object.preferred_payment_checkout_image %>" title="Select icon">
118
+ <i class="fa fa-image"></i>
119
+ </button>
120
+ </div>
121
+ </div>
122
+ <%= f.error_message_on :preferred_payment_checkout_image %>
123
+ <% end %>
124
+ </div>
125
+ </div>
126
+ </div>
127
+
128
+ <div class="col-3">
129
+ <div class="card mb-3">
130
+ <div class="card-body text-center">
131
+ <%= f.field_container :preferred_payment_failed_image do %>
132
+ <%= f.label :payment_failed_image, raw(Spree.t(:payment_failed_image)), class: 'font-weight-bold' %>
133
+ <div class="mb-2 position-relative">
134
+ <img id="preview_preferred_payment_failed_image"
135
+ src="<%= (f.object.preferred_payment_failed_image.present? ? asset_path(f.object.preferred_payment_failed_image) : asset_path('cm-hangmeas-failed.svg')) %>"
136
+ alt="Icon Preview"
137
+ class="img-thumbnail bg-light border payment-icon-preview"
138
+ data-toggle="tooltip" title="Click to select icon"
139
+ onclick="$('#vector-icons-modal').modal('show'); setOptionValueId('preferred_payment_failed_image'); setCurrentSelectedIcon(document.getElementById('preferred_payment_failed_image').value);">
140
+ <button type="button" class="btn btn-sm btn-outline-danger position-absolute" style="top:5px; right:5px;" title="Remove icon" onclick="document.getElementById('preferred_payment_failed_image').value=''; document.getElementById('preview_preferred_payment_failed_image').src='<%= asset_path('cm-hangmeas-failed.svg') %>'; document.getElementById('preview_preferred_payment_failed_image').style.display='inline'; return false;">
141
+ <i class="fa fa-times"></i>
142
+ </button>
143
+ </div>
144
+ <div class="input-group">
145
+ <%= f.text_field :preferred_payment_failed_image, class: 'form-control', placeholder: 'eg. https://example.com/icon.png', id: 'preferred_payment_failed_image', 'aria-label': 'Payment Failed Image' %>
146
+ <div class="input-group-append">
147
+ <button type="button" class="btn btn-outline-secondary option-value-toggler" data-toggle="modal" data-target="#vector-icons-modal" data-id="preferred_payment_failed_image" data-vector-icon="<%= f.object.preferred_payment_failed_image %>" title="Select icon">
148
+ <i class="fa fa-image"></i>
149
+ </button>
150
+ </div>
151
+ </div>
152
+ <%= f.error_message_on :preferred_payment_failed_image %>
153
+ <% end %>
154
+ </div>
155
+ </div>
156
+ </div>
157
+
158
+ <div class="col-3">
159
+ <div class="card mb-3">
160
+ <div class="card-body text-center">
161
+ <%= f.field_container :preferred_payment_success_image do %>
162
+ <%= f.label :payment_success_image, raw(Spree.t(:payment_success_image)), class: 'font-weight-bold' %>
163
+ <div class="mb-2 position-relative">
164
+ <img id="preview_preferred_payment_success_image"
165
+ src="<%= (f.object.preferred_payment_success_image.present? ? asset_path(f.object.preferred_payment_success_image) : asset_path('cm-hangmeas-success.svg')) %>"
166
+ alt="Icon Preview"
167
+ class="img-thumbnail bg-light border payment-icon-preview"
168
+ data-toggle="tooltip" title="Click to select icon"
169
+ onclick="$('#vector-icons-modal').modal('show'); setOptionValueId('preferred_payment_success_image'); setCurrentSelectedIcon(document.getElementById('preferred_payment_success_image').value);">
170
+ <button type="button" class="btn btn-sm btn-outline-danger position-absolute" style="top:5px; right:5px;" title="Remove icon" onclick="document.getElementById('preferred_payment_success_image').value=''; document.getElementById('preview_preferred_payment_success_image').src='<%= asset_path('cm-hangmeas-success.svg') %>'; document.getElementById('preview_preferred_payment_success_image').style.display='inline'; return false;">
171
+ <i class="fa fa-times"></i>
172
+ </button>
173
+ </div>
174
+ <div class="input-group">
175
+ <%= f.text_field :preferred_payment_success_image, class: 'form-control', placeholder: 'eg. https://example.com/icon.png', id: 'preferred_payment_success_image', 'aria-label': 'Payment Success Image' %>
176
+ <div class="input-group-append">
177
+ <button type="button" class="btn btn-outline-secondary option-value-toggler" data-toggle="modal" data-target="#vector-icons-modal" data-id="preferred_payment_success_image" data-vector-icon="<%= f.object.preferred_payment_success_image %>" title="Select icon">
178
+ <i class="fa fa-image"></i>
179
+ </button>
180
+ </div>
181
+ </div>
182
+ <%= f.error_message_on :preferred_payment_success_image %>
183
+ <% end %>
184
+ </div>
185
+ </div>
186
+ </div>
187
+
188
+ <div class="col-3">
189
+ <div class="card mb-3">
190
+ <div class="card-body text-center">
191
+ <%= f.field_container :preferred_payment_loader do %>
192
+ <%= f.label :payment_loader, raw(Spree.t(:payment_loader)), class: 'font-weight-bold' %>
193
+ <div class="mb-2 position-relative">
194
+ <img id="preview_preferred_payment_loader"
195
+ src="<%= (f.object.preferred_payment_loader.present? ? asset_path(f.object.preferred_payment_loader) : asset_path('cm-hangmeas-loader.svg')) %>"
196
+ alt="Icon Preview"
197
+ class="img-thumbnail bg-light border payment-icon-preview"
198
+ data-toggle="tooltip" title="Click to select icon"
199
+ onclick="$('#vector-icons-modal').modal('show'); setOptionValueId('preferred_payment_loader'); setCurrentSelectedIcon(document.getElementById('preferred_payment_loader').value);">
200
+ <button type="button" class="btn btn-sm btn-outline-danger position-absolute" style="top:5px; right:5px;" title="Remove icon" onclick="document.getElementById('preferred_payment_loader').value=''; document.getElementById('preview_preferred_payment_loader').src='<%= asset_path('cm-hangmeas-loader.svg') %>'; document.getElementById('preview_preferred_payment_loader').style.display='inline'; return false;">
201
+ <i class="fa fa-times"></i>
202
+ </button>
203
+ </div>
204
+ <div class="input-group">
205
+ <%= f.text_field :preferred_payment_loader, class: 'form-control', placeholder: 'eg. https://example.com/icon.png', id: 'preferred_payment_loader', 'aria-label': 'Payment Loader Image' %>
206
+ <div class="input-group-append">
207
+ <button type="button" class="btn btn-outline-secondary option-value-toggler" data-toggle="modal" data-target="#vector-icons-modal" data-id="preferred_payment_loader" data-vector-icon="<%= f.object.preferred_payment_loader %>" title="Select icon">
208
+ <i class="fa fa-image"></i>
209
+ </button>
210
+ </div>
211
+ </div>
212
+ <%= f.error_message_on :preferred_payment_loader %>
213
+ <% end %>
214
+ </div>
215
+ </div>
216
+ </div>
217
+
218
+ </div>
219
+
220
+
221
+ <!-- Vector Icon Selector Modal -->
222
+ <div class="modal fade" id="vector-icons-modal" tabindex="-1" role="dialog" aria-hidden="true">
223
+ <div class="modal-dialog modal-dialog-centered" role="document">
224
+ <div class="modal-content">
225
+ <div class="modal-header">
226
+ <h5 class="modal-title">Icons</h5>
227
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
228
+ <span aria-hidden="true">&times;</span>
229
+ </button>
230
+ </div>
231
+ <div class="modal-body" data-hook="admin_product_form_vector_icons">
232
+ <div class="form-group">
233
+ <label for="vector_icon_select">Select Icon</label>
234
+ <select id="vector_icon_select" class="form-control select2">
235
+ <option value="">None</option>
236
+ <% @vector_icons&.each do |icon| %>
237
+ <option value="<%= icon.path %>"><%= icon.path %></option>
238
+ <% end %>
239
+ </select>
240
+ </div>
241
+ </div>
242
+ <div class="modal-footer">
243
+ <input type="hidden" id="modal-option-value-id" value="" />
244
+ <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
245
+ <button type="button" class="btn btn-primary" id="select-vector-icon-btn">Select</button>
246
+ </div>
247
+ </div>
248
+ </div>
249
+ </div>
250
+
251
+ <script>
252
+ function setCurrentSelectedIcon(selectVectorIcon) {
253
+ var optionsContainer = document.getElementById("vector_icon_select");
254
+ if (!optionsContainer) return;
255
+ var options = Array.from(optionsContainer.options).map((e) => e.value || e.innerHTML);
256
+ var index = Math.max(options.indexOf(selectVectorIcon), 0);
257
+ optionsContainer.selectedIndex = index;
258
+ }
259
+
260
+ function setOptionValueId(id) {
261
+ document.getElementById("modal-option-value-id").value = id;
262
+ }
263
+
264
+ document.body.addEventListener('click', function(e){
265
+ var target = e.target;
266
+ if (target.classList.contains('option-value-toggler')) {
267
+ setOptionValueId(target.dataset.id);
268
+ setCurrentSelectedIcon(target.dataset.vectorIcon);
269
+ }
270
+ });
271
+
272
+ function getAssetUrl(path) {
273
+ if (!path) return '';
274
+ if (path.startsWith('http://') || path.startsWith('https://') || path.startsWith('/assets/')) return path;
275
+ return '/assets/' + path;
276
+ }
277
+
278
+ document.getElementById('select-vector-icon-btn').addEventListener('click', function() {
279
+ var fieldId = document.getElementById("modal-option-value-id").value;
280
+ var selectedIcon = document.getElementById("vector_icon_select").value;
281
+
282
+ if (fieldId) {
283
+ document.getElementById(fieldId).value = selectedIcon;
284
+
285
+ var previewImg = document.getElementById('preview_' + fieldId);
286
+ if (previewImg) {
287
+ if (selectedIcon) {
288
+ previewImg.src = getAssetUrl(selectedIcon);
289
+ previewImg.style.display = 'inline';
290
+ } else {
291
+ previewImg.src = '';
292
+ previewImg.style.display = 'none';
293
+ }
294
+ }
295
+ }
296
+
297
+ // close select2 if open
298
+ $('#vector_icon_select').select2('close');
299
+
300
+ // hide modal
301
+ $('#vector-icons-modal').modal('hide');
302
+ });
303
+
304
+ $(document).ready(function() {
305
+ $('#vector_icon_select').select2({
306
+ dropdownParent: $('#vector-icons-modal')
307
+ });
308
+
309
+ // Auto-close modal & save immediately when selecting an option
310
+ $('#vector_icon_select').on('select2:select', function (e) {
311
+ $('#select-vector-icon-btn').trigger('click');
312
+ });
313
+ });
314
+
315
+ // Live preview when typing URLs manually
316
+ [
317
+ 'preferred_payment_checkout_image',
318
+ 'preferred_payment_failed_image',
319
+ 'preferred_payment_success_image',
320
+ 'preferred_payment_loader'
321
+ ].forEach(function(fieldId) {
322
+ var input = document.getElementById(fieldId);
323
+ if (input) {
324
+ input.addEventListener('input', function() {
325
+ var previewImg = document.getElementById('preview_' + fieldId);
326
+ if (previewImg) {
327
+ if (input.value) {
328
+ previewImg.src = getAssetUrl(input.value);
329
+ previewImg.style.display = 'inline';
330
+ } else {
331
+ previewImg.src = '';
332
+ previewImg.style.display = 'none';
333
+ }
334
+ }
335
+ });
336
+ }
337
+ });
338
+ </script>
339
+
340
+ <style>
341
+ .payment-icon-preview {
342
+ max-height: 60px;
343
+ max-width: 120px;
344
+ cursor: pointer;
345
+ }
346
+ </style>
347
+
@@ -14,8 +14,8 @@ FactoryBot.define do
14
14
  place_type { :stop }
15
15
  end
16
16
 
17
- trait :locations do
18
- place_type { :locations }
17
+ trait :location do
18
+ place_type { :location }
19
19
  end
20
20
  end
21
21
  end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.17.0-pre'.freeze
2
+ VERSION = '1.17.0-pre1'.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.pre
4
+ version: 1.17.0.pre.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-06-27 00:00:00.000000000 Z
11
+ date: 2025-06-30 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