Zeiterfassung: Auch beim Laden entsprechende Eingabe-Felder sperren:
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Mon, 17 May 2021 14:32:09 +0000 (16:32 +0200)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Mon, 17 May 2021 15:29:28 +0000 (17:29 +0200)
- wenn Auftrag ausgewählt. so ist Kunde und Projekt gesperrt
- wenn Projekt ausgewählt, und Projekt einen Kunden hat, so ist
    Kunde gesperrt

SL/Controller/TimeRecording.pm
js/kivi.TimeRecording.js
templates/webpages/time_recording/form.html

index 5175af7..628c8ae 100644 (file)
@@ -103,10 +103,13 @@ sub action_edit {
     $self->{end_time}   = $self->time_recording->end_time->to_kivitendo_time;
   }
 
+  my $inputs_to_disable = $self->get_inputs_to_disable;
+
   $self->setup_edit_action_bar;
 
   $self->render('time_recording/form',
-                title  => t8('Time Recording'),
+                title             => t8('Time Recording'),
+                inputs_to_disable => $inputs_to_disable,
   );
 }
 
@@ -405,4 +408,12 @@ sub safe_callback {
   $::form->{callback} || (action => 'list')
 }
 
+sub get_inputs_to_disable {
+  my ($self) = @_;
+
+  return [qw(customer project)]  if $self->time_recording->order_id;
+  return [qw(customer)]          if $self->time_recording->project_id && $self->time_recording->project->customer_id;
+}
+
+
 1;
index 574549e..dd44411 100644 (file)
@@ -1,6 +1,8 @@
 namespace('kivi.TimeRecording', function(ns) {
   'use strict';
 
+  ns.inputs_to_disable = [];
+
   ns.set_end_date = function() {
     if ($('#start_date').val() !== '' && $('#end_date').val() === '') {
       var kivi_start_date  = kivi.format_date(kivi.parse_date($('#start_date').val()));
@@ -56,8 +58,20 @@ namespace('kivi.TimeRecording', function(ns) {
     });
   };
 
+  ns.set_input_constraints = function() {
+    $(ns.inputs_to_disable).each(function(idx, elt) {
+      if ("customer" === elt) {
+        $('#time_recording_customer_id_name').prop('disabled', true);
+      }
+      if ("project" === elt) {
+        $('#time_recording_project_id_name').prop('disabled', true);
+      }
+    });
+  };
+
 });
 
 $(function() {
+  kivi.TimeRecording.set_input_constraints();
   $('#time_recording_project_id').on('set_item:ProjectPicker', function(){ kivi.TimeRecording.project_changed() });
 });
index 07939da..c5a8d63 100644 (file)
   [%- END %]
 
 </form>
+
+<script type="text/javascript">
+<!--
+  [% FOREACH i = inputs_to_disable %]
+    kivi.TimeRecording.inputs_to_disable.push("[% i %]");
+  [% END %]
+-->
+</script>