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]
|
||||
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
|
||||
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',
|
||||
= 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
|
||||
|
|