Advertisement
C2Mikko

Untitled

May 6th, 2020
1,108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 12.05 KB | None | 0 0
  1. @extends('layouts.app')
  2.  
  3. @section('styles')
  4. <link rel="stylesheet" href="{{url('/css/jquery-ui.min.css')}}">
  5. <style>
  6. #accordion .input-group {
  7.   flex-direction: row-reverse;
  8. }
  9. .align-right {
  10.   text-align: right;
  11. }
  12. </style>
  13. @endsection
  14. @php
  15.   $user_id = Auth::user()->id;
  16. @endphp
  17. @section('content')
  18.  
  19. <div class="container h-100 overflow-auto">
  20.   <div id="accordion">
  21.     @foreach($main_metrixes as $main_metrix)
  22.     <div class="card">
  23.       <div class="card-header align-right" id="headingOne">
  24.         <h5 class="mb-0">
  25.           <button class="btn btn-link" data-toggle="collapse" data-target="#collapse{{$main_metrix->id}}" aria-expanded="true" aria-controls="collapse{{$main_metrix->id}}">
  26.           {{$main_metrix->name}}
  27.           </button>
  28.         </h5>
  29.       </div>
  30.  
  31.       <div id="collapse{{$main_metrix->id}}" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
  32.         <div class="card-body">
  33.           <form class="needs-validation cpr_form" mm="{{$main_metrix->id}}" method="POST" action="{{ route('admin.cpr_forms.store')}}" novalidate>
  34.             @csrf
  35.             <div class="form-row">
  36.  
  37.               <input hidden name="main_metrix_id" type="text" value="{{$main_metrix->id}}"/>
  38.               <input hidden name="user_id" type="text" value="{{$user_id}}"/>
  39.              
  40.               <div class="col-md-4">
  41.                 <div class="form-group">
  42.                   <label for="{{ __('messages.admin.Period') }}">{{ __('messages.admin.Quarter') }}</label>
  43.                   <select class="form-control" name="quarter" mm="{{$main_metrix->id}}" required>
  44.                     <option selected>{{ __('messages.admin.Quarter') }}</option>
  45.                     <option value="1">1</option>
  46.                     <option value="2">2</option>
  47.                     <option value="3">3</option>
  48.                     <option value="4">4</option>
  49.                   </select>
  50.                   <div class="invalid-feedback">
  51.                     This field is required
  52.                   </div>
  53.                 </div>
  54.               </div>
  55.              
  56.               <div class="col-md-4">
  57.                 <div class="form-group">
  58.                   <label for="{{ __('messages.admin.Period') }}">{{ __('messages.admin.Period') }}</label>
  59.                   <select class="form-control" name="period" id="{{ __('messages.admin.Period') }}" required>
  60.                     <!-- <option selected>{{ __('messages.admin.Period') }}</option> -->
  61.                     <option value="monthly">{{ __('messages.admin.Monthly') }}</option>
  62.                     <option value="quarterly">{{ __('messages.admin.Quarterly') }}</option>
  63.                     <option value="semiannually">{{ __('messages.admin.Semiannually') }}</option>
  64.                     <option value="annually">{{ __('messages.admin.Annually') }}</option>
  65.                   </select>
  66.                   <div class="invalid-feedback">
  67.                     This field is required
  68.                   </div>
  69.                 </div>
  70.               </div>
  71.  
  72.               <div class="col-md-4">
  73.                 <div class="form-group">
  74.                   <label>{{ __('messages.admin.Year') }}</label>
  75.                   <input type="text" class="form-control" name="year" value="{{date('Y')}}" id="{{ __('messages.admin.Year') }}" required>
  76.                   <div class="invalid-feedback">
  77.                     This field is required
  78.                   </div>
  79.                 </div>
  80.               </div>
  81.  
  82.               <div class="col-md-4">
  83.                 <div class="form-group">
  84.                   <label>{{ __('messages.admin.Target') }}</label>
  85.                   <div class="input-group mb-2 mr-sm-2">
  86.                     <div class="input-group-prepend">
  87.                       <div class="input-group-text">%</div>
  88.                     </div>
  89.                     <input type="number" name="target" value="0" max="100" min="0" class="form-control" required>
  90.                     <div class="invalid-feedback">
  91.                       Please enter a value between 0-100
  92.                     </div>
  93.                   </div>
  94.                 </div>
  95.               </div>
  96.              
  97.               <div class="col-md-4">
  98.                 <div class="form-group">
  99.                   <div class="monthly_achievements" mm="{{$main_metrix->id}}"></div>
  100.                   <label>{{ __('messages.admin.Monthly_Achivements') }}</label>
  101.                   <textarea class="form-control" hidden rows="5" cols="35" name="monthly_achievements" mm="{{$main_metrix->id}}"></textarea>
  102.                 </div>
  103.               </div>
  104.  
  105.               <div class="col-md-4">
  106.                 <div class="form-group">
  107.                   <label>{{ __('messages.admin.Achievements_Average') }}</label>
  108.                   <div class="input-group mb-2 mr-sm-2">
  109.                     <div class="input-group-prepend">
  110.                       <div class="input-group-text">%</div>
  111.                     </div>
  112.                     <input class="form-control" type="number" min="0" max="100" name="achievements_average" mm="{{$main_metrix->id}}">
  113.                     <div class="invalid-feedback">
  114.                       Please enter a value between 0-100
  115.                     </div>
  116.                   </div>
  117.                 </div>
  118.               </div>
  119.  
  120.               <div class="col-md-4">
  121.                 <div class="form-group">
  122.                   <label>{{ __('messages.admin.Achievements') }}</label>
  123.                   <textarea class="form-control" rows="5" cols="35" name="achievements_text" required>
  124.                   </textarea>
  125.                   <div class="invalid-feedback">
  126.                     This field is required
  127.                   </div>
  128.                 </div>
  129.               </div>
  130.  
  131.               <div class="col-md-4">
  132.                 <div class="form-group">
  133.                   <label>{{ __('messages.admin.Challenges') }}</label>
  134.                   <textarea class="form-control" rows="5" cols="35" name="challenges_text" required>
  135.                   </textarea>
  136.                   <div class="invalid-feedback">
  137.                     This field is required
  138.                   </div>
  139.                 </div>
  140.               </div>
  141.  
  142.               <div class="col-md-4">
  143.                 <div class="form-group">
  144.                   <label>{{ __('messages.admin.Improvements') }}</label>
  145.                   <textarea class="form-control" rows="5" cols="35" name="improvements_text" required>
  146.                   </textarea>
  147.                   <div class="invalid-feedback">
  148.                     This field is required
  149.                   </div>
  150.                 </div>
  151.               </div>
  152.  
  153.               <div class="col-md-12 text-right">
  154.                 <button type="submit" class="btn btn-primary">{{ __('messages.admin.submit') }}</button>
  155.               </div>
  156.             </div>
  157.           </form>
  158.         </div>
  159.       </div>
  160.     </div>
  161.     @endforeach
  162.   </div>
  163. </div>
  164. @endsection
  165.  
  166. @section('javascript')
  167. <!-- jQuery -->
  168. <script src="{{asset('js/jquery-3.4.1.min.js')}}" ></script>
  169.  
  170. <!-- jQuery UI -->
  171. <script src="{{asset('js/jquery-ui.min.js')}}"></script>
  172.  
  173. <!-- Custom Scripts -->
  174. <script>
  175. const cpr_forms = <?php echo(json_encode($cpr_forms)); ?> ;
  176. const year = <?php echo(date('Y')); ?>;
  177. const months = ["January", "February", "March", "April", "May", "June",
  178.   "July", "August", "September", "October", "November", "December"];
  179.   window.addEventListener('load', function() {
  180.     var forms = document.getElementsByClassName('needs-validation');
  181.  
  182.     var validation = Array.prototype.filter.call(forms, function(form) {
  183.       form.addEventListener('submit', function(event) {
  184.         if (form.checkValidity() === false) {
  185.           event.preventDefault();
  186.           event.stopPropagation();
  187.         } else {
  188.           var mmID = $(event.target).attr("mm");
  189.           var monthly_achivements = {};
  190.  
  191.           setAchievementsAvarage(mmID);
  192.  
  193.           $(".monthly_achievements[mm='"+mmID+"'] div .input-group input").each(function(){
  194.             var element = $( this );
  195.             monthly_achivements[element[0].name] = element[0].value;
  196.             $(element).prop("disabled", true);
  197.           });
  198.  
  199.           $("textarea[name='monthly_achievements'][mm='"+mmID+"']").val(JSON.stringify(monthly_achivements));
  200.         }
  201.  
  202.         form.classList.add('was-validated');
  203.       }, false);
  204.     });
  205.   }, false);
  206.  
  207.   $(document).ready(function() {
  208.     setMonthlyAchivements(1);
  209.     $(".cpr_form").each(function(){
  210.       var mmID = $(this).attr("mm");
  211.       setCprForm(mmID,1);
  212.     });
  213.     $("select[name='quarter']").change(function(event){
  214.       var quarter = event.target.value;
  215.       var mmID = $(event.target).attr("mm");
  216.       setMonthlyAchivements(quarter,mmID);
  217.       setCprForm(mmID,quarter);
  218.     });
  219.   });
  220.   var setAchievementsAvarage = function(mmID){
  221.     var avarage = 0;
  222.       $(".monthly_achievements[mm='"+mmID+"'] div .input-group input").each(function(){
  223.         var element = $(this);
  224.         avarage += parseInt(element[0].value);
  225.       });
  226.       avarage/=3;
  227.       avarage = Math.round(avarage);
  228.       $("input[name='achievements_average'][mm='"+mmID+"']").val(avarage);
  229.   }
  230.   var setMonthlyAchivements = function(quarter,mmID){
  231.     var start = (quarter-1)*3;
  232.     var element = $(".monthly_achievements");
  233.     if(!!mmID){
  234.       element = $(".monthly_achievements[mm='"+mmID+"']");
  235.     }
  236.       $(element).html("");
  237.       for (let i = start; i < start+3; i++) {
  238.        var html = '<div><label>'+months[i]+'</label><div class="input-group"><div class="input-group-prepend"><div class="input-group-text">%</div></div><input type="number" max="100" min="0" value="0" name="'+months[i]+'" class="form-control"><div class="invalid-feedback">Please enter a value between 0-100</div></div></div>';
  239.         $(element).append(html);
  240.       }
  241.       $(".monthly_achievements div input").on("change",function(event){
  242.       var inputElement = event.target;
  243.       var mmID = $(inputElement).parent().parent().parent().attr("mm");
  244.       setAchievementsAvarage(mmID);
  245.     });
  246.   }
  247.  
  248.   var findCprForm = function(mmID,quarter){
  249.     var cpr_form = null;
  250.     for (let i = 0; i < cpr_forms.length; i++) {
  251.      const c = cpr_forms[i];
  252.      if(c.main_metrix_id == mmID && c.quarter == quarter){
  253.        cpr_form = c;
  254.        break;
  255.      }
  256.    }
  257.    return cpr_form;
  258.  }
  259.  var setCprForm = function(mmID,quarter){
  260.    var cpr_form = findCprForm(mmID,quarter);
  261.    if(cpr_form == null) {
  262.      clearCprForm(mmID);
  263.      return;
  264.    };
  265.    var cpr_form_html = $(".cpr_form[mm='"+mmID+"']");
  266.    cpr_form_html.find("select[name='period']").val(cpr_form.period);
  267.    cpr_form_html.find("input[name='year']").val(cpr_form.year);
  268.    cpr_form_html.find("input[name='target']").val(cpr_form.target);
  269.    cpr_form_html.find("textarea[name='monthly_achivements']").val(cpr_form.monthly_achievements);
  270.    var monthly_achievements_obj = JSON.parse(cpr_form.monthly_achievements);
  271.    var keys = Object.keys(monthly_achievements_obj);
  272.    for (let i = 0; i < keys.length; i++) {
  273.      cpr_form_html.find(".monthly_achievements div input[name='"+keys[i]+"']").val(monthly_achievements_obj[keys[i]]);
  274.    }
  275.    cpr_form_html.find("input[name='achievements_average']").val(cpr_form.achievements_average);
  276.    cpr_form_html.find("textarea[name='achievements_text']").val(cpr_form.achievements_text);
  277.    cpr_form_html.find("textarea[name='challenges_text']").val(cpr_form.challenges_text);
  278.    cpr_form_html.find("textarea[name='improvements_text']").val(cpr_form.improvements_text);
  279.  }
  280.  var clearCprForm = function(mmID){
  281.    var cpr_form_html = $(".cpr_form[mm='"+mmID+"']");
  282.    cpr_form_html.find("select[name='period']").val("monthly");
  283.    cpr_form_html.find("input[name='year']").val(year);
  284.    cpr_form_html.find("input[name='target']").val("0");
  285.    cpr_form_html.find("input[name='achievements_average']").val("0");
  286.    cpr_form_html.find("textarea[name='achievements_text']").val("");
  287.    cpr_form_html.find("textarea[name='challenges_text']").val("");
  288.    cpr_form_html.find("textarea[name='improvements_text']").val("");
  289.  }
  290.  
  291. </script>
  292. @endsection
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement