src/ApplicationBundle/Modules/System/Resources/views/inc/_start_anywhere_modal.html.twig line 1

Open in your IDE?
  1. {#
  2.   @System/inc/_start_anywhere_modal.html.twig
  3.   "Start Anywhere" global entry launcher modal.
  4.   Triggered by any element with data-toggle="modal" data-target="#startAnywhereModal".
  5. #}
  6. <div class="modal fade" id="startAnywhereModal" tabindex="-1"
  7.      aria-labelledby="startAnywhereModalLabel" aria-hidden="true">
  8.   <div class="modal-dialog modal-lg modal-dialog-centered">
  9.     <div class="modal-content" style="
  10.       background: #ffffff;
  11.       border-radius: 16px;
  12.       border: 1px solid var(--cp-outline-variant);
  13.       box-shadow: 0 24px 64px rgba(26,28,28,.18);
  14.       overflow: hidden;
  15.     ">
  16.       {# ── Header ─────────────────────────────────────────────────────── #}
  17.       <div style="
  18.         padding: 22px 24px 16px;
  19.         border-bottom: 1px solid var(--cp-outline-variant);
  20.         display: flex;
  21.         align-items: flex-start;
  22.         justify-content: space-between;
  23.       ">
  24.         <div>
  25.           <h5 id="startAnywhereModalLabel" style="
  26.             font-family: var(--cp-font-head);
  27.             font-size: 18px;
  28.             font-weight: 700;
  29.             color: var(--cp-text);
  30.             margin: 0 0 3px;
  31.           ">
  32.             <i class="zmdi zmdi-plus-circle" style="color: var(--cp-primary); margin-right: 8px;"></i>
  33.             Start Anywhere
  34.           </h5>
  35.           <p style="font-size: 12.5px; color: var(--cp-text-muted); margin: 0;">
  36.             Quickly initiate new workflows and records across the CRM &amp; ERP.
  37.           </p>
  38.         </div>
  39.         <button type="button" class="close" data-dismiss="modal" aria-label="Close"
  40.                 style="font-size: 20px; color: var(--cp-text-faint); background: none; border: none; cursor: pointer; padding: 0 2px;">
  41.           &times;
  42.         </button>
  43.       </div>
  44.       {# ── Action grid ─────────────────────────────────────────────────── #}
  45.       <div style="padding: 20px 24px;">
  46.         <div style="
  47.           display: grid;
  48.           grid-template-columns: repeat(3, 1fr);
  49.           gap: 12px;
  50.         " id="cp-sa-grid">
  51.           {# Lead #}
  52.           <a href="{{ path('create_lead', {id: 0}) }}" class="cp-sa-card" data-group="crm">
  53.             <div class="cp-sa-icon" style="background: rgba(91,93,113,.1); color: #5b5d71;">
  54.               <i class="zmdi zmdi-account-add"></i>
  55.             </div>
  56.             <div class="cp-sa-title">Create Lead</div>
  57.             <div class="cp-sa-desc">Log a new potential customer inquiry or prospect.</div>
  58.             <div class="cp-sa-meta">
  59.               <span>Min: Name, Email/Phone</span>
  60.               <span class="cp-sa-next">→ Qualification</span>
  61.             </div>
  62.           </a>
  63.           {# Account #}
  64.           <a href="{{ path('create_client', {id: 0}) }}" class="cp-sa-card" data-group="crm">
  65.             <div class="cp-sa-icon" style="background: rgba(91,93,113,.1); color: #5b5d71;">
  66.               <i class="zmdi zmdi-city-alt"></i>
  67.             </div>
  68.             <div class="cp-sa-title">Create Account</div>
  69.             <div class="cp-sa-desc">Register a new company or organisational entity.</div>
  70.             <div class="cp-sa-meta">
  71.               <span>Min: Company Name</span>
  72.               <span class="cp-sa-next">→ Add Contacts</span>
  73.             </div>
  74.           </a>
  75.           {# Opportunity #}
  76.           <a href="{{ path('create_opportunity', {id: 0}) }}" class="cp-sa-card" data-group="crm">
  77.             <div class="cp-sa-icon" style="background: rgba(133,79,0,.1); color: var(--cp-primary);">
  78.               <i class="zmdi zmdi-trending-up"></i>
  79.             </div>
  80.             <div class="cp-sa-title">Create Opportunity</div>
  81.             <div class="cp-sa-desc">Track a potential sale or deal pipeline.</div>
  82.             <div class="cp-sa-meta">
  83.               <span>Min: Value, Stage, Account</span>
  84.               <span class="cp-sa-next">→ Proposal</span>
  85.             </div>
  86.           </a>
  87.           {# Tender/RFQ #}
  88.           <a href="#" class="cp-sa-card" data-group="crm">
  89.             <div class="cp-sa-icon" style="background: rgba(112,93,0,.1); color: #705d00;">
  90.               <i class="zmdi zmdi-upload"></i>
  91.             </div>
  92.             <div class="cp-sa-title">Import Tender / RFQ</div>
  93.             <div class="cp-sa-desc">Upload and parse a formal request for quote.</div>
  94.             <div class="cp-sa-meta">
  95.               <span>Min: PDF/Word File</span>
  96.               <span class="cp-sa-next">→ Scope Review</span>
  97.             </div>
  98.           </a>
  99.           {# Offer/Proposal #}
  100.           <a href="{{ path('create_sales_proposal', {id: 0}) }}" class="cp-sa-card" data-group="offer">
  101.             <div class="cp-sa-icon" style="background: rgba(133,79,0,.1); color: var(--cp-primary);">
  102.               <i class="zmdi zmdi-assignment"></i>
  103.             </div>
  104.             <div class="cp-sa-title">Create Offer</div>
  105.             <div class="cp-sa-desc">Generate a formal proposal based on an Opportunity.</div>
  106.             <div class="cp-sa-meta">
  107.               <span>Min: Opportunity ID</span>
  108.               <span class="cp-sa-next">→ Client Review</span>
  109.             </div>
  110.           </a>
  111.           {# Site Survey #}
  112.           <a href="#" class="cp-sa-card" data-group="project">
  113.             <div class="cp-sa-icon" style="background: rgba(46,125,50,.1); color: #2e7d32;">
  114.               <i class="zmdi zmdi-pin-drop"></i>
  115.             </div>
  116.             <div class="cp-sa-title">Site Survey</div>
  117.             <div class="cp-sa-desc">Capture technical requirements and site assessment data.</div>
  118.             <div class="cp-sa-meta">
  119.               <span>Min: Opportunity ID</span>
  120.               <span class="cp-sa-next">→ Tech Review</span>
  121.             </div>
  122.           </a>
  123.         </div>{# /.cp-sa-grid #}
  124.         {# ── Filter/search ─────────────────────────────────────────────── #}
  125.         <div style="margin-top: 16px; position: relative;">
  126.           <i class="zmdi zmdi-search" style="
  127.             position: absolute; left: 12px; top: 50%; transform: translateY(-50%);
  128.             color: var(--cp-text-faint); font-size: 14px;
  129.           "></i>
  130.           <input type="text" id="cp-sa-filter" placeholder="Type to filter actions…" style="
  131.             width: 100%;
  132.             height: 38px;
  133.             padding: 0 14px 0 36px;
  134.             background: var(--cp-surface-low);
  135.             border: 1px solid var(--cp-outline-variant);
  136.             border-radius: var(--cp-radius);
  137.             font-size: 13px;
  138.             font-family: var(--cp-font-body);
  139.             color: var(--cp-text);
  140.             outline: none;
  141.           ">
  142.         </div>
  143.       </div>{# /.padding #}
  144.     </div>{# /.modal-content #}
  145.   </div>{# /.modal-dialog #}
  146. </div>{# /#startAnywhereModal #}
  147. <style>
  148.   .cp-sa-card {
  149.     display: flex;
  150.     flex-direction: column;
  151.     gap: 6px;
  152.     padding: 14px 14px 12px;
  153.     border: 1px solid var(--cp-outline-variant);
  154.     border-radius: var(--cp-radius-lg);
  155.     background: var(--cp-surface-low);
  156.     text-decoration: none;
  157.     color: inherit;
  158.     transition: background 0.12s, border-color 0.12s, box-shadow 0.12s;
  159.     cursor: pointer;
  160.   }
  161.   .cp-sa-card:hover {
  162.     background: var(--cp-surface-white);
  163.     border-color: var(--cp-primary);
  164.     box-shadow: 0 0 0 3px var(--cp-amber-dim);
  165.     text-decoration: none;
  166.     color: inherit;
  167.   }
  168.   .cp-sa-icon {
  169.     width: 34px;
  170.     height: 34px;
  171.     border-radius: 9px;
  172.     display: flex;
  173.     align-items: center;
  174.     justify-content: center;
  175.     font-size: var(--cp-fs-lg, 16px);
  176.     margin-bottom: 2px;
  177.   }
  178.   .cp-sa-title {
  179.     font-family: var(--cp-font-head);
  180.     font-size: var(--cp-fs-base, 13px);
  181.     font-weight: 700;
  182.     color: var(--cp-text);
  183.   }
  184.   .cp-sa-desc {
  185.     font-size: 12px;
  186.     color: var(--cp-text-muted);
  187.     line-height: 1.4;
  188.   }
  189.   .cp-sa-meta {
  190.     display: flex;
  191.     align-items: center;
  192.     justify-content: space-between;
  193.     font-size: var(--cp-fs-xs, 11.5px);
  194.     color: var(--cp-text-faint);
  195.     margin-top: 2px;
  196.   }
  197.   .cp-sa-next {
  198.     color: var(--cp-primary);
  199.     font-weight: 600;
  200.   }
  201.   .cp-sa-card.hidden { display: none; }
  202. </style>
  203. <script>
  204. (function () {
  205.   var filterInput = document.getElementById('cp-sa-filter');
  206.   if (!filterInput) return;
  207.   filterInput.addEventListener('input', function () {
  208.     var q = this.value.toLowerCase();
  209.     document.querySelectorAll('#cp-sa-grid .cp-sa-card').forEach(function (card) {
  210.       var text = card.textContent.toLowerCase();
  211.       card.classList.toggle('hidden', q.length > 0 && text.indexOf(q) === -1);
  212.     });
  213.   });
  214. }());
  215. </script>