Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 9.3 KiB |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><g stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M18.938 20.625C17.055 22.127 14.6 23.084 12 23.084c-2.614 0-5.015-.954-6.902-2.476l-.1-.943v-.831c0-2.33 4.67-3.5 7.002-3.5 2.33 0 6.999 1.17 6.999 3.5V20l-.063.625zM12 11.333a2.989 2.989 0 0 0 2.995-2.999c0-1.66-1.332-3-2.995-3a2.998 2.998 0 0 0-3.005 3A2.997 2.997 0 0 0 12 11.333z"/><path d="M23 12c0 6.075-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1s11 4.925 11 11z"/></g><path d="M0 0h24v24H0z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><g stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M18.938 20.625C17.055 22.127 14.6 23.084 12 23.084c-2.614 0-5.015-.954-6.902-2.476l-.1-.943v-.831c0-2.33 4.67-3.5 7.002-3.5 2.33 0 6.999 1.17 6.999 3.5V20l-.063.625zM12 11.333a2.989 2.989 0 0 0 2.995-2.999c0-1.66-1.332-3-2.995-3a2.998 2.998 0 0 0-3.005 3A2.997 2.997 0 0 0 12 11.333z"/><path d="M23 12c0 6.075-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1s11 4.925 11 11z"/></g><path d="M0 0h24v24H0z"/></g></svg>
|
Before Width: | Height: | Size: 620 B After Width: | Height: | Size: 620 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><g stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M20.54 4.23l-1.391-1.68A1.447 1.447 0 0 0 18 2H6c-.471 0-.88.21-1.16.55L3.46 4.23C3.17 4.57 3 5.02 3 5.5V18c0 1.1.899 2 2 2h14c1.1 0 2-.9 2-2V5.5c0-.48-.17-.93-.46-1.27z"/><path d="M12.088 7.333h3.438c0-2 2.562-2 2.562-2h2l.842-.38a1.933 1.933 0 0 0-.385-.723l-1.39-1.68a1.448 1.448 0 0 0-1.15-.55h-12c-.47 0-.88.21-1.16.55l-1.38 1.68a1.913 1.913 0 0 0-.395.763l.018.34h3s2.562 0 2.562 2h3.438M9 13.868l3 3 3-3M12 16v-5"/></g><path d="M0 0h24v24H0z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><g stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M20.54 4.23l-1.391-1.68A1.447 1.447 0 0 0 18 2H6c-.471 0-.88.21-1.16.55L3.46 4.23C3.17 4.57 3 5.02 3 5.5V18c0 1.1.899 2 2 2h14c1.1 0 2-.9 2-2V5.5c0-.48-.17-.93-.46-1.27z"/><path d="M12.088 7.333h3.438c0-2 2.562-2 2.562-2h2l.842-.38a1.933 1.933 0 0 0-.385-.723l-1.39-1.68a1.448 1.448 0 0 0-1.15-.55h-12c-.47 0-.88.21-1.16.55l-1.38 1.68a1.913 1.913 0 0 0-.395.763l.018.34h3s2.562 0 2.562 2h3.438M9 13.868l3 3 3-3M12 16v-5"/></g><path d="M0 0h24v24H0z"/></g></svg>
|
Before Width: | Height: | Size: 672 B After Width: | Height: | Size: 672 B |
|
@ -1 +1 @@
|
|||
<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="m13.153 6.701-4.512 7.815a1.638 1.638 0 0 0 .604 2.237 1.638 1.638 0 0 0 2.24-.596l3.324-5.758 1.843-3.193a3.277 3.277 0 0 0 -1.207-4.475 3.277 3.277 0 0 0 -4.478 1.192l-3.325 5.758-.395.686-2.533 4.387a4.23 4.23 0 0 0 1.557 5.774l.458.265a4.229 4.229 0 0 0 5.779-1.539l6.464-11.196" stroke="#0069cc" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m0 0h24v24h-24z"/></g></svg>
|
||||
<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="m13.153 6.701-4.512 7.815a1.638 1.638 0 0 0 .604 2.237 1.638 1.638 0 0 0 2.24-.596l3.324-5.758 1.843-3.193a3.277 3.277 0 0 0 -1.207-4.475 3.277 3.277 0 0 0 -4.478 1.192l-3.325 5.758-.395.686-2.533 4.387a4.23 4.23 0 0 0 1.557 5.774l.458.265a4.229 4.229 0 0 0 5.779-1.539l6.464-11.196" stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m0 0h24v24h-24z"/></g></svg>
|
Before Width: | Height: | Size: 530 B After Width: | Height: | Size: 530 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"/><path stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8.999A2.989 2.989 0 0 0 14.995 6c0-1.66-1.332-3-2.995-3a2.998 2.998 0 1 0 0 5.999zm0 4c-2.33 0-7 1.17-7 3.5v3.834h14v-3.834c0-2.33-4.67-3.5-7-3.5z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"/><path stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8.999A2.989 2.989 0 0 0 14.995 6c0-1.66-1.332-3-2.995-3a2.998 2.998 0 1 0 0 5.999zm0 4c-2.33 0-7 1.17-7 3.5v3.834h14v-3.834c0-2.33-4.67-3.5-7-3.5z"/></g></svg>
|
Before Width: | Height: | Size: 396 B After Width: | Height: | Size: 396 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path style="text-indent:0;text-transform:none" d="M16 0C7.18 0 0 7.18 0 16s7.18 16 16 16 16-7.18 16-16S24.82 0 16 0zm0 2.91c7.247 0 13.09 5.843 13.09 13.09S23.248 29.09 16 29.09A13.069 13.069 0 0 1 2.91 16C2.91 8.753 8.752 2.91 16 2.91zm0 2.423c-.803 0-1.455.652-1.455 1.455V16c0 .402.161.767.425 1.03l5.833 5.834a1.459 1.459 0 0 0 2.06 0 1.459 1.459 0 0 0 0-2.061l-5.408-5.409V6.788c0-.803-.652-1.455-1.455-1.455z" overflow="visible" color="#000" fill="#0069cc"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path style="text-indent:0;text-transform:none" d="M16 0C7.18 0 0 7.18 0 16s7.18 16 16 16 16-7.18 16-16S24.82 0 16 0zm0 2.91c7.247 0 13.09 5.843 13.09 13.09S23.248 29.09 16 29.09A13.069 13.069 0 0 1 2.91 16C2.91 8.753 8.752 2.91 16 2.91zm0 2.423c-.803 0-1.455.652-1.455 1.455V16c0 .402.161.767.425 1.03l5.833 5.834a1.459 1.459 0 0 0 2.06 0 1.459 1.459 0 0 0 0-2.061l-5.408-5.409V6.788c0-.803-.652-1.455-1.455-1.455z" overflow="visible" color="#000" fill="#000091"/></svg>
|
Before Width: | Height: | Size: 534 B After Width: | Height: | Size: 534 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="20"><path d="M11.5 8H15l-7 7-7-7h3.5V1h7zM1 19h14" stroke="#0069cc" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" fill="#fff" fill-opacity=".981" fill-rule="evenodd"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="20"><path d="M11.5 8H15l-7 7-7-7h3.5V1h7zM1 19h14" stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" fill="#fff" fill-opacity=".981" fill-rule="evenodd"/></svg>
|
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 250 B |
|
@ -1 +1 @@
|
|||
<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><g stroke="#0069cc" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="m11.999 7.104-2.2-2.25h-6.6c-1.21 0-2.189 1.014-2.189 2.25l-.011 13.5c0 1.238.99 2.25 2.2 2.25h17.6c1.21 0 2.2-1.012 2.2-2.25v-11.249c0-1.237-.99-2.25-2.2-2.25"/><path d="m20.877 6.871 1.829-1.829a.994.994 0 0 0 0-1.41l-2.339-2.34a.996.996 0 0 0 -1.41 0l-1.83 1.83-1.069 1.07-11.059 11.058v3.75h3.75l11.058-11.059zm-3.608-3.662 3.396 3.542"/></g><path d="m0 0h24v24h-24z"/></g></svg>
|
||||
<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><g stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="m11.999 7.104-2.2-2.25h-6.6c-1.21 0-2.189 1.014-2.189 2.25l-.011 13.5c0 1.238.99 2.25 2.2 2.25h17.6c1.21 0 2.2-1.012 2.2-2.25v-11.249c0-1.237-.99-2.25-2.2-2.25"/><path d="m20.877 6.871 1.829-1.829a.994.994 0 0 0 0-1.41l-2.339-2.34a.996.996 0 0 0 -1.41 0l-1.83 1.83-1.069 1.07-11.059 11.058v3.75h3.75l11.058-11.059zm-3.608-3.662 3.396 3.542"/></g><path d="m0 0h24v24h-24z"/></g></svg>
|
Before Width: | Height: | Size: 594 B After Width: | Height: | Size: 594 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2z"/><path d="M0 0h24v24H0z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2z"/><path d="M0 0h24v24H0z"/></g></svg>
|
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 337 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><g fill="#0069cc"><path d="M19.733 4.406c-2.687 0-4.872 2.172-4.872 4.843 0 .628.51 1.136 1.142 1.136.632 0 1.143-.508 1.143-1.136a2.581 2.581 0 0 1 2.587-2.571 2.581 2.581 0 0 1 2.586 2.57c0 1.418-1.16 2.57-2.586 2.57-.632 0-1.143.508-1.143 1.137 0 .022.011.04.012.062 0 .023-.012.041-.012.064v2.364c0 .628.51 1.136 1.143 1.136.632 0 1.142-.508 1.142-1.136v-1.502c2.134-.515 3.73-2.416 3.73-4.693-.002-2.672-2.187-4.844-4.872-4.844zM19.733 17.01c-.632 0-1.143.507-1.143 1.135v.704c0 .628.51 1.136 1.143 1.136.632 0 1.142-.508 1.142-1.136v-.704a1.14 1.14 0 0 0-1.142-1.136z"/><path d="M19.733 0C12.968 0 7.464 5.47 7.464 12.195c0 3.006 1.105 5.755 2.926 7.883l-2.944 2.916c-1.27-.569-2.87-.363-3.883.644l-2.557 2.543A3.379 3.379 0 0 0 0 28.591c0 .912.358 1.768 1.003 2.41A3.419 3.419 0 0 0 3.43 32c.915 0 1.777-.356 2.424-.999L8.41 28.46a3.378 3.378 0 0 0 1.005-2.41 3.37 3.37 0 0 0-.342-1.459l2.951-2.92a12.248 12.248 0 0 0 7.707 2.722C26.497 24.39 32 18.919 32 12.195 32 5.47 26.497 0 19.733 0zM6.794 26.852l-2.557 2.543c-.436.428-1.184.43-1.616-.001a1.119 1.119 0 0 1-.335-.802c0-.304.119-.589.335-.803l2.557-2.543a1.143 1.143 0 0 1 1.616.001 1.129 1.129 0 0 1 0 1.605zm12.939-4.734c-5.504 0-9.982-4.45-9.982-9.922s4.476-9.924 9.982-9.924c5.505 0 9.981 4.451 9.981 9.923 0 5.471-4.477 9.923-9.981 9.923z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><g fill="#000091"><path d="M19.733 4.406c-2.687 0-4.872 2.172-4.872 4.843 0 .628.51 1.136 1.142 1.136.632 0 1.143-.508 1.143-1.136a2.581 2.581 0 0 1 2.587-2.571 2.581 2.581 0 0 1 2.586 2.57c0 1.418-1.16 2.57-2.586 2.57-.632 0-1.143.508-1.143 1.137 0 .022.011.04.012.062 0 .023-.012.041-.012.064v2.364c0 .628.51 1.136 1.143 1.136.632 0 1.142-.508 1.142-1.136v-1.502c2.134-.515 3.73-2.416 3.73-4.693-.002-2.672-2.187-4.844-4.872-4.844zM19.733 17.01c-.632 0-1.143.507-1.143 1.135v.704c0 .628.51 1.136 1.143 1.136.632 0 1.142-.508 1.142-1.136v-.704a1.14 1.14 0 0 0-1.142-1.136z"/><path d="M19.733 0C12.968 0 7.464 5.47 7.464 12.195c0 3.006 1.105 5.755 2.926 7.883l-2.944 2.916c-1.27-.569-2.87-.363-3.883.644l-2.557 2.543A3.379 3.379 0 0 0 0 28.591c0 .912.358 1.768 1.003 2.41A3.419 3.419 0 0 0 3.43 32c.915 0 1.777-.356 2.424-.999L8.41 28.46a3.378 3.378 0 0 0 1.005-2.41 3.37 3.37 0 0 0-.342-1.459l2.951-2.92a12.248 12.248 0 0 0 7.707 2.722C26.497 24.39 32 18.919 32 12.195 32 5.47 26.497 0 19.733 0zM6.794 26.852l-2.557 2.543c-.436.428-1.184.43-1.616-.001a1.119 1.119 0 0 1-.335-.802c0-.304.119-.589.335-.803l2.557-2.543a1.143 1.143 0 0 1 1.616.001 1.129 1.129 0 0 1 0 1.605zm12.939-4.734c-5.504 0-9.982-4.45-9.982-9.922s4.476-9.924 9.982-9.924c5.505 0 9.981 4.451 9.981 9.923 0 5.471-4.477 9.923-9.981 9.923z"/></g></svg>
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3.5 21h18M18.878 8.871l1.829-1.829a.994.994 0 0 0 0-1.41l-2.339-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83-1.069 1.07L3 17.25V21h3.75L17.808 9.941l1.07-1.07zm-3.609-3.662l3.396 3.542"/><path d="M0 0h24v24H0z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3.5 21h18M18.878 8.871l1.829-1.829a.994.994 0 0 0 0-1.41l-2.339-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83-1.069 1.07L3 17.25V21h3.75L17.808 9.941l1.07-1.07zm-3.609-3.662l3.396 3.542"/><path d="M0 0h24v24H0z"/></g></svg>
|
Before Width: | Height: | Size: 424 B After Width: | Height: | Size: 424 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M0-2h24v24H0z"/><path d="M9 8.011h3M9.011 16.99h5.978M12 8v9" stroke="#0069cc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M13 3.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0" fill="#0069cc"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M0-2h24v24H0z"/><path d="M9 8.011h3M9.011 16.99h5.978M12 8v9" stroke="#000091" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M13 3.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0" fill="#0069cc"/></g></svg>
|
Before Width: | Height: | Size: 351 B After Width: | Height: | Size: 351 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"/><path d="M20 7V3a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v18c0 1.1.901 2 2 2h12c1.099 0 2-.9 2-2V7" stroke-linecap="round" stroke-linejoin="round" stroke="#0069CC" stroke-width="2"/></g><g fill="none" fill-rule="evenodd"><path d="M4.877 2.014h14.607V16.62H4.877z"/><path d="M8.563 12.523l2.977 3.385 3.944-6.903" stroke="#0069cc" stroke-width="1.9998924599999999" stroke-linecap="round" stroke-linejoin="round"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"/><path d="M20 7V3a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v18c0 1.1.901 2 2 2h12c1.099 0 2-.9 2-2V7" stroke-linecap="round" stroke-linejoin="round" stroke="#000091" stroke-width="2"/></g><g fill="none" fill-rule="evenodd"><path d="M4.877 2.014h14.607V16.62H4.877z"/><path d="M8.563 12.523l2.977 3.385 3.944-6.903" stroke="#000091" stroke-width="1.9998924599999999" stroke-linecap="round" stroke-linejoin="round"/></g></svg>
|
Before Width: | Height: | Size: 534 B After Width: | Height: | Size: 534 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><g stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2z"/><path d="M2.292 5.033l9.667 6.675 9.666-6.75"/></g><path d="M0 0h24v24H0z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><g stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2z"/><path d="M2.292 5.033l9.667 6.675 9.666-6.75"/></g><path d="M0 0h24v24H0z"/></g></svg>
|
Before Width: | Height: | Size: 383 B After Width: | Height: | Size: 383 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><g fill="none" fill-rule="evenodd"><path d="M11 6L9 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-6" stroke="#0069cc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M0 0h24v24H0z"/></g><g transform="translate(8 -8)" fill="#0069cc"><rect ry="1" y="12" x="6" height="2" width="10"/><rect width="2" height="10" x="10" y="8" ry="1"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><g fill="none" fill-rule="evenodd"><path d="M11 6L9 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-6" stroke="#000091" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M0 0h24v24H0z"/></g><g transform="translate(8 -8)" fill="#000091"><rect ry="1" y="12" x="6" height="2" width="10"/><rect width="2" height="10" x="10" y="8" ry="1"/></g></svg>
|
Before Width: | Height: | Size: 446 B After Width: | Height: | Size: 446 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M10.666 11.042l1.426-2.137c.44-.662.45-1.524.023-2.194L7.845 0 2.762 1.694C.698 2.382-.476 4.595.184 6.668c1.148 3.61 3.787 9.355 9.79 15.356 6.002 6.004 11.747 8.642 15.36 9.792 2.072.66 4.285-.515 4.974-2.58L32 24.157l-6.71-4.27a2.008 2.008 0 0 0-2.195.023l-2.135 1.424a1.99 1.99 0 0 1-2.162.044 25.691 25.691 0 0 1-4.56-3.616 25.755 25.755 0 0 1-3.616-4.558 1.993 1.993 0 0 1 .044-2.161" fill="#0069cc" fill-rule="evenodd"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M10.666 11.042l1.426-2.137c.44-.662.45-1.524.023-2.194L7.845 0 2.762 1.694C.698 2.382-.476 4.595.184 6.668c1.148 3.61 3.787 9.355 9.79 15.356 6.002 6.004 11.747 8.642 15.36 9.792 2.072.66 4.285-.515 4.974-2.58L32 24.157l-6.71-4.27a2.008 2.008 0 0 0-2.195.023l-2.135 1.424a1.99 1.99 0 0 1-2.162.044 25.691 25.691 0 0 1-4.56-3.616 25.755 25.755 0 0 1-3.616-4.558 1.993 1.993 0 0 1 .044-2.161" fill="#000091" fill-rule="evenodd"/></svg>
|
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 505 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><g data-name="Layer 78" transform="matrix(1.59996 0 0 1.57052 -3.2 -2.846)" fill="#0069cc"><circle cx="12" cy="12" r="2"/><path d="M21.92 11.62a10.74 10.74 0 0 0-19.84 0 .94.94 0 0 0 0 .76 10.74 10.74 0 0 0 19.84 0 .94.94 0 0 0 0-.76zM12 16a4 4 0 1 1 4-4 4 4 0 0 1-4 4z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><g data-name="Layer 78" transform="matrix(1.59996 0 0 1.57052 -3.2 -2.846)" fill="#000091"><circle cx="12" cy="12" r="2"/><path d="M21.92 11.62a10.74 10.74 0 0 0-19.84 0 .94.94 0 0 0 0 .76 10.74 10.74 0 0 0 19.84 0 .94.94 0 0 0 0-.76zM12 16a4 4 0 1 1 4-4 4 4 0 0 1-4 4z"/></g></svg>
|
Before Width: | Height: | Size: 345 B After Width: | Height: | Size: 345 B |
|
@ -1 +1 @@
|
|||
<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="m0 0h24v24h-24z"/><path d="m3 8v7h18v-7zm0-2h18a2 2 0 0 1 2 2v7a2 2 0 0 1 -2 2h-18a2 2 0 0 1 -2-2v-7a2 2 0 0 1 2-2zm1 9v2h16v-2z" fill="#0069cc" fill-rule="nonzero"/><path d="m7 2h10a2 2 0 0 1 2 2v3h-14v-3a2 2 0 0 1 2-2z" stroke="#0069cc" stroke-width="2"/><g transform="translate(5 13)"><path d="m0 0h14v7a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2-2z" stroke="#0069cc" stroke-width="2"/><g fill="#0069cc" fill-rule="nonzero"><rect height="1.5" rx=".75" width="6" x="2" y="5"/><rect height="1.5" rx=".75" width="10" x="2" y="2.5"/></g></g></g></svg>
|
||||
<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="m0 0h24v24h-24z"/><path d="m3 8v7h18v-7zm0-2h18a2 2 0 0 1 2 2v7a2 2 0 0 1 -2 2h-18a2 2 0 0 1 -2-2v-7a2 2 0 0 1 2-2zm1 9v2h16v-2z" fill="#000091" fill-rule="nonzero"/><path d="m7 2h10a2 2 0 0 1 2 2v3h-14v-3a2 2 0 0 1 2-2z" stroke="#000091" stroke-width="2"/><g transform="translate(5 13)"><path d="m0 0h14v7a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2-2z" stroke="#000091" stroke-width="2"/><g fill="#000091" fill-rule="nonzero"><rect height="1.5" rx=".75" width="6" x="2" y="5"/><rect height="1.5" rx=".75" width="10" x="2" y="2.5"/></g></g></g></svg>
|
Before Width: | Height: | Size: 666 B After Width: | Height: | Size: 666 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M74.524 65.23l-3.498-5.592c-6.497-10.413-18.79-17.191-33.783-17.673l-.12 17.602c.1 1.265-1.002 1.856-1.744 1.346L3.101 32.538c-2.57-2.624 0-4.317 0-4.317L34.454 2.483c1.544-1.174 2.802-.77 2.801 1.16l-.112 17.33c20.69.868 37.013 18.232 37.281 37.996l.06 4.424zM4.76 30.905l28.786 23.912v-16.42h1.899c14.593 0 26.986 5.524 34.982 14.299-2.698-15.91-17.291-28.059-34.982-28.059h-1.9V8.535z" stroke-width="3.182" stroke-linejoin="round" transform="matrix(.31704 0 0 .3003 -.132 1.934)" fill="#0069cc" stroke="#0069cc"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M74.524 65.23l-3.498-5.592c-6.497-10.413-18.79-17.191-33.783-17.673l-.12 17.602c.1 1.265-1.002 1.856-1.744 1.346L3.101 32.538c-2.57-2.624 0-4.317 0-4.317L34.454 2.483c1.544-1.174 2.802-.77 2.801 1.16l-.112 17.33c20.69.868 37.013 18.232 37.281 37.996l.06 4.424zM4.76 30.905l28.786 23.912v-16.42h1.899c14.593 0 26.986 5.524 34.982 14.299-2.698-15.91-17.291-28.059-34.982-28.059h-1.9V8.535z" stroke-width="3.182" stroke-linejoin="round" transform="matrix(.31704 0 0 .3003 -.132 1.934)" fill="#000091" stroke="#000091"/></svg>
|
Before Width: | Height: | Size: 594 B After Width: | Height: | Size: 594 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><switch transform="translate(0 -101)"><g fill="#0069cc"><path d="M21.406 118.453a1.422 1.422 0 0 0-.56-1.888c-.69-.372-1.298.088-1.67.778-.836 1.592-2.266 2.919-4.049 3.76-3.765 1.769-8.693.51-11.063-2.9-2.87-4.143-1.409-10.218 2.871-12.7 3.98-2.302 9.506-.862 11.925 3.05l-1.96 1.162c-.508.302-.502 1.049.036 1.323l5.798 2.966a.755.755 0 0 0 1.11-.659l.156-6.473c.016-.604-.637-.967-1.146-.664l-1.78 1.057c-3.384-5.589-10.81-7.243-16.272-3.434-4.541 3.2-6.107 9.354-3.633 14.358 2.977 5.956 10.364 8.071 16.004 4.72a11.39 11.39 0 0 0 4.233-4.456z"/></g></switch></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><switch transform="translate(0 -101)"><g fill="#000091"><path d="M21.406 118.453a1.422 1.422 0 0 0-.56-1.888c-.69-.372-1.298.088-1.67.778-.836 1.592-2.266 2.919-4.049 3.76-3.765 1.769-8.693.51-11.063-2.9-2.87-4.143-1.409-10.218 2.871-12.7 3.98-2.302 9.506-.862 11.925 3.05l-1.96 1.162c-.508.302-.502 1.049.036 1.323l5.798 2.966a.755.755 0 0 0 1.11-.659l.156-6.473c.016-.604-.637-.967-1.146-.664l-1.78 1.057c-3.384-5.589-10.81-7.243-16.272-3.434-4.541 3.2-6.107 9.354-3.633 14.358 2.977 5.956 10.364 8.071 16.004 4.72a11.39 11.39 0 0 0 4.233-4.456z"/></g></switch></svg>
|
Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 632 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M17 9A8 8 0 1 1 1 9a8 8 0 0 1 16 0zm-2.187 5.875l8 8" stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="M0 0h24v24H0z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M17 9A8 8 0 1 1 1 9a8 8 0 0 1 16 0zm-2.187 5.875l8 8" stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="M0 0h24v24H0z"/></g></svg>
|
Before Width: | Height: | Size: 298 B After Width: | Height: | Size: 298 B |
|
@ -1 +1 @@
|
|||
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"/><g stroke-linecap="round" stroke-linejoin="round" stroke="#0069CC" stroke-width="2"><path d="M20.3 12H10m6.63 4L21 12l-4.37-4"/><path d="M21 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.901 2 2 2h14c1.099 0 2-.9 2-2v-2"/></g></g></svg>
|
||||
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"/><g stroke-linecap="round" stroke-linejoin="round" stroke="#000091" stroke-width="2"><path d="M20.3 12H10m6.63 4L21 12l-4.37-4"/><path d="M21 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.901 2 2 2h14c1.099 0 2-.9 2-2v-2"/></g></g></svg>
|
Before Width: | Height: | Size: 356 B After Width: | Height: | Size: 356 B |
|
@ -1 +1 @@
|
|||
<svg height="25" viewBox="0 0 25 25" width="25" xmlns="http://www.w3.org/2000/svg"><path d="m20.37.5h-15.424l-4.246 5.69 12 18.31 12-18.31zm2.355 5.69-2.98 4.541c0-.006-.005-.011-.005-.011-.39-.975-.853-2.648-4.215-3.026 0 0-5.351.321-6.377-.563-1.025-.885-2.917-3.132 1.417-4.58 2.635-.885 5.716.377 5.998 3.887h3.488v-4.225zm-14.472 8.3a.148.148 0 0 0 -.021.034l-2.392-3.647.005-.01s.912.732 4.232.884c3.32.146 6.25.146 7.158 1.087.912.94-.769 2.704-4.791 2.462-.005 0-2.257-3.606-4.19-.811zm10.058-12.3s.21 1.578-.756 1.972c0 0-.084-.355-1.207-1.972zm-12.735 0h2.45c-.454.192-3.657 1.989-3.417 6.8v.023l-1.85-2.823zm4.073 14.496c.004 0 4.85.715 6.212-.186.059-.04.117-.079.18-.13l-3.299 5.031z" fill="#0069cc"/></svg>
|
||||
<svg height="25" viewBox="0 0 25 25" width="25" xmlns="http://www.w3.org/2000/svg"><path d="m20.37.5h-15.424l-4.246 5.69 12 18.31 12-18.31zm2.355 5.69-2.98 4.541c0-.006-.005-.011-.005-.011-.39-.975-.853-2.648-4.215-3.026 0 0-5.351.321-6.377-.563-1.025-.885-2.917-3.132 1.417-4.58 2.635-.885 5.716.377 5.998 3.887h3.488v-4.225zm-14.472 8.3a.148.148 0 0 0 -.021.034l-2.392-3.647.005-.01s.912.732 4.232.884c3.32.146 6.25.146 7.158 1.087.912.94-.769 2.704-4.791 2.462-.005 0-2.257-3.606-4.19-.811zm10.058-12.3s.21 1.578-.756 1.972c0 0-.084-.355-1.207-1.972zm-12.735 0h2.45c-.454.192-3.657 1.989-3.417 6.8v.023l-1.85-2.823zm4.073 14.496c.004 0 4.85.715 6.212-.186.059-.04.117-.079.18-.13l-3.299 5.031z" fill="#000091"/></svg>
|
Before Width: | Height: | Size: 720 B After Width: | Height: | Size: 720 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><g stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M11.595 11.813a2.319 2.319 0 0 0 2.323-2.327 2.319 2.319 0 0 0-2.323-2.326c-1.29 0-2.33 1.04-2.33 2.326a2.324 2.324 0 0 0 2.33 2.327zm-4.508 7.288V17.63c0-1.808 2.977-2.716 4.783-2.716 1.807 0 4.782.908 4.782 2.716v1.471l-.002.433a8.953 8.953 0 0 1-4.923 1.464A8.999 8.999 0 0 1 3.56 8.22m16.843 6.18A8.998 8.998 0 0 0 6.978 4.355"/><path d="M1 9.259l2.667-1.094 1.092 2.667m17.816 2.045l-2.154 1.606-1.607-2.152"/></g><path d="M0 0h24v24H0z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><g stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M11.595 11.813a2.319 2.319 0 0 0 2.323-2.327 2.319 2.319 0 0 0-2.323-2.326c-1.29 0-2.33 1.04-2.33 2.326a2.324 2.324 0 0 0 2.33 2.327zm-4.508 7.288V17.63c0-1.808 2.977-2.716 4.783-2.716 1.807 0 4.782.908 4.782 2.716v1.471l-.002.433a8.953 8.953 0 0 1-4.923 1.464A8.999 8.999 0 0 1 3.56 8.22m16.843 6.18A8.998 8.998 0 0 0 6.978 4.355"/><path d="M1 9.259l2.667-1.094 1.092 2.667m17.816 2.045l-2.154 1.606-1.607-2.152"/></g><path d="M0 0h24v24H0z"/></g></svg>
|
Before Width: | Height: | Size: 665 B After Width: | Height: | Size: 665 B |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 5.3 KiB |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M6 18.857C6 20.037 6.749 21 7.667 21h8.666C17.25 21 18 20.037 18 18.857V6H6v12.857zM4 6h16M9 11v5m3-5v5m3-5v5M8.5 4.889c0-.858.696-1.89 1.556-1.89h3.888c.86 0 1.556 1.032 1.556 1.89" stroke="#0069cc" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="M0 0h24v24H0z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M6 18.857C6 20.037 6.749 21 7.667 21h8.666C17.25 21 18 20.037 18 18.857V6H6v12.857zM4 6h16M9 11v5m3-5v5m3-5v5M8.5 4.889c0-.858.696-1.89 1.556-1.89h3.888c.86 0 1.556 1.032 1.556 1.89" stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="M0 0h24v24H0z"/></g></svg>
|
Before Width: | Height: | Size: 427 B After Width: | Height: | Size: 427 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"/><g stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M23 12c0 6.076-4.924 11-11 11-6.074 0-11-4.924-11-11S5.926 1 12 1c6.076 0 11 4.924 11 11zM12 8v10"/><path d="M16 11l-4-4-4 4"/></g></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M0 0h24v24H0z"/><g stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M23 12c0 6.076-4.924 11-11 11-6.074 0-11-4.924-11-11S5.926 1 12 1c6.076 0 11 4.924 11 11zM12 8v10"/><path d="M16 11l-4-4-4 4"/></g></g></svg>
|
Before Width: | Height: | Size: 377 B After Width: | Height: | Size: 377 B |
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2 16.112v1.862C2 19.088 2.907 20 4.017 20h16.132c1.11 0 2.018-.912 2.018-2.026V7.85a2.028 2.028 0 0 0-2.018-2.025h-8.066L10.066 3.8h-6.05A2.02 2.02 0 0 0 2.01 5.825L2 8.015M3 12h7.467"/><path stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 9l-4 3 4 3"/><path d="M0 0h24v24H0z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2 16.112v1.862C2 19.088 2.907 20 4.017 20h16.132c1.11 0 2.018-.912 2.018-2.026V7.85a2.028 2.028 0 0 0-2.018-2.025h-8.066L10.066 3.8h-6.05A2.02 2.02 0 0 0 2.01 5.825L2 8.015M3 12h7.467"/><path stroke="#0069CC" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 9l-4 3 4 3"/><path d="M0 0h24v24H0z"/></g></svg>
|
Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 536 B |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
|
@ -1 +1 @@
|
|||
<svg height="96" viewBox="0 0 94 96" width="94" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="m17.334 12.334h39" stroke="#0069cc" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m26.09 7.316a2 2 0 1 1 -4.002-.001 2 2 0 0 1 4.002.001m6 0a2 2 0 1 1 -4.002-.001 2 2 0 0 1 4.002.001m6 0a2 2 0 1 1 -4.002-.001 2 2 0 0 1 4.002.001" fill="#0069cc"/><path d="m82.334 39.334h-55m55 9h-53m53 8h-47.339m47.339 9h-42.982m14.982-35h-27m31 44h-19.313m-1.687 20h52.773c1.506 0 2.227-2.268 2.227-3.773v-59.227m-31-29h-40.773c-1.506 0-3.227.174-3.227 1.68v43.32" stroke="#0069cc" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m62.284 30.249s2.225-6.485 2.104-6.69l-.033-.056a14.908 14.908 0 0 1 -2.019-7.503c0-8.284 6.715-15 14.998-15 8.285 0 15 6.716 15 15s-6.715 15-15 15c-3.072 0-5.926-.929-8.306-2.513.003.001.013.01.013.01z" fill="#d9e9fd"/><path d="m62.284 30.249s2.225-6.485 2.104-6.69l-.033-.056a14.908 14.908 0 0 1 -2.019-7.503c0-8.284 6.715-15 14.998-15 8.285 0 15 6.716 15 15s-6.715 15-15 15c-3.072 0-5.926-.929-8.306-2.513.003.001.013.01.013.01z" stroke="#0069cc" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m71.667 16.167a1.501 1.501 0 1 1 -3.002 0 1.501 1.501 0 0 1 3.002 0m7.086 0a1.501 1.501 0 1 1 -3.002 0 1.501 1.501 0 0 1 3.002 0m7.086 0a1.501 1.501 0 1 1 -3.002 0 1.501 1.501 0 0 1 3.002 0" fill="#0069cc"/><path d="m1 87.05c4.277 4.37 10.235 7.094 16.834 7.094s12.555-2.725 16.833-7.096c-1.229-4.143-4.164-8.141-10.997-8.141 0 0-2.18 2.123-5.836 2.123-3.659 0-5.836-2.123-5.836-2.123-6.834 0-9.768 3.998-10.998 8.143" fill="#d9e9fd"/><path d="m1 87.05c4.277 4.37 10.235 7.094 16.834 7.094s12.555-2.725 16.833-7.096c-1.229-4.143-4.164-8.141-10.997-8.141 0 0-2.18 2.123-5.836 2.123-3.659 0-5.836-2.123-5.836-2.123-6.834 0-9.768 3.998-10.998 8.143z" stroke="#0069cc" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m17.834 72.32c5.044 0 9.138-4.069 9.138-9.083 0-5.025-4.094-9.094-9.138-9.094s-9.138 4.07-9.138 9.094c0 5.014 4.096 9.082 9.138 9.082" fill="#d9e9fd"/><path d="m17.834 72.32c5.044 0 9.138-4.069 9.138-9.083 0-5.025-4.094-9.094-9.138-9.094s-9.138 4.07-9.138 9.094c0 5.014 4.096 9.082 9.138 9.082z" stroke="#0069cc" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></svg>
|
||||
<svg height="96" viewBox="0 0 94 96" width="94" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="m17.334 12.334h39" stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m26.09 7.316a2 2 0 1 1 -4.002-.001 2 2 0 0 1 4.002.001m6 0a2 2 0 1 1 -4.002-.001 2 2 0 0 1 4.002.001m6 0a2 2 0 1 1 -4.002-.001 2 2 0 0 1 4.002.001" fill="#7F7FC8"/><path d="m82.334 39.334h-55m55 9h-53m53 8h-47.339m47.339 9h-42.982m14.982-35h-27m31 44h-19.313m-1.687 20h52.773c1.506 0 2.227-2.268 2.227-3.773v-59.227m-31-29h-40.773c-1.506 0-3.227.174-3.227 1.68v43.32" stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m62.284 30.249s2.225-6.485 2.104-6.69l-.033-.056a14.908 14.908 0 0 1 -2.019-7.503c0-8.284 6.715-15 14.998-15 8.285 0 15 6.716 15 15s-6.715 15-15 15c-3.072 0-5.926-.929-8.306-2.513.003.001.013.01.013.01z" fill="#d9e9fd"/><path d="m62.284 30.249s2.225-6.485 2.104-6.69l-.033-.056a14.908 14.908 0 0 1 -2.019-7.503c0-8.284 6.715-15 14.998-15 8.285 0 15 6.716 15 15s-6.715 15-15 15c-3.072 0-5.926-.929-8.306-2.513.003.001.013.01.013.01z" stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m71.667 16.167a1.501 1.501 0 1 1 -3.002 0 1.501 1.501 0 0 1 3.002 0m7.086 0a1.501 1.501 0 1 1 -3.002 0 1.501 1.501 0 0 1 3.002 0m7.086 0a1.501 1.501 0 1 1 -3.002 0 1.501 1.501 0 0 1 3.002 0" fill="#7F7FC8"/><path d="m1 87.05c4.277 4.37 10.235 7.094 16.834 7.094s12.555-2.725 16.833-7.096c-1.229-4.143-4.164-8.141-10.997-8.141 0 0-2.18 2.123-5.836 2.123-3.659 0-5.836-2.123-5.836-2.123-6.834 0-9.768 3.998-10.998 8.143" fill="#d9e9fd"/><path d="m1 87.05c4.277 4.37 10.235 7.094 16.834 7.094s12.555-2.725 16.833-7.096c-1.229-4.143-4.164-8.141-10.997-8.141 0 0-2.18 2.123-5.836 2.123-3.659 0-5.836-2.123-5.836-2.123-6.834 0-9.768 3.998-10.998 8.143z" stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m17.834 72.32c5.044 0 9.138-4.069 9.138-9.083 0-5.025-4.094-9.094-9.138-9.094s-9.138 4.07-9.138 9.094c0 5.014 4.096 9.082 9.138 9.082" fill="#d9e9fd"/><path d="m17.834 72.32c5.044 0 9.138-4.069 9.138-9.083 0-5.025-4.094-9.094-9.138-9.094s-9.138 4.07-9.138 9.094c0 5.014 4.096 9.082 9.138 9.082z" stroke="#000091" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></svg>
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
@ -1,4 +1,3 @@
|
|||
$blue: #0069CC;
|
||||
$light-blue: #1C7EC9;
|
||||
$lighter-blue: #C3D9FF;
|
||||
$black: #333333;
|
||||
|
@ -21,3 +20,8 @@ $orange: #F28900;
|
|||
$orange-bg: lighten($orange, 35%);
|
||||
$yellow: #FEF3B8;
|
||||
$light-yellow: #FFFFDE;
|
||||
$blue-france-700: #00006D;
|
||||
$blue-france-500: #000091;
|
||||
$blue-france-400: #7F7FC8;
|
||||
$g700: #383838;
|
||||
|
||||
|
|
|
@ -22,6 +22,6 @@
|
|||
%outline {
|
||||
&:active:not(:disabled),
|
||||
&:focus {
|
||||
outline: 3px solid $blue;
|
||||
outline: 3px solid $blue-france-500;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,26 +20,26 @@
|
|||
|
||||
&.active {
|
||||
background-color: #FFFFFF;
|
||||
border-top: 2px solid $blue;
|
||||
border-top: 2px solid $blue-france-500;
|
||||
border-left: 1px solid $border-grey;
|
||||
border-right: 1px solid $border-grey;
|
||||
|
||||
a {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
|
||||
.badge {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
a {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
|
||||
.badge {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
}
|
||||
|
||||
&:last-child {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
|
||||
&::after {
|
||||
content: none;
|
||||
|
|
|
@ -30,22 +30,22 @@
|
|||
|
||||
&.primary {
|
||||
color: #FFFFFF;
|
||||
border-color: $blue;
|
||||
background-color: $blue;
|
||||
border-color: $blue-france-700;
|
||||
background-color: $blue-france-700;
|
||||
|
||||
&:hover:not(:disabled) {
|
||||
background: $light-blue;
|
||||
background: $blue-france-500;
|
||||
}
|
||||
}
|
||||
|
||||
&.secondary {
|
||||
color: $blue;
|
||||
border-color: $blue;
|
||||
color: $blue-france-700;
|
||||
border-color: $blue-france-700;
|
||||
background-color: #FFFFFF;
|
||||
|
||||
&:hover:not(:disabled) {
|
||||
color: #FFFFFF;
|
||||
background: $light-blue;
|
||||
background: $blue-france-700;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -160,7 +160,7 @@
|
|||
&.icon-only {
|
||||
&::after {
|
||||
margin-left: 2px;
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -223,7 +223,7 @@
|
|||
cursor: default;
|
||||
|
||||
h4 {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -309,5 +309,5 @@
|
|||
}
|
||||
|
||||
.link {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
|
|
|
@ -21,10 +21,10 @@
|
|||
}
|
||||
|
||||
&.featured {
|
||||
border-top: 8px solid $blue;
|
||||
border-top: 8px solid $blue-france-500;
|
||||
|
||||
.card-title {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
}
|
||||
|
||||
.card-admin-status-todo {
|
||||
color: #246AC5;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
|
||||
.card-admin-title {
|
||||
|
@ -42,10 +42,10 @@
|
|||
}
|
||||
|
||||
&:hover {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
|
||||
.button {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ strong {
|
|||
}
|
||||
|
||||
a {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
|
||||
a[target="_blank"]::after {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
}
|
||||
|
||||
.text-info {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
|
||||
.text-warning {
|
||||
|
|
|
@ -215,8 +215,8 @@
|
|||
}
|
||||
|
||||
&:focus {
|
||||
border: 1px solid $blue;
|
||||
box-shadow: 0px 0px 2px 1px $blue;
|
||||
border: 1px solid $blue-france-500;
|
||||
box-shadow: 0px 0px 2px 1px $blue-france-500;
|
||||
}
|
||||
|
||||
// Hide the browser default invalidity indicator until the field is touched
|
||||
|
@ -306,7 +306,7 @@
|
|||
}
|
||||
|
||||
[data-reach-combobox-input]:focus {
|
||||
border-color: $blue;
|
||||
border-color: $blue-france-500;
|
||||
}
|
||||
|
||||
[data-reach-combobox-token-list] {
|
||||
|
@ -379,15 +379,15 @@
|
|||
|
||||
.header-section {
|
||||
display: inline-block;
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
font-size: 30px;
|
||||
margin-bottom: 3 * $default-padding;
|
||||
border-bottom: 3px solid $blue;
|
||||
border-bottom: 3px solid $blue-france-500;
|
||||
}
|
||||
|
||||
.header-subsection {
|
||||
font-size: 22px;
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
margin-bottom: $default-padding;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
.help-dropdown-title {
|
||||
font-size: 16px;
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
|
||||
.dropdown-items li.help-dropdown-service {
|
||||
|
@ -25,7 +25,7 @@
|
|||
|
||||
a {
|
||||
display: inline;
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
|
||||
&.instruction {
|
||||
background-color: #FFFFFF;
|
||||
color: $blue;
|
||||
border: 1px solid $blue;
|
||||
color: $blue-france-500;
|
||||
border: 1px solid $blue-france-500;
|
||||
}
|
||||
|
||||
&.en-instruction {
|
||||
|
|
|
@ -37,7 +37,7 @@ $landing-breakpoint: 1040px;
|
|||
}
|
||||
|
||||
.hero-tagline-em {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
font-size: 40px;
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
|
@ -62,10 +62,11 @@ $landing-breakpoint: 1040px;
|
|||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
margin-top: 0;
|
||||
color: $g700;
|
||||
}
|
||||
|
||||
.features-panel {
|
||||
background-color: $blue;
|
||||
background-color: $blue-france-500;
|
||||
}
|
||||
|
||||
.features-panel-title {
|
||||
|
@ -185,7 +186,7 @@ $landing-breakpoint: 1040px;
|
|||
}
|
||||
|
||||
.number-value {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
font-weight: bold;
|
||||
font-size: 36px;
|
||||
}
|
||||
|
@ -193,6 +194,7 @@ $landing-breakpoint: 1040px;
|
|||
.number-label {
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
color: $g700;
|
||||
}
|
||||
|
||||
$users-breakpoint: 950px;
|
||||
|
@ -248,7 +250,7 @@ $users-breakpoint: 950px;
|
|||
}
|
||||
|
||||
.cta-panel {
|
||||
background-color: $blue;
|
||||
background-color: $blue-france-500;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
|
@ -293,11 +295,21 @@ $users-breakpoint: 950px;
|
|||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
margin-top: 13px;
|
||||
color: #FFFFFF;
|
||||
|
||||
&.grey {
|
||||
color: $g700;
|
||||
}
|
||||
}
|
||||
|
||||
.cta-panel-explanation {
|
||||
font-size: 24px;
|
||||
margin-bottom: 10px;
|
||||
color: #FFFFFF;
|
||||
|
||||
&.grey {
|
||||
color: $g700;
|
||||
}
|
||||
}
|
||||
|
||||
.role-panel-title {
|
||||
|
@ -305,6 +317,7 @@ $users-breakpoint: 950px;
|
|||
font-weight: bold;
|
||||
line-height: 36px;
|
||||
margin-bottom: 15px;
|
||||
color: $g700;
|
||||
}
|
||||
|
||||
.role-panel-explanation {
|
||||
|
@ -374,12 +387,12 @@ $cta-panel-button-border-size: 2px;
|
|||
|
||||
.cta-panel-button-blue {
|
||||
@include cta-panel-button;
|
||||
border: $cta-panel-button-border-size solid $light-blue;
|
||||
color: $light-blue;
|
||||
border: $cta-panel-button-border-size solid $blue-france-700;
|
||||
color: $blue-france-700;
|
||||
|
||||
&:hover {
|
||||
color: #FFFFFF;
|
||||
background-color: $light-blue;
|
||||
background-color: $blue-france-500;
|
||||
text-decoration: none;
|
||||
|
||||
&:focus {
|
||||
|
@ -388,7 +401,7 @@ $cta-panel-button-border-size: 2px;
|
|||
}
|
||||
|
||||
&:focus {
|
||||
color: $light-blue;
|
||||
color: $blue-france-500;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
@ -406,13 +419,13 @@ $cta-panel-button-border-size: 2px;
|
|||
|
||||
.role-panel-button-primary {
|
||||
@include role-button;
|
||||
background-color: $blue;
|
||||
background-color: $blue-france-700;
|
||||
color: #FFFFFF;
|
||||
|
||||
&:hover {
|
||||
color: #FFFFFF;
|
||||
text-decoration: none;
|
||||
background-color: $light-blue;
|
||||
background-color: $blue-france-500;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
|
@ -423,9 +436,9 @@ $cta-panel-button-border-size: 2px;
|
|||
|
||||
.role-panel-button-secondary {
|
||||
@include role-button;
|
||||
border: $cta-panel-button-border-size solid $blue;
|
||||
border: $cta-panel-button-border-size solid $blue-france-700;
|
||||
line-height: 50px - 2 * $cta-panel-button-border-size;
|
||||
color: $blue;
|
||||
color: $blue-france-700;
|
||||
margin-left: 10px;
|
||||
|
||||
@media (max-width: $users-breakpoint) {
|
||||
|
@ -433,8 +446,8 @@ $cta-panel-button-border-size: 2px;
|
|||
}
|
||||
|
||||
&:hover {
|
||||
color: $light-blue;
|
||||
border: $cta-panel-button-border-size solid $light-blue;
|
||||
color: $blue-france-500;
|
||||
border: $cta-panel-button-border-size solid $blue-france-500;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ footer {
|
|||
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $blue;
|
||||
color: $blue-france-700;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ $header-mobile-breakpoint: 550px;
|
|||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
color: $blue-france-500;
|
||||
|
||||
img {
|
||||
margin-right: 10px;
|
||||
|
@ -65,8 +66,8 @@ $header-mobile-breakpoint: 550px;
|
|||
|
||||
&.active,
|
||||
&:hover {
|
||||
color: $blue;
|
||||
border-bottom: 2px solid $blue;
|
||||
color: $blue-france-500;
|
||||
border-bottom: 2px solid $blue-france-500;
|
||||
|
||||
&.contact-link {
|
||||
position: relative;
|
||||
|
@ -85,7 +86,7 @@ $header-mobile-breakpoint: 550px;
|
|||
position: absolute;
|
||||
left: -165px;
|
||||
background: #FFFFFF;
|
||||
border: 2px solid $blue;
|
||||
border: 2px solid $blue-france-500;
|
||||
border-radius: 5px;
|
||||
padding: 15px;
|
||||
width: 400px;
|
||||
|
@ -115,7 +116,7 @@ $header-mobile-breakpoint: 550px;
|
|||
|
||||
&::before {
|
||||
border-color: rgba(255, 255, 255, 0);
|
||||
border-bottom-color: $blue;
|
||||
border-bottom-color: $blue-france-500;
|
||||
border-width: 18px;
|
||||
margin-left: -18px;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
}
|
||||
|
||||
.icon.download-white {
|
||||
background-color: $blue;
|
||||
box-shadow: 0px 0px 1px 2px $blue;
|
||||
background-color: $blue-france-500;
|
||||
box-shadow: 0px 0px 1px 2px $blue-france-500;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
&.type-header-section {
|
||||
&,
|
||||
.head {
|
||||
background-color: $blue;
|
||||
background-color: $blue-france-500;
|
||||
}
|
||||
|
||||
.head .icon {
|
||||
|
|
|
@ -18,7 +18,7 @@ $procedure-description-line-height: 22px;
|
|||
|
||||
.simple {
|
||||
font-size: 24px;
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ $procedure-description-line-height: 22px;
|
|||
}
|
||||
|
||||
.procedure-auto-archive-title {
|
||||
border-bottom: 1px dotted $blue;
|
||||
border-bottom: 1px dotted $blue-france-500;
|
||||
}
|
||||
|
||||
.procedure-description {
|
||||
|
|
|
@ -105,7 +105,7 @@
|
|||
}
|
||||
|
||||
[data-reach-combobox-input]:focus {
|
||||
border-color: $blue;
|
||||
border-color: $blue-france-500;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
@import "colors";
|
||||
$dark-grey: #333333;
|
||||
$light-grey: #999999;
|
||||
$blue: rgba(61, 149, 236, 1);
|
||||
$blue-hover: rgba(61, 149, 236, 0.8);
|
||||
|
||||
$default-space: 15px;
|
||||
|
||||
|
@ -86,11 +85,11 @@ $segmented-control-item-border-radius: 2 * $default-space;
|
|||
.segmented-control-item {
|
||||
display: inline-block;
|
||||
font-size: 15px;
|
||||
border: 2px solid $blue;
|
||||
border: 2px solid $blue-france-700;
|
||||
margin-right: -2px;
|
||||
padding-left: $segmented-control-item-horizontal-padding;
|
||||
padding-right: $segmented-control-item-horizontal-padding;
|
||||
color: $blue;
|
||||
color: $blue-france-700;
|
||||
|
||||
&:first-of-type {
|
||||
border-radius: $segmented-control-item-border-radius 0px 0px $segmented-control-item-border-radius;
|
||||
|
@ -102,14 +101,14 @@ $segmented-control-item-border-radius: 2 * $default-space;
|
|||
}
|
||||
|
||||
&:hover {
|
||||
background-color: $blue-hover;
|
||||
background-color: $blue-france-500;
|
||||
color: #FFFFFF;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.segmented-control-item-active {
|
||||
background-color: $blue;
|
||||
background-color: $blue-france-700;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
|
@ -146,11 +145,11 @@ $big-number-card-padding: 2 * $segmented-control-item-border-radius;
|
|||
font-size: 90px;
|
||||
line-height: 90px;
|
||||
font-weight: bold;
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
|
||||
.big-number-card-detail {
|
||||
display: block;
|
||||
text-align: center;
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
@include vertical-padding($default-spacer);
|
||||
|
||||
&.header-section {
|
||||
color: $blue;
|
||||
color: $blue-france-500;
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,8 +49,8 @@ input:checked + .toggle-switch-control {
|
|||
}
|
||||
|
||||
input:focus + .toggle-switch-control {
|
||||
border-color: $blue;
|
||||
box-shadow: 0px 0px 2px 1px $blue;
|
||||
border-color: $blue-france-500;
|
||||
box-shadow: 0px 0px 2px 1px $blue-france-500;
|
||||
}
|
||||
|
||||
input:checked + .toggle-switch-control::before {
|
||||
|
|
|
@ -180,7 +180,6 @@ class ApplicationController < ActionController::Base
|
|||
payload.merge!({
|
||||
user_agent: request.user_agent,
|
||||
user_id: current_user&.id,
|
||||
user_email: current_user&.email,
|
||||
user_roles: current_user_roles
|
||||
}.compact)
|
||||
|
||||
|
|
|
@ -122,6 +122,16 @@ module Instructeurs
|
|||
.deleted_dossiers
|
||||
.order(:dossier_id)
|
||||
.page params[:page]
|
||||
|
||||
@a_suivre_count, @suivis_count, @traites_count, @tous_count, @archives_count = current_instructeur
|
||||
.dossiers_count_summary(groupe_instructeur_ids)
|
||||
.fetch_values('a_suivre', 'suivis', 'traites', 'tous', 'archives')
|
||||
|
||||
notifications = current_instructeur.notifications_for_groupe_instructeurs(groupe_instructeur_ids)
|
||||
@has_en_cours_notifications = notifications[:en_cours].present?
|
||||
@has_termine_notifications = notifications[:termines].present?
|
||||
|
||||
@statut = 'supprime'
|
||||
end
|
||||
|
||||
def update_displayed_fields
|
||||
|
|
|
@ -196,6 +196,13 @@ module NewAdministrateur
|
|||
notice: "Le routage est activé."
|
||||
end
|
||||
|
||||
def update_instructeurs_self_management_enabled
|
||||
procedure.update!(instructeurs_self_management_enabled_params)
|
||||
|
||||
redirect_to admin_procedure_groupe_instructeurs_path(procedure),
|
||||
notice: "L’autogestion des instructeurs est #{procedure.instructeurs_self_management_enabled? ? "activée" : "désactivée"}."
|
||||
end
|
||||
|
||||
def import
|
||||
if !CSV_ACCEPTED_CONTENT_TYPES.include?(group_csv_file.content_type) && !CSV_ACCEPTED_CONTENT_TYPES.include?(marcel_content_type)
|
||||
flash[:alert] = "Importation impossible : veuillez importer un fichier CSV"
|
||||
|
@ -297,5 +304,9 @@ module NewAdministrateur
|
|||
def marcel_content_type
|
||||
Marcel::MimeType.for(group_csv_file.read, name: group_csv_file.original_filename, declared_type: group_csv_file.content_type)
|
||||
end
|
||||
|
||||
def instructeurs_self_management_enabled_params
|
||||
params.require(:procedure).permit(:instructeurs_self_management_enabled)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -57,4 +57,15 @@ module ProcedureHelper
|
|||
def procedure_auto_archive_datetime(procedure)
|
||||
procedure_auto_archive_date(procedure) + ' ' + procedure_auto_archive_time(procedure)
|
||||
end
|
||||
|
||||
def can_manage_groupe_instructeurs?(procedure)
|
||||
procedure.routee? && current_administrateur&.owns?(procedure)
|
||||
end
|
||||
|
||||
def can_send_groupe_message?(procedure)
|
||||
procedure.dossiers
|
||||
.state_brouillon
|
||||
.includes(:groupe_instructeur)
|
||||
.exists?(groupe_instructeur: current_instructeur.groupe_instructeurs)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,6 +2,7 @@ class APIParticulier::API
|
|||
include APIParticulier::Error
|
||||
|
||||
INTROSPECT_RESOURCE_NAME = "introspect"
|
||||
COMPOSITION_FAMILIALE_RESOURCE_NAME = "v2/composition-familiale"
|
||||
|
||||
TIMEOUT = 20
|
||||
|
||||
|
@ -10,7 +11,13 @@ class APIParticulier::API
|
|||
end
|
||||
|
||||
def scopes
|
||||
get(INTROSPECT_RESOURCE_NAME)[:scopes]
|
||||
get(INTROSPECT_RESOURCE_NAME)['scopes']
|
||||
end
|
||||
|
||||
def composition_familiale(numero_allocataire, code_postal)
|
||||
get(COMPOSITION_FAMILIALE_RESOURCE_NAME,
|
||||
numeroAllocataire: numero_allocataire,
|
||||
codePostal: code_postal)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -24,7 +31,7 @@ class APIParticulier::API
|
|||
timeout: TIMEOUT)
|
||||
|
||||
if response.success?
|
||||
JSON.parse(response.body, symbolize_names: true)
|
||||
JSON.parse(response.body)
|
||||
elsif response.code == 401
|
||||
raise Unauthorized.new(response)
|
||||
else
|
||||
|
|
47
app/lib/api_particulier/cnaf_adapter.rb
Normal file
|
@ -0,0 +1,47 @@
|
|||
class APIParticulier::CNAFAdapter
|
||||
class InvalidSchemaError < ::StandardError
|
||||
def initialize(errors)
|
||||
super(errors.map(&:to_json).join("\n"))
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(api_particulier_token, numero_allocataire, code_postal, requested_sources)
|
||||
@api = APIParticulier::API.new(api_particulier_token)
|
||||
@numero_allocataire = numero_allocataire
|
||||
@code_postal = code_postal
|
||||
@requested_sources = requested_sources
|
||||
end
|
||||
|
||||
def to_params
|
||||
@api.composition_familiale(@numero_allocataire, @code_postal)
|
||||
.tap { |d| ensure_valid_schema!(d) }
|
||||
.then { |d| extract_requested_sources(d) }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def ensure_valid_schema!(data)
|
||||
if !schemer.valid?(data)
|
||||
errors = schemer.validate(data).to_a
|
||||
raise InvalidSchemaError.new(errors)
|
||||
end
|
||||
end
|
||||
|
||||
def schemer
|
||||
@schemer ||= JSONSchemer.schema(Rails.root.join('app/schemas/composition-familiale.json'))
|
||||
end
|
||||
|
||||
def extract_requested_sources(data)
|
||||
@requested_sources['cnaf']&.map do |(scope, sources)|
|
||||
case scope
|
||||
when 'enfants', 'allocataires'
|
||||
{ scope => data[scope].map { |s| s.slice(*sources) } }
|
||||
when 'quotient_familial'
|
||||
{ scope => data.slice(*sources) }
|
||||
else
|
||||
{ scope => data[scope].slice(*sources) }
|
||||
end
|
||||
end
|
||||
&.reduce(&:deep_merge) || {}
|
||||
end
|
||||
end
|
|
@ -52,10 +52,10 @@ module APIParticulier
|
|||
def providers
|
||||
{
|
||||
'cnaf' => {
|
||||
'allocataires' => ['noms_prenoms', 'date_de_naissance', 'sexe'],
|
||||
'enfants' => ['noms_prenoms', 'date_de_naissance', 'sexe'],
|
||||
'adresse' => ['identite', 'complement_d_identite', 'complement_d_identite_geo', 'numero_et_rue', 'lieu_dit', 'code_postal_et_ville', 'pays'],
|
||||
'quotient_familial' => ['quotient_familial', 'annee', 'mois']
|
||||
'allocataires' => ['nomPrenom', 'dateDeNaissance', 'sexe'],
|
||||
'enfants' => ['nomPrenom', 'dateDeNaissance', 'sexe'],
|
||||
'adresse' => ['identite', 'complementIdentite', 'complementIdentiteGeo', 'numeroRue', 'lieuDit', 'codePostalVille', 'pays'],
|
||||
'quotient_familial' => ['quotientFamilial', 'annee', 'mois']
|
||||
}
|
||||
}
|
||||
end
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
# experts_require_administrateur_invitation :boolean default(FALSE)
|
||||
# for_individual :boolean default(FALSE)
|
||||
# hidden_at :datetime
|
||||
# instructeurs_self_management_enabled :boolean
|
||||
# juridique_required :boolean default(TRUE)
|
||||
# libelle :string
|
||||
# lien_demarche :string
|
||||
|
@ -636,6 +637,10 @@ class Procedure < ApplicationRecord
|
|||
routing_enabled? || groupe_instructeurs.size > 1
|
||||
end
|
||||
|
||||
def instructeurs_self_management?
|
||||
routee? || instructeurs_self_management_enabled?
|
||||
end
|
||||
|
||||
def defaut_groupe_instructeur_for_new_dossier
|
||||
if !routee? || feature_enabled?(:procedure_routage_api)
|
||||
defaut_groupe_instructeur
|
||||
|
|
|
@ -291,16 +291,19 @@ class TypeDeChamp < ApplicationRecord
|
|||
def self.type_de_champ_types_for(procedure, user)
|
||||
has_legacy_number = (procedure.types_de_champ + procedure.types_de_champ_private).any?(&:legacy_number?)
|
||||
|
||||
type_champs.map do |type_champ|
|
||||
[I18n.t("activerecord.attributes.type_de_champ.type_champs.#{type_champ.last}"), type_champ.first]
|
||||
end.filter do |tdc|
|
||||
if tdc.last == TypeDeChamp.type_champs.fetch(:number)
|
||||
has_legacy_number
|
||||
else
|
||||
feature_name = FEATURE_FLAGS[tdc.last]
|
||||
feature_name.blank? || Flipper.enabled?(feature_name, user)
|
||||
end
|
||||
show_number = -> (tdc) { tdc != TypeDeChamp.type_champs.fetch(:number) || has_legacy_number }
|
||||
|
||||
enabled_featured_champ = -> (tdc) do
|
||||
feature_name = FEATURE_FLAGS[tdc]
|
||||
feature_name.blank? || Flipper.enabled?(feature_name, user)
|
||||
end
|
||||
|
||||
type_champs
|
||||
.keys
|
||||
.filter(&show_number)
|
||||
.filter(&enabled_featured_champ)
|
||||
.map { |tdc| [I18n.t("activerecord.attributes.type_de_champ.type_champs.#{tdc}"), tdc] }
|
||||
.sort_by(&:first)
|
||||
end
|
||||
|
||||
TYPES_DE_CHAMP_BASE = {
|
||||
|
|
70
app/schemas/composition-familiale.json
Normal file
|
@ -0,0 +1,70 @@
|
|||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "http://demarches-simplifiees.fr/composition-familiale.schema.json",
|
||||
"title": "composition familiale",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"adresse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"codePostalVille": {
|
||||
"type": "string"
|
||||
},
|
||||
"identite": {
|
||||
"type": "string"
|
||||
},
|
||||
"complementIdentite": {
|
||||
"type": "string"
|
||||
},
|
||||
"numeroRue": {
|
||||
"type": "string"
|
||||
},
|
||||
"pays": {
|
||||
"type": "string"
|
||||
},
|
||||
"complementIdentiteGeo": {
|
||||
"type": "string"
|
||||
},
|
||||
"lieuDit": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"allocataires": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/$defs/person" }
|
||||
},
|
||||
"enfants": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/$defs/person" }
|
||||
},
|
||||
"quotientFamilial": {
|
||||
"type": "integer"
|
||||
},
|
||||
"annee": {
|
||||
"type": "integer"
|
||||
},
|
||||
"mois": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 12
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"person": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"nomPrenom": {
|
||||
"type": "string"
|
||||
},
|
||||
"dateDeNaissance": {
|
||||
"type": "string",
|
||||
"pattern": "^[0-9]{8}$"
|
||||
},
|
||||
"sexe": {
|
||||
"enum": ["F", "M"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,12 +1,23 @@
|
|||
- content_for(:title, "Instructeurs du groupe #{@groupe_instructeur.label}")
|
||||
- if @procedure.routee?
|
||||
- content_for(:title, "Instructeurs du groupe #{@groupe_instructeur.label}")
|
||||
|
||||
= render partial: 'new_administrateur/breadcrumbs',
|
||||
locals: { steps: [link_to(@procedure.libelle, instructeur_procedure_path(@procedure)),
|
||||
link_to('Groupes d’instructeurs', instructeur_groupes_path(@procedure)),
|
||||
@groupe_instructeur.label] }
|
||||
= render partial: 'new_administrateur/breadcrumbs',
|
||||
locals: { steps: [link_to(@procedure.libelle, instructeur_procedure_path(@procedure)),
|
||||
link_to('Groupes d’instructeurs', instructeur_groupes_path(@procedure)),
|
||||
@groupe_instructeur.label] }
|
||||
|
||||
- else
|
||||
- content_for(:title, "Instructeurs de la démarche #{@procedure.libelle}")
|
||||
|
||||
= render partial: 'new_administrateur/breadcrumbs',
|
||||
locals: { steps: [link_to(@procedure.libelle, instructeur_procedure_path(@procedure)), 'Instructeurs'] }
|
||||
|
||||
.container.groupe-instructeur
|
||||
%h1 Groupe « #{@groupe_instructeur.label} »
|
||||
%h1
|
||||
- if @procedure.routee?
|
||||
Groupe « #{@groupe_instructeur.label} »
|
||||
- else
|
||||
Démarche « #{@procedure.libelle} »
|
||||
|
||||
.card.mt-2
|
||||
.card-title Gestion des instructeurs
|
||||
|
@ -27,10 +38,11 @@
|
|||
- @instructeurs.each do |instructeur|
|
||||
%tr
|
||||
%td= instructeur.email
|
||||
- confirmation_message = @procedure.routee? ? "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » du groupe « #{@groupe_instructeur.label} » ?" : "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » de la démarche ?"
|
||||
%td.actions= button_to 'retirer',
|
||||
{ action: :remove_instructeur },
|
||||
{ method: :delete,
|
||||
data: { confirm: "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » du groupe « #{@groupe_instructeur.label} » ?" },
|
||||
data: { confirm: confirmation_message },
|
||||
params: { instructeur: { id: instructeur.id }},
|
||||
class: 'button' }
|
||||
|
||||
|
|
46
app/views/instructeurs/procedures/_header.html.haml
Normal file
|
@ -0,0 +1,46 @@
|
|||
.procedure-header
|
||||
%h1= procedure_libelle procedure
|
||||
= link_to 'gestion des notifications', email_notifications_instructeur_procedure_path(procedure), class: 'header-link'
|
||||
|
|
||||
= link_to 'statistiques', stats_instructeur_procedure_path(procedure), class: 'header-link'
|
||||
|
||||
- if procedure.instructeurs_self_management?
|
||||
|
|
||||
- if can_manage_groupe_instructeurs?(procedure)
|
||||
= link_to 'instructeurs', admin_procedure_groupe_instructeurs_path(procedure), class: 'header-link'
|
||||
- elsif procedure.routee?
|
||||
= link_to 'instructeurs', instructeur_groupes_path(procedure), class: 'header-link'
|
||||
- else
|
||||
= link_to 'instructeurs', instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur), class: 'header-link'
|
||||
|
||||
- if can_send_groupe_message?(procedure)
|
||||
|
|
||||
= link_to 'contacter les usagers (brouillon)', email_usagers_instructeur_procedure_path(procedure), class: 'header-link'
|
||||
|
||||
%ul.tabs
|
||||
= tab_item('à suivre',
|
||||
instructeur_procedure_path(procedure, statut: 'a-suivre'),
|
||||
active: statut == 'a-suivre',
|
||||
badge: number_with_html_delimiter(a_suivre_count))
|
||||
|
||||
= tab_item(t('pluralize.followed', count: suivis_count),
|
||||
instructeur_procedure_path(procedure, statut: 'suivis'),
|
||||
active: statut == 'suivis',
|
||||
badge: number_with_html_delimiter(suivis_count),
|
||||
notification: has_en_cours_notifications)
|
||||
|
||||
= tab_item(t('pluralize.processed', count: traites_count),
|
||||
instructeur_procedure_path(procedure, statut: 'traites'),
|
||||
active: statut == 'traites',
|
||||
badge: number_with_html_delimiter(traites_count),
|
||||
notification: has_termine_notifications)
|
||||
|
||||
= tab_item('au total',
|
||||
instructeur_procedure_path(procedure, statut: 'tous'),
|
||||
active: statut == 'tous',
|
||||
badge: number_with_html_delimiter(tous_count))
|
||||
|
||||
= tab_item(t('pluralize.archived', count: archives_count),
|
||||
instructeur_procedure_path(procedure, statut: 'archives'),
|
||||
active: statut == 'archives',
|
||||
badge: number_with_html_delimiter(archives_count))
|
|
@ -7,35 +7,15 @@
|
|||
.procedure-logo{ style: "background-image: url(#{@procedure.logo_url})",
|
||||
role: 'img', 'aria-label': "logo de la démarche #{@procedure.libelle}" }
|
||||
|
||||
.procedure-header
|
||||
%h1= procedure_libelle @procedure
|
||||
= link_to 'gestion des notifications', email_notifications_instructeur_procedure_path(@procedure), class: 'header-link'
|
||||
|
|
||||
= link_to 'statistiques', stats_instructeur_procedure_path(@procedure), class: 'header-link'
|
||||
|
||||
- if @procedure.routee?
|
||||
|
|
||||
- if current_administrateur.present? && current_administrateur.owns?(@procedure)
|
||||
= link_to 'instructeurs', admin_procedure_groupe_instructeurs_path(@procedure), class: 'header-link'
|
||||
- else
|
||||
= link_to 'instructeurs', instructeur_groupes_path(@procedure), class: 'header-link'
|
||||
|
||||
%ul.tabs
|
||||
= tab_item('à suivre',
|
||||
instructeur_procedure_path(@procedure, statut: 'a-suivre'))
|
||||
= tab_item(t('pluralize.followed', count: 1),
|
||||
instructeur_procedure_path(@procedure, statut: 'suivis'),
|
||||
active: @statut == 'suivis')
|
||||
|
||||
= tab_item(t('pluralize.processed', count: 1),
|
||||
instructeur_procedure_path(@procedure, statut: 'traites'))
|
||||
|
||||
= tab_item('tous les dossiers',
|
||||
instructeur_procedure_path(@procedure, statut: 'tous'))
|
||||
|
||||
= tab_item(t('pluralize.archived', count: 1),
|
||||
instructeur_procedure_path(@procedure, statut: 'archives'),
|
||||
active: true)
|
||||
= render partial: 'header', locals: { procedure: @procedure,
|
||||
statut: @statut,
|
||||
a_suivre_count: @a_suivre_count,
|
||||
suivis_count: @suivis_count,
|
||||
traites_count: @traites_count,
|
||||
tous_count: @tous_count,
|
||||
archives_count: @archives_count,
|
||||
has_en_cours_notifications: @has_en_cours_notifications,
|
||||
has_termine_notifications: @has_termine_notifications }
|
||||
|
||||
.container
|
||||
%h1.titre-dossiers Dossiers supprimés
|
||||
|
|
|
@ -7,49 +7,15 @@
|
|||
.procedure-logo{ style: "background-image: url(#{@procedure.logo_url})",
|
||||
role: 'img', 'aria-label': "logo de la démarche #{@procedure.libelle}" }
|
||||
|
||||
.procedure-header
|
||||
%h1= procedure_libelle @procedure
|
||||
= link_to 'gestion des notifications', email_notifications_instructeur_procedure_path(@procedure), class: 'header-link'
|
||||
|
|
||||
= link_to 'statistiques', stats_instructeur_procedure_path(@procedure), class: 'header-link'
|
||||
|
||||
- if @procedure.routee?
|
||||
|
|
||||
- if current_administrateur.present? && current_administrateur.owns?(@procedure)
|
||||
= link_to 'instructeurs', admin_procedure_groupe_instructeurs_path(@procedure), class: 'header-link'
|
||||
- else
|
||||
= link_to 'instructeurs', instructeur_groupes_path(@procedure), class: 'header-link'
|
||||
- if @procedure.dossiers.state_brouillon.where(groupe_instructeur: current_instructeur.groupe_instructeur_ids).includes(:groupe_instructeur).present?
|
||||
|
|
||||
= link_to 'contacter les usagers (brouillon)', email_usagers_instructeur_procedure_path(@procedure), class: 'header-link'
|
||||
|
||||
%ul.tabs
|
||||
= tab_item('à suivre',
|
||||
instructeur_procedure_path(@procedure, statut: 'a-suivre'),
|
||||
active: @statut == 'a-suivre',
|
||||
badge: number_with_html_delimiter(@a_suivre_count))
|
||||
|
||||
= tab_item(t('pluralize.followed', count: @suivis_count),
|
||||
instructeur_procedure_path(@procedure, statut: 'suivis'),
|
||||
active: @statut == 'suivis',
|
||||
badge: number_with_html_delimiter(@suivis_count),
|
||||
notification: @has_en_cours_notifications)
|
||||
|
||||
= tab_item(t('pluralize.processed', count: @traites_count),
|
||||
instructeur_procedure_path(@procedure, statut: 'traites'),
|
||||
active: @statut == 'traites',
|
||||
badge: number_with_html_delimiter(@traites_count),
|
||||
notification: @has_termine_notifications)
|
||||
|
||||
= tab_item('au total',
|
||||
instructeur_procedure_path(@procedure, statut: 'tous'),
|
||||
active: @statut == 'tous',
|
||||
badge: number_with_html_delimiter(@tous_count))
|
||||
|
||||
= tab_item(t('pluralize.archived', count: @archives_count),
|
||||
instructeur_procedure_path(@procedure, statut: 'archives'),
|
||||
active: @statut == 'archives',
|
||||
badge: number_with_html_delimiter(@archives_count))
|
||||
= render partial: 'header', locals: { procedure: @procedure,
|
||||
statut: @statut,
|
||||
a_suivre_count: @a_suivre_count,
|
||||
suivis_count: @suivis_count,
|
||||
traites_count: @traites_count,
|
||||
tous_count: @tous_count,
|
||||
archives_count: @archives_count,
|
||||
has_en_cours_notifications: @has_en_cours_notifications,
|
||||
has_termine_notifications: @has_termine_notifications }
|
||||
|
||||
.procedure-actions
|
||||
= render partial: "download_dossiers", locals: { procedure: @procedure, exports: @exports, dossier_count: @tous_count + @archives_count }
|
||||
|
|
|
@ -2,4 +2,17 @@
|
|||
.card-title Routage
|
||||
%p.notice= t('.notice_html')
|
||||
|
||||
= link_to 'Activer le routage', update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure), class: 'button primary', method: 'patch'
|
||||
= link_to t('.button.routing_enable'), update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure), class: 'button primary mt-1', method: 'patch'
|
||||
|
||||
.card-title.mt-4 L‘autogestion des instructeurs
|
||||
%p.notice= t('.self_managment_notice_html')
|
||||
|
||||
= form_for procedure,
|
||||
method: :patch,
|
||||
url: update_instructeurs_self_management_enabled_admin_procedure_groupe_instructeurs_path(procedure),
|
||||
html: { class: 'form procedure-form__column--form no-background' } do |f|
|
||||
%label.toggle-switch
|
||||
= f.check_box :instructeurs_self_management_enabled, class: 'toggle-switch-checkbox', onchange: 'this.form.submit()'
|
||||
%span.toggle-switch-control.round
|
||||
%span.toggle-switch-label.on
|
||||
%span.toggle-switch-label.off
|
||||
|
|
|
@ -8,14 +8,11 @@
|
|||
Un service fourni par la
|
||||
= link_to "DINUM", "https://numerique.gouv.fr/", title: "Direction Interministérielle au Numérique"
|
||||
%br
|
||||
et incubé par
|
||||
= link_to "beta.gouv.fr", "https://beta.gouv.fr", title: "le site de Beta.gouv.fr"
|
||||
%li
|
||||
= link_to "https://numerique.gouv.fr/", title: "DINUM", 'aria-label': 'DINUM' do
|
||||
%span.footer-logo.footer-logo-dinum{ role: 'img', 'aria-label': 'Logo DINUM' }
|
||||
= link_to "https://beta.gouv.fr", title: "le site de Beta.gouv.fr", 'aria-label': 'beta.gouv.fr' do
|
||||
%span.footer-logo.footer-logo-beta-gouv-fr{ role: 'img', 'aria-label': 'Logo beta.gouv.fr' }
|
||||
%span.footer-logo.footer-logo-france{ role: 'img', 'aria-label': 'République Française' }
|
||||
|
||||
%li.footer-column
|
||||
%ul.footer-links
|
||||
|
|
|
@ -87,8 +87,8 @@
|
|||
.container
|
||||
.cta-panel-wrapper
|
||||
%div
|
||||
%h2.cta-panel-title Administration : vous voulez dématerialiser ?
|
||||
%p.cta-panel-explanation Proposez à vos usagers de remplir leurs dossiers en ligne
|
||||
%h2.cta-panel-title.grey Administration : vous voulez dématerialiser ?
|
||||
%p.cta-panel-explanation.grey Proposez à vos usagers de remplir leurs dossiers en ligne
|
||||
%div
|
||||
= link_to "Découvrez notre outil",
|
||||
administration_path,
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
.chart-container
|
||||
.chart
|
||||
= pie_chart @dossiers_states_for_pie,
|
||||
colors: ["rgba(222, 238, 265, 1)", "rgba(191, 220, 249, 1)", "rgba(113, 176, 239, 1)", "rgba(61, 149, 236, 1)"]
|
||||
colors: ["#000091", "#7F7FC8", "#9A9AFF", "#00006D"]
|
||||
|
||||
.stat-card.stat-card-half.pull-left
|
||||
%ul.segmented-control.pull-right
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Chartkick.options = {
|
||||
content_for: :charts_js,
|
||||
defer: true,
|
||||
colors: ["rgba(61, 149, 236, 1)"],
|
||||
colors: ["#000091"],
|
||||
thousands: ' ',
|
||||
decimal: ','
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
|
|||
inflect.acronym 'JSON'
|
||||
inflect.acronym 'RNA'
|
||||
inflect.acronym 'URL'
|
||||
inflect.acronym 'CNAF'
|
||||
inflect.irregular 'type_de_champ', 'types_de_champ'
|
||||
inflect.irregular 'type_de_champ_private', 'types_de_champ_private'
|
||||
inflect.irregular 'procedure_revision_type_de_champ', 'procedure_revision_types_de_champ'
|
||||
|
|
|
@ -5,8 +5,8 @@ fr:
|
|||
libelle: Caisse d’allocations familiales (CAF)
|
||||
scopes:
|
||||
personne: &personne
|
||||
noms_prenoms: noms et prénoms
|
||||
date_de_naissance: date de naissance
|
||||
nomPrenom: noms et prénoms
|
||||
dateDeNaissance: date de naissance
|
||||
sexe: genre
|
||||
allocataires:
|
||||
libelle: allocataires
|
||||
|
@ -17,14 +17,14 @@ fr:
|
|||
adresse:
|
||||
libelle: adresse
|
||||
identite: identité
|
||||
complement_d_identite: complément d’identité
|
||||
complement_d_identite_geo: complément d’identité géographique
|
||||
numero_et_rue: numéro et rue
|
||||
lieu_dit: lieu-dit
|
||||
code_postal_et_ville: code postal et ville
|
||||
complementIdentite: complément d’identité
|
||||
complementIdentiteGeo: complément d’identité géographique
|
||||
numeroRue: numéro et rue
|
||||
lieuDit: lieu-dit
|
||||
codePostalVille: code postal et ville
|
||||
pays: pays
|
||||
quotient_familial:
|
||||
libelle: quotient familial
|
||||
quotient_familial: quotient familial
|
||||
quotientFamilial: quotient familial
|
||||
mois: mois
|
||||
annee: année
|
||||
|
|
|
@ -39,3 +39,8 @@ fr:
|
|||
Cette fonctionnalité permet d’acheminer les dossier vers chaque groupe, et de ne plus avoir besoin de filtrer ses dossiers parmi une grande quantité de demandes. Elle est donc particulièrement adaptée pour les démarches nationales instruites localement.
|
||||
<br><br>
|
||||
Les instructeurs ne voient que les dossiers les concernant, et n’ont donc pas accès aux données extérieures à leur périmètre.
|
||||
self_managment_notice_html: |
|
||||
L’autogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.
|
||||
button:
|
||||
routing_enable: Activer le routage
|
||||
self_managment_toggle: Activer l’autogestion des instructeurs
|
||||
|
|
|
@ -424,6 +424,7 @@ Rails.application.routes.draw do
|
|||
collection do
|
||||
patch 'update_routing_criteria_name'
|
||||
patch 'update_routing_enabled'
|
||||
patch 'update_instructeurs_self_management_enabled'
|
||||
post 'import'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class AddInstructeursSelfManagementEnabledToProcedures < ActiveRecord::Migration[6.1]
|
||||
def change
|
||||
add_column :procedures, :instructeurs_self_management_enabled, :boolean
|
||||
end
|
||||
end
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2021_09_15_170019) do
|
||||
ActiveRecord::Schema.define(version: 2021_09_23_083416) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -621,6 +621,7 @@ ActiveRecord::Schema.define(version: 2021_09_15_170019) do
|
|||
t.string "encrypted_api_particulier_token"
|
||||
t.text "api_particulier_scopes", default: [], array: true
|
||||
t.jsonb "api_particulier_sources", default: {}
|
||||
t.boolean "instructeurs_self_management_enabled"
|
||||
t.index ["api_particulier_sources"], name: "index_procedures_on_api_particulier_sources", using: :gin
|
||||
t.boolean "routing_enabled"
|
||||
t.index ["declarative_with_state"], name: "index_procedures_on_declarative_with_state"
|
||||
|
|
|
@ -62,7 +62,6 @@ describe ApplicationController, type: :controller do
|
|||
expect(payload).to eq({
|
||||
user_agent: 'Rails Testing',
|
||||
user_id: current_user.id,
|
||||
user_email: current_user.email,
|
||||
user_roles: 'User'
|
||||
})
|
||||
end
|
||||
|
@ -86,7 +85,6 @@ describe ApplicationController, type: :controller do
|
|||
expect(payload).to eq({
|
||||
user_agent: 'Rails Testing',
|
||||
user_id: current_user.id,
|
||||
user_email: current_user.email,
|
||||
user_roles: 'User, Instructeur, Administrateur, SuperAdmin'
|
||||
})
|
||||
end
|
||||
|
|
|
@ -40,7 +40,7 @@ describe NewAdministrateur::JetonParticulierController, type: :controller do
|
|||
|
||||
context "and the api response is a success" do
|
||||
let(:cassette) { "api_particulier/success/introspect" }
|
||||
let(:procedure) { create(:procedure, administrateur: admin, api_particulier_sources: { cnaf: { allocataires: ['noms_prenoms'] } }) }
|
||||
let(:procedure) { create(:procedure, administrateur: admin, api_particulier_sources: { cnaf: { allocataires: ['nomPrenom'] } }) }
|
||||
|
||||
it 'saves the jeton' do
|
||||
expect(flash.alert).to be_nil
|
||||
|
|
|
@ -4,18 +4,18 @@ describe NewAdministrateur::SourcesParticulierController, type: :controller do
|
|||
before { sign_in(admin.user) }
|
||||
|
||||
describe "#show" do
|
||||
let(:procedure) { create(:procedure, administrateur: admin, api_particulier_scopes: ['cnaf_enfants'], api_particulier_sources: { cnaf: { enfants: ['noms_prenoms'] } }) }
|
||||
let(:procedure) { create(:procedure, administrateur: admin, api_particulier_scopes: ['cnaf_enfants'], api_particulier_sources: { cnaf: { enfants: ['nomPrenom'] } }) }
|
||||
|
||||
render_views
|
||||
|
||||
subject { get :show, params: { procedure_id: procedure.id } }
|
||||
|
||||
it 'renders the sources form' do
|
||||
expect(subject.body).to include(I18n.t('api_particulier.providers.cnaf.scopes.enfants.date_de_naissance'))
|
||||
expect(subject.body).to have_selector("input#api_particulier_sources_cnaf_enfants_[value=noms_prenoms][checked=checked]")
|
||||
expect(subject.body).to include(I18n.t('api_particulier.providers.cnaf.scopes.enfants.dateDeNaissance'))
|
||||
expect(subject.body).to have_selector("input#api_particulier_sources_cnaf_enfants_[value=nomPrenom][checked=checked]")
|
||||
|
||||
expect(subject.body).to have_selector("input#api_particulier_sources_cnaf_enfants_[value=date_de_naissance]")
|
||||
expect(subject.body).not_to have_selector("input#api_particulier_sources_cnaf_enfants_[value=date_de_naissance][checked=checked]")
|
||||
expect(subject.body).to have_selector("input#api_particulier_sources_cnaf_enfants_[value=dateDeNaissance]")
|
||||
expect(subject.body).not_to have_selector("input#api_particulier_sources_cnaf_enfants_[value=dateDeNaissance][checked=checked]")
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -47,12 +47,12 @@ describe NewAdministrateur::SourcesParticulierController, type: :controller do
|
|||
context 'when an authorized source is requested' do
|
||||
let(:requested_sources) do
|
||||
{
|
||||
api_particulier_sources: { cnaf: { enfants: ['noms_prenoms'] } }
|
||||
api_particulier_sources: { cnaf: { enfants: ['nomPrenom'] } }
|
||||
}
|
||||
end
|
||||
|
||||
it 'saves the source' do
|
||||
expect(procedure.api_particulier_sources).to eq("cnaf" => { "enfants" => ["noms_prenoms"] })
|
||||
expect(procedure.api_particulier_sources).to eq("cnaf" => { "enfants" => ["nomPrenom"] })
|
||||
expect(flash.notice).to eq(I18n.t(".new_administrateur.sources_particulier.update.sources_ok"))
|
||||
end
|
||||
end
|
||||
|
|
79
spec/fixtures/cassettes/api_particulier/success/composition_familiale.yml
vendored
Normal file
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
http_interactions:
|
||||
- request:
|
||||
method: get
|
||||
uri: https://particulier-test.api.gouv.fr/api/v2/composition-familiale?codePostal=92110&numeroAllocataire=5843972
|
||||
body:
|
||||
encoding: US-ASCII
|
||||
string: ''
|
||||
headers:
|
||||
User-Agent:
|
||||
- demarches-simplifiees.fr
|
||||
Accept:
|
||||
- application/json
|
||||
X-Api-Key:
|
||||
- 29eb50b65f64e8e00c0847a8bbcbd150e1f847
|
||||
Content-Type:
|
||||
- text/html; charset=utf-8
|
||||
Expect:
|
||||
- ''
|
||||
response:
|
||||
status:
|
||||
code: 200
|
||||
message: ''
|
||||
headers:
|
||||
Server:
|
||||
- nginx
|
||||
Date:
|
||||
- Mon, 20 Sep 2021 20:01:39 GMT
|
||||
Content-Type:
|
||||
- application/json; charset=utf-8
|
||||
Content-Length:
|
||||
- '387'
|
||||
X-Powered-By:
|
||||
- Express
|
||||
Vary:
|
||||
- Origin
|
||||
Etag:
|
||||
- W/"183-5m9o/ng+PfdMOPeC0VBn5lqbziQ"
|
||||
Strict-Transport-Security:
|
||||
- max-age=15724800; includeSubdomains
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: '
|
||||
{
|
||||
"adresse": {
|
||||
"codePostalVille": "92110 Clichy",
|
||||
"identite": "Mr SNOW Eric",
|
||||
"complementIdentite": "ne connait rien",
|
||||
"numeroRue": "109 rue La Boétie",
|
||||
"pays": "FRANCE",
|
||||
"complementIdentiteGeo": "au nord de paris",
|
||||
"lieuDit": "glagla"
|
||||
},
|
||||
"allocataires": [
|
||||
{
|
||||
"nomPrenom": "ERIC SNOW",
|
||||
"dateDeNaissance": "07011991",
|
||||
"sexe": "M"
|
||||
},
|
||||
{
|
||||
"nomPrenom": "SANSA SNOW",
|
||||
"dateDeNaissance": "15011992",
|
||||
"sexe": "F"
|
||||
}
|
||||
],
|
||||
"enfants": [
|
||||
{
|
||||
"nomPrenom": "PAUL SNOW",
|
||||
"dateDeNaissance": "04012018",
|
||||
"sexe": "M"
|
||||
}
|
||||
],
|
||||
"quotientFamilial": 1856,
|
||||
"annee": 2021,
|
||||
"mois": 6
|
||||
}
|
||||
'
|
||||
recorded_at: Mon, 20 Sep 2021 20:01:39 GMT
|
||||
recorded_with: VCR 6.0.0
|
79
spec/fixtures/cassettes/api_particulier/success/composition_familiale_invalid.yml
vendored
Normal file
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
http_interactions:
|
||||
- request:
|
||||
method: get
|
||||
uri: https://particulier-test.api.gouv.fr/api/v2/composition-familiale?codePostal=92110&numeroAllocataire=5843972
|
||||
body:
|
||||
encoding: US-ASCII
|
||||
string: ''
|
||||
headers:
|
||||
User-Agent:
|
||||
- demarches-simplifiees.fr
|
||||
Accept:
|
||||
- application/json
|
||||
X-Api-Key:
|
||||
- 29eb50b65f64e8e00c0847a8bbcbd150e1f847
|
||||
Content-Type:
|
||||
- text/html; charset=utf-8
|
||||
Expect:
|
||||
- ''
|
||||
response:
|
||||
status:
|
||||
code: 200
|
||||
message: ''
|
||||
headers:
|
||||
Server:
|
||||
- nginx
|
||||
Date:
|
||||
- Mon, 20 Sep 2021 20:01:39 GMT
|
||||
Content-Type:
|
||||
- application/json; charset=utf-8
|
||||
Content-Length:
|
||||
- '387'
|
||||
X-Powered-By:
|
||||
- Express
|
||||
Vary:
|
||||
- Origin
|
||||
Etag:
|
||||
- W/"183-5m9o/ng+PfdMOPeC0VBn5lqbziQ"
|
||||
Strict-Transport-Security:
|
||||
- max-age=15724800; includeSubdomains
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: '
|
||||
{
|
||||
"adresse": {
|
||||
"codePostalVille": "92110 Clichy",
|
||||
"identite": "Mr SNOW Eric",
|
||||
"complementIdentite": "ne connait rien",
|
||||
"numeroRue": "109 rue La Boétie",
|
||||
"pays": "FRANCE",
|
||||
"complementIdentiteGeo": "au nord de paris",
|
||||
"lieuDit": "glagla"
|
||||
},
|
||||
"allocataires": [
|
||||
{
|
||||
"nomPrenom": "ERIC SNOW",
|
||||
"dateDeNaissance": "07011991",
|
||||
"sexe": "M"
|
||||
},
|
||||
{
|
||||
"nomPrenom": "SANSA SNOW",
|
||||
"dateDeNaissance": "15011992",
|
||||
"sexe": "F"
|
||||
}
|
||||
],
|
||||
"enfants": [
|
||||
{
|
||||
"nomPrenom": "PAUL SNOW",
|
||||
"dateDeNaissance": "04012018",
|
||||
"sexe": "M"
|
||||
}
|
||||
],
|
||||
"quotientFamilial": 1856,
|
||||
"annee": 2021,
|
||||
"mois": 13
|
||||
}
|
||||
'
|
||||
recorded_at: Mon, 20 Sep 2021 20:01:39 GMT
|
||||
recorded_with: VCR 6.0.0
|
35
spec/fixtures/files/api_particulier/composition_familiale.json
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"allocataires": [
|
||||
{
|
||||
"dateDeNaissance": "07011991",
|
||||
"nomPrenom": "ERIC SNOW",
|
||||
"sexe": "M"
|
||||
},
|
||||
{
|
||||
"dateDeNaissance": "15011992",
|
||||
"nomPrenom": "SANSA SNOW",
|
||||
"sexe": "F"
|
||||
}
|
||||
],
|
||||
"enfants": [
|
||||
{
|
||||
"nomPrenom": "PAUL SNOW",
|
||||
"dateDeNaissance": "04012018",
|
||||
"sexe": "M"
|
||||
}
|
||||
],
|
||||
"quotient_familial" : {
|
||||
"quotientFamilial": 1856,
|
||||
"annee": 2021,
|
||||
"mois": 6
|
||||
},
|
||||
"adresse": {
|
||||
"codePostalVille": "92110 Clichy",
|
||||
"identite": "Mr SNOW Eric",
|
||||
"complementIdentite": "ne connait rien",
|
||||
"numeroRue": "109 rue La Boétie",
|
||||
"pays": "FRANCE",
|
||||
"complementIdentiteGeo": "au nord de paris",
|
||||
"lieuDit": "glagla"
|
||||
}
|
||||
}
|
70
spec/lib/api_particulier/cnaf_adapter_spec.rb
Normal file
|
@ -0,0 +1,70 @@
|
|||
describe APIParticulier::CNAFAdapter do
|
||||
let(:adapter) { described_class.new(api_particulier_token, numero_allocataire, code_postal, requested_sources) }
|
||||
|
||||
before { stub_const("API_PARTICULIER_URL", "https://particulier-test.api.gouv.fr/api") }
|
||||
|
||||
describe '#to_params' do
|
||||
let(:api_particulier_token) { '29eb50b65f64e8e00c0847a8bbcbd150e1f847' }
|
||||
let(:numero_allocataire) { '5843972' }
|
||||
let(:code_postal) { '92110' }
|
||||
|
||||
subject { VCR.use_cassette(cassette) { adapter.to_params } }
|
||||
|
||||
context 'when the api answer is valid' do
|
||||
let(:cassette) { "api_particulier/success/composition_familiale" }
|
||||
|
||||
context 'when the token has all the cnaf scopes' do
|
||||
context 'and all the sources are requested' do
|
||||
let(:requested_sources) do
|
||||
{
|
||||
'cnaf' => {
|
||||
'allocataires' => ['nomPrenom', 'dateDeNaissance', 'sexe'],
|
||||
'enfants' => ['nomPrenom', 'dateDeNaissance', 'sexe'],
|
||||
'adresse' => ['identite', 'complementIdentite', 'complementIdentiteGeo', 'numeroRue', 'lieuDit', 'codePostalVille', 'pays'],
|
||||
'quotient_familial' => ['quotientFamilial', 'annee', 'mois']
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
let(:result) { JSON.parse(File.read('spec/fixtures/files/api_particulier/composition_familiale.json')) }
|
||||
|
||||
it { is_expected.to eq(result) }
|
||||
end
|
||||
|
||||
context 'when no sources is requested' do
|
||||
let(:requested_sources) { {} }
|
||||
|
||||
it { is_expected.to eq({}) }
|
||||
end
|
||||
|
||||
context 'when a scalar is requested' do
|
||||
let(:requested_sources) { { 'cnaf' => { 'adresse' => ['pays'] } } }
|
||||
|
||||
it { is_expected.to eq({ "adresse" => { "pays" => "FRANCE" } }) }
|
||||
end
|
||||
|
||||
context 'when a quotient_familial is requested' do
|
||||
let(:requested_sources) { { 'cnaf' => { 'quotient_familial' => ['annee'] } } }
|
||||
|
||||
it { is_expected.to eq({ "quotient_familial" => { "annee" => 2021 } }) }
|
||||
end
|
||||
|
||||
context 'when a vector is requested' do
|
||||
let(:requested_sources) { { 'cnaf' => { 'allocataires' => ['nomPrenom'] } } }
|
||||
|
||||
it { is_expected.to eq({ "allocataires" => [{ "nomPrenom" => "ERIC SNOW" }, { "nomPrenom" => "SANSA SNOW" }] }) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the api answer is valid' do
|
||||
let(:cassette) { "api_particulier/success/composition_familiale_invalid" }
|
||||
|
||||
context 'when no sources is requested' do
|
||||
let(:requested_sources) { {} }
|
||||
|
||||
it { expect { subject }.to raise_error(APIParticulier::CNAFAdapter::InvalidSchemaError) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -23,8 +23,8 @@ describe APIParticulier::Services::SourcesService do
|
|||
let(:cnaf_allocataires_and_enfants) do
|
||||
{
|
||||
'cnaf' => {
|
||||
'allocataires' => ['noms_prenoms', 'date_de_naissance', 'sexe'],
|
||||
'enfants' => ['noms_prenoms', 'date_de_naissance', 'sexe']
|
||||
'allocataires' => ['nomPrenom', 'dateDeNaissance', 'sexe'],
|
||||
'enfants' => ['nomPrenom', 'dateDeNaissance', 'sexe']
|
||||
}
|
||||
}
|
||||
end
|
||||
|
@ -40,7 +40,7 @@ describe APIParticulier::Services::SourcesService do
|
|||
let(:requested_sources) do
|
||||
{
|
||||
'cnaf' => {
|
||||
'allocataires' => ['noms_prenoms', 'forbidden_sources', { 'weird_object' => 1 }],
|
||||
'allocataires' => ['nomPrenom', 'forbidden_sources', { 'weird_object' => 1 }],
|
||||
'forbidden_scope' => ['any_source'],
|
||||
'adresse' => { 'weird_object' => 1 }
|
||||
},
|
||||
|
@ -48,6 +48,6 @@ describe APIParticulier::Services::SourcesService do
|
|||
}
|
||||
end
|
||||
|
||||
it { is_expected.to eq({ 'cnaf' => { 'allocataires' => ['noms_prenoms'] } }) }
|
||||
it { is_expected.to eq({ 'cnaf' => { 'allocataires' => ['nomPrenom'] } }) }
|
||||
end
|
||||
end
|
||||
|
|