templates/lot.html.twig line 1

Open in your IDE?
  1. {% extends 'baseVisa.html.twig' %}
  2. {%  block stylesheets %}
  3.     <link href="{{ asset('dropzone-5.7.0/dist/dropzone.css') }}" rel="stylesheet" type="text/css"/>
  4.     <script src="{{ asset('dropzone-5.7.0/dist/dropzone.js') }}" type="text/javascript"></script>
  5.     <style>
  6.         /*A passer dans css externe*/
  7.         .dzUpload { cursor:hand;}
  8.         .row.upload button.btn  {margin:15px 0;}
  9.         .dropzone_container { display:none; }
  10.     </style>
  11. {% endblock %}
  12. {% block javascripts %}
  13.         <script>
  14.             Dropzone.autoDiscover = false;
  15.             const previewNode = document.querySelector("#template");
  16.             previewNode.id = "";
  17.             const previewTemplate = previewNode.parentNode.innerHTML;
  18.             previewNode.parentNode.removeChild(previewNode);
  19.             $('.dzUpload').each(function () {
  20.                 var dzContainer = $('.dropzone_container[data-id=' + $(this).data('dzid') + ']');
  21.                 var parentRow = $(this).parents('.dzUploadContainer');
  22.                 $(this).unbind().click(function (e) {
  23.                     e.preventDefault();
  24.                     e.stopPropagation();
  25.                     if (!dzContainer.prop('active')) {
  26.                         dzContainer.show();
  27.                         dzContainer.prop('active', 1);
  28.                     } else {
  29.                         dzContainer.hide();
  30.                         dzContainer.prop('active', 0);
  31.                     }
  32.                 });
  33.                 $(parentRow).on('dragover', function () {
  34.                     if (!dzContainer.prop('active')) {
  35.                         dzContainer.show();
  36.                         dzContainer.prop('active', 1);
  37.                     }
  38.                 });
  39.                 // $(parentRow).click(function (e) {
  40.                 //     if (!dzContainer.prop('active')) {
  41.                 //         dzContainer.show();
  42.                 //         dzContainer.prop('active', 1);
  43.                 //     }
  44.                 // });
  45.                 // $(parentRow).find('a').click(function (e) {
  46.                 //     e.stopPropagation();
  47.                 //     return true;
  48.                 // });
  49.                 let uploadButton = dzContainer.find('button.btn-success');
  50.                 let uploadRow = dzContainer.find('.row.upload');
  51.                 uploadRow.hide();
  52.                 dzContainer.find('.dropzone').dropzone({
  53.                     autoProcessQueue: false,
  54.                     uploadMultiple: false,
  55.                     timeout: 900000, // 15 minutes
  56.                     parallelUploads: 20,
  57.                     dictRemoveFile: "Retirer ce fichier",
  58.                     paramName: "fichier",
  59.                     dictDefaultMessage: 'Glissez ici vos fichiers à transmettre ou cliquez pour les sélectionner',
  60.                     maxFiles: 20,
  61.                     // clickable: [dzContainer.find('.dropzone').get(0), parentRow.get(0)],
  62.                     clickable: [dzContainer.find('.dropzone').get(0)],
  63.                     addRemoveLinks: false,
  64.                     previewTemplate: previewTemplate,
  65.                     url: "/{{ idProjet }}/exigencedz/" + dzContainer.data('id'),
  66.                     init: function () {
  67.                         var dzClosure = this;
  68.                         uploadButton.on('click', function () {
  69.                             dzClosure.processQueue();
  70.                         });
  71.                         dzClosure.on("reset", file => {
  72.                             uploadRow.hide();
  73.                         });
  74.                         dzClosure.on("addedfile", file => {
  75.                             uploadRow.show();
  76.                         });
  77.                         dzClosure.on("complete", file => {
  78.                             if (dzClosure.getUploadingFiles().length === 0 && dzClosure.getQueuedFiles().length === 0) {
  79.                                 dzContainer.hide();
  80.                                 dzContainer.prop('active', 0);
  81.                                 alert("Vos fichiers ont été transférés avec succès");
  82.                             }
  83.                         });
  84.                     }
  85.                 });
  86.             });
  87.         </script>
  88. {% endblock javascripts %}
  89. {% block title %}QEBOK | {{ projet.nomDuProjet }} | Lot n° {{ listExigences.0.lot }}{% endblock %}
  90. {% block body %}
  91. <div class="principal">
  92.     <div class="intro">
  93.         <div style="float:right">
  94.             {% if app.user %}
  95.             <a href="{{ path('lotZip', {'idProjet' : idProjet,'lot' : lot}) }}" class="bouton btn" style="padding-left:40px;"><span class="material-symbols-outlined" style="top:unset">Download</span> Télécharger les justificatifs</a>
  96.             {% endif %}
  97.             <a href="{{ path('tri', {'code' : projet.code}) }}" class="bouton btn" style="padding-left:40px;"><span class="material-symbols-outlined" style="top:unset">visibility</span> Tous les lots</a>
  98.         </div>
  99.         <h1>Projet {{ projet.nomDuProjet }} - Lot n° {{ listExigences.0.lot }} {#- {{ listeSousLots|join(' / ') }}#}</h1>
  100.         <p>{{ listExigences|length }} exigences présentes </p>  
  101.     </div>
  102.     <div class="tableau">
  103.         <ul class="label no-mobile">
  104.             <li><p>Exigence Numero</p></li>
  105.             <li><p>Nom du lot et de l'entreprise</p></li>
  106.             <li><p>Cibles</p></li>
  107.             <li><p>Eléments concernés</p></li>
  108.             <li><p>Exigences</p></li>
  109.             <li><p class="transparent">Télécharger</p></li>
  110.             <li><p class="transparent">Voir en détail</p></li>
  111.         </ul>
  112.         {% for exigence in listExigences %}
  113.             <div class="content dzUploadContainer"  id="exigence_{{ exigence.numeroExigence }}">
  114.                 <ul class="infos">
  115.                  <li class="infos__row exigence">
  116.                         <span class="no-desktop">Exigence N°</span>
  117.                         <p{% if exigence.validation == "true" %} style="color: #58B8B3; background: #DCEDEC"{% else %} style="color: #AEAF50"{% endif %}>{{ exigence.numeroExigence }}</p>
  118.                  </li>
  119.                     <li class="infos__row sous-lot"><span class="no-desktop">Sous-lot</span><p>{{ exigence.sousLot }}</p></li>
  120.                     <li class="infos__row cibles"><span class="no-desktop">Cibles</span><p>{{ exigence.cibles }}</p></li>
  121.                     <li class="infos__row infos__row--column elements"><span class="no-desktop">Eléments concernés</span><p>{{ exigence.elementsConcernes }}</p></li>
  122.                     <li class="infos__row infos__row--column description"><span class="no-desktop">Exigences</span><p>{{ exigence.exigences }}</p></li>
  123.                     <li class="infos__row bouton1"><p><a href="" class="dzUpload" data-dzid="{{ exigence.id }}" style="cursor: pointer" title="Ajouter des documents"><span class="material-symbols-outlined">upload</span>Transmettre</a></p></li>
  124.                     <li class="infos__row bouton2"><p><a href="{{ path('exigence', {'exigence' : exigence.id, 'code' : projet.code}) }}">
  125.                                 <span class="material-symbols-outlined">visibility</span>Voir en détail</a></p></li>
  126.                 </ul>
  127.                 <div class="dropzone_container" style="padding:10px 0px;" data-id="{{ exigence.id }}" >
  128.                         <div class="dropzone"></div>
  129.                         <div class="row upload"><div class="col-sm-12 text-center"><button class="btn btn-success btn-sm">
  130.                                     Transférer les fichiers</button></div></div>
  131.                 </div>
  132.                 {% if exigence.visaJustificatifs or exigence.commentairesEntreprise or exigence.commentairesMOE is not empty %}
  133.                 <div class="justificatif">
  134.                 {% endif %}
  135.                 {% if exigence.validation == "true" %}
  136.                 <p style="text-align: right" >Exigence validée</p>
  137.                 {% else %}
  138.                 <p style="text-align: right; color:#AEAF50">Exigence non validée</p>
  139.                 {% endif %}
  140.                 {% if exigence.visaJustificatifs is not empty %}
  141.                     <p>Justificatifs déjà obtenus :</p>
  142.                     <ul>
  143.                         {% for element in exigence.getVisaJustificatifs() %}
  144.                             <li><a title="{{ element.getNomDuFichier() }}" href="{{ path('fichierLot', {idProjet : idProjet,
  145.                                 'idLot' : exigence.lot, 'idFichier': element.getId()}) }}">{{ element.NomDuFichier }}</a></li>{% endfor %}
  146.                     </ul>                
  147.                 {% endif %}
  148.                {% if exigence.commentairesEntreprise is not empty %}               
  149.                     <p>Commentaires entreprise :</p>
  150.                     <ul>
  151.                         <li>
  152.                             <p class="commentaires">{{ exigence.commentairesEntreprise }}</p>
  153.                         </li>
  154.                     </ul>
  155.                 {% endif %}
  156.                {% if exigence.commentairesMOE is not empty %}                
  157.                     <p>Commentaires de la MOE :</p>
  158.                     <ul>
  159.                         <li>
  160.                            <p class="commentaires">{{ exigence.commentairesMOE }}</p>
  161.                         </li>
  162.                     </ul>
  163.                  {% endif %}
  164.                 {% if exigence.visaJustificatifs or exigence.commentairesEntreprise or exigence.commentairesMOE is not empty %}
  165.                 
  166.                 </div>
  167.                 {% endif %}                
  168.             </div>
  169.         {% endfor %}
  170.     </div>
  171.         <div style="display:none">
  172.             <div id="template" class="row" style="margin-bottom :10px;">
  173.                 <div class="col-sm-6 text-left">
  174.                     <span class="name" data-dz-name></span>
  175.                     <strong class="error text-danger" data-dz-errormessage></strong>
  176.                 </div>
  177.                 <div class="col-sm-2 text-right">
  178.                     <span class="size" data-dz-size></span>
  179.                 </div>
  180.                 <div class="col-sm-2 text-left">
  181.                     <div class="progress progress-striped active" role="progressbar"
  182.                          aria-valuemin="0"
  183.                          aria-valuemax="100" aria-valuenow="0">
  184.                         <div class="progress-bar progress-bar-success"
  185.                              style="width:0;"
  186.                              data-dz-uploadprogress></div>
  187.                     </div>
  188.                 </div>
  189.                 <div class="col-sm-2 text-right">
  190.                     <button data-dz-remove class="btn btn-xs btn-danger delete">
  191.                         <i class="glyphicon glyphicon-trash"></i>
  192.                         <span>Retirer</span>
  193.                     </button>
  194.                 </div>
  195.             </div>
  196.         </div>
  197.         <BR>
  198.                 <div style="float:right">
  199.             {% if app.user %}
  200.             <a href="{{ path('lotZip', {'idProjet' : idProjet,'lot' : lot}) }}" class="bouton btn" style="padding-left:40px;"><span class="material-symbols-outlined" style="top:unset">Download</span> Télécharger les justificatifs</a>
  201.             <a href="{{ path('nouvelleExigence', {'code' : projet.code,'lot' : lot}) }}" class="bouton btn" style="padding-left:40px;"><span class="material-symbols-outlined" style="top:unset">Add</span>Ajouter une exigence</a>
  202.             
  203.             {% endif %}
  204.             <a href="{{ path('tri', {'code' : projet.code}) }}" class="bouton btn" style="padding-left:40px;"><span class="material-symbols-outlined" style="top:unset">visibility</span> Tous les lots</a>
  205.         </div>
  206. </div>
  207.         {% if app.user %}
  208.             <div class="partie_formulaire">
  209.                 <div class="intro">
  210.                     <h2 style="margin-bottom:15px;">Envoyer les exigences par email</h2>
  211.                     {{ form(formEmail) }}
  212.                 </div>
  213.             </div>
  214.         {% endif %} 
  215.         {# Message vous devez vous connecter #}
  216.         {#                    <a href="{{ path('user_security_login') }}">Se connecter</a>#}
  217.         {% endblock %}