mirror of
https://github.com/ansible/awx.git
synced 2026-03-13 15:09:32 -02:30
Merge pull request #3173 from AlanCoding/3115_ask_skip_tags
Add ask_skip_tags
This commit is contained in:
@@ -1825,7 +1825,7 @@ class JobTemplateSerializer(UnifiedJobTemplateSerializer, JobOptionsSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = JobTemplate
|
model = JobTemplate
|
||||||
fields = ('*', 'host_config_key', 'ask_variables_on_launch', 'ask_limit_on_launch',
|
fields = ('*', 'host_config_key', 'ask_variables_on_launch', 'ask_limit_on_launch',
|
||||||
'ask_tags_on_launch', 'ask_job_type_on_launch', 'ask_inventory_on_launch',
|
'ask_tags_on_launch', 'ask_skip_tags_on_launch', 'ask_job_type_on_launch', 'ask_inventory_on_launch',
|
||||||
'ask_credential_on_launch', 'survey_enabled', 'become_enabled', 'allow_simultaneous')
|
'ask_credential_on_launch', 'survey_enabled', 'become_enabled', 'allow_simultaneous')
|
||||||
|
|
||||||
def get_related(self, obj):
|
def get_related(self, obj):
|
||||||
@@ -1906,19 +1906,14 @@ class JobTemplateSerializer(UnifiedJobTemplateSerializer, JobOptionsSerializer):
|
|||||||
|
|
||||||
class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer):
|
class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer):
|
||||||
|
|
||||||
passwords_needed_to_start = serializers.ReadOnlyField()
|
|
||||||
ask_variables_on_launch = serializers.ReadOnlyField()
|
|
||||||
ask_limit_on_launch = serializers.ReadOnlyField()
|
|
||||||
ask_tags_on_launch = serializers.ReadOnlyField()
|
|
||||||
ask_job_type_on_launch = serializers.ReadOnlyField()
|
|
||||||
ask_inventory_on_launch = serializers.ReadOnlyField()
|
|
||||||
ask_credential_on_launch = serializers.ReadOnlyField()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Job
|
model = Job
|
||||||
fields = ('*', 'job_template', 'passwords_needed_to_start', 'ask_variables_on_launch',
|
fields = ('*', 'job_template', )
|
||||||
'ask_limit_on_launch', 'ask_tags_on_launch', 'ask_job_type_on_launch',
|
read_only_fields = (
|
||||||
'ask_inventory_on_launch', 'ask_credential_on_launch')
|
'*', 'passwords_needed_to_start', 'ask_variables_on_launch',
|
||||||
|
'ask_limit_on_launch', 'ask_tags_on_launch',
|
||||||
|
'ask_skip_tags_on_launch', 'ask_job_type_on_launch',
|
||||||
|
'ask_inventory_on_launch', 'ask_credential_on_launch')
|
||||||
|
|
||||||
def get_related(self, obj):
|
def get_related(self, obj):
|
||||||
res = super(JobSerializer, self).get_related(obj)
|
res = super(JobSerializer, self).get_related(obj)
|
||||||
@@ -2282,14 +2277,15 @@ class JobLaunchSerializer(BaseSerializer):
|
|||||||
fields = ('can_start_without_user_input', 'passwords_needed_to_start',
|
fields = ('can_start_without_user_input', 'passwords_needed_to_start',
|
||||||
'extra_vars', 'limit', 'job_tags', 'skip_tags', 'job_type', 'inventory',
|
'extra_vars', 'limit', 'job_tags', 'skip_tags', 'job_type', 'inventory',
|
||||||
'credential', 'ask_variables_on_launch', 'ask_tags_on_launch',
|
'credential', 'ask_variables_on_launch', 'ask_tags_on_launch',
|
||||||
'ask_job_type_on_launch', 'ask_limit_on_launch',
|
'ask_skip_tags_on_launch', 'ask_job_type_on_launch', 'ask_limit_on_launch',
|
||||||
'ask_inventory_on_launch', 'ask_credential_on_launch',
|
'ask_inventory_on_launch', 'ask_credential_on_launch',
|
||||||
'survey_enabled', 'variables_needed_to_start',
|
'survey_enabled', 'variables_needed_to_start',
|
||||||
'credential_needed_to_start', 'inventory_needed_to_start',
|
'credential_needed_to_start', 'inventory_needed_to_start',
|
||||||
'job_template_data', 'defaults')
|
'job_template_data', 'defaults')
|
||||||
read_only_fields = ('ask_variables_on_launch', 'ask_limit_on_launch',
|
read_only_fields = (
|
||||||
'ask_tags_on_launch', 'ask_job_type_on_launch',
|
'ask_variables_on_launch', 'ask_limit_on_launch', 'ask_tags_on_launch',
|
||||||
'ask_inventory_on_launch', 'ask_credential_on_launch')
|
'ask_skip_tags_on_launch', 'ask_job_type_on_launch',
|
||||||
|
'ask_inventory_on_launch', 'ask_credential_on_launch')
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'credential': {'write_only': True,},
|
'credential': {'write_only': True,},
|
||||||
'limit': {'write_only': True,},
|
'limit': {'write_only': True,},
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ The response will include the following fields:
|
|||||||
configured to prompt for variables upon launch (boolean, read-only)
|
configured to prompt for variables upon launch (boolean, read-only)
|
||||||
* `ask_tags_on_launch`: Flag indicating whether the job_template is
|
* `ask_tags_on_launch`: Flag indicating whether the job_template is
|
||||||
configured to prompt for tags upon launch (boolean, read-only)
|
configured to prompt for tags upon launch (boolean, read-only)
|
||||||
|
* `ask_skip_tags_on_launch`: Flag indicating whether the job_template is
|
||||||
|
configured to prompt for skip_tags upon launch (boolean, read-only)
|
||||||
* `ask_job_type_on_launch`: Flag indicating whether the job_template is
|
* `ask_job_type_on_launch`: Flag indicating whether the job_template is
|
||||||
configured to prompt for job_type upon launch (boolean, read-only)
|
configured to prompt for job_type upon launch (boolean, read-only)
|
||||||
* `ask_limit_on_launch`: Flag indicating whether the job_template is
|
* `ask_limit_on_launch`: Flag indicating whether the job_template is
|
||||||
|
|||||||
@@ -981,8 +981,8 @@ class JobTemplateAccess(BaseAccess):
|
|||||||
field_whitelist = [
|
field_whitelist = [
|
||||||
'name', 'description', 'forks', 'limit', 'verbosity', 'extra_vars',
|
'name', 'description', 'forks', 'limit', 'verbosity', 'extra_vars',
|
||||||
'job_tags', 'force_handlers', 'skip_tags', 'ask_variables_on_launch',
|
'job_tags', 'force_handlers', 'skip_tags', 'ask_variables_on_launch',
|
||||||
'ask_tags_on_launch', 'ask_job_type_on_launch', 'ask_inventory_on_launch',
|
'ask_tags_on_launch', 'ask_job_type_on_launch', 'ask_skip_tags_on_launch',
|
||||||
'ask_credential_on_launch', 'survey_enabled',
|
'ask_inventory_on_launch', 'ask_credential_on_launch', 'survey_enabled',
|
||||||
|
|
||||||
# These fields are ignored, but it is convenient for QA to allow clients to post them
|
# These fields are ignored, but it is convenient for QA to allow clients to post them
|
||||||
'last_job_run', 'created', 'modified',
|
'last_job_run', 'created', 'modified',
|
||||||
|
|||||||
20
awx/main/migrations/0029_v302_add_ask_skip_tags.py
Normal file
20
awx/main/migrations/0029_v302_add_ask_skip_tags.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import awx.main.fields
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('main', '0028_v300_org_team_cascade'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='jobtemplate',
|
||||||
|
name='ask_skip_tags_on_launch',
|
||||||
|
field=models.BooleanField(default=False),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -199,6 +199,10 @@ class JobTemplate(UnifiedJobTemplate, JobOptions, ResourceMixin):
|
|||||||
blank=True,
|
blank=True,
|
||||||
default=False,
|
default=False,
|
||||||
)
|
)
|
||||||
|
ask_skip_tags_on_launch = models.BooleanField(
|
||||||
|
blank=True,
|
||||||
|
default=False,
|
||||||
|
)
|
||||||
ask_job_type_on_launch = models.BooleanField(
|
ask_job_type_on_launch = models.BooleanField(
|
||||||
blank=True,
|
blank=True,
|
||||||
default=False,
|
default=False,
|
||||||
@@ -418,7 +422,7 @@ class JobTemplate(UnifiedJobTemplate, JobOptions, ResourceMixin):
|
|||||||
extra_vars=self.ask_variables_on_launch,
|
extra_vars=self.ask_variables_on_launch,
|
||||||
limit=self.ask_limit_on_launch,
|
limit=self.ask_limit_on_launch,
|
||||||
job_tags=self.ask_tags_on_launch,
|
job_tags=self.ask_tags_on_launch,
|
||||||
skip_tags=self.ask_tags_on_launch,
|
skip_tags=self.ask_skip_tags_on_launch,
|
||||||
job_type=self.ask_job_type_on_launch,
|
job_type=self.ask_job_type_on_launch,
|
||||||
inventory=self.ask_inventory_on_launch,
|
inventory=self.ask_inventory_on_launch,
|
||||||
credential=self.ask_credential_on_launch
|
credential=self.ask_credential_on_launch
|
||||||
@@ -550,6 +554,12 @@ class Job(UnifiedJob, JobOptions):
|
|||||||
return self.job_template.ask_tags_on_launch
|
return self.job_template.ask_tags_on_launch
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ask_skip_tags_on_launch(self):
|
||||||
|
if self.job_template is not None:
|
||||||
|
return self.job_template.ask_skip_tags_on_launch
|
||||||
|
return False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def ask_job_type_on_launch(self):
|
def ask_job_type_on_launch(self):
|
||||||
if self.job_template is not None:
|
if self.job_template is not None:
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ def job_template_prompts(project, inventory, machine_credential):
|
|||||||
name='deploy-job-template',
|
name='deploy-job-template',
|
||||||
ask_variables_on_launch=on_off,
|
ask_variables_on_launch=on_off,
|
||||||
ask_tags_on_launch=on_off,
|
ask_tags_on_launch=on_off,
|
||||||
|
ask_skip_tags_on_launch=on_off,
|
||||||
ask_job_type_on_launch=on_off,
|
ask_job_type_on_launch=on_off,
|
||||||
ask_inventory_on_launch=on_off,
|
ask_inventory_on_launch=on_off,
|
||||||
ask_limit_on_launch=on_off,
|
ask_limit_on_launch=on_off,
|
||||||
@@ -54,6 +55,7 @@ def job_template_prompts_null(project):
|
|||||||
name='deploy-job-template',
|
name='deploy-job-template',
|
||||||
ask_variables_on_launch=True,
|
ask_variables_on_launch=True,
|
||||||
ask_tags_on_launch=True,
|
ask_tags_on_launch=True,
|
||||||
|
ask_skip_tags_on_launch=True,
|
||||||
ask_job_type_on_launch=True,
|
ask_job_type_on_launch=True,
|
||||||
ask_inventory_on_launch=True,
|
ask_inventory_on_launch=True,
|
||||||
ask_limit_on_launch=True,
|
ask_limit_on_launch=True,
|
||||||
|
|||||||
@@ -103,9 +103,10 @@ def test_edit_nonsenstive(patch, job_template_factory, alice):
|
|||||||
'extra_vars': '--',
|
'extra_vars': '--',
|
||||||
'job_tags': 'sometags',
|
'job_tags': 'sometags',
|
||||||
'force_handlers': True,
|
'force_handlers': True,
|
||||||
'skip_tags': True,
|
'skip_tags': 'thistag,thattag',
|
||||||
'ask_variables_on_launch':True,
|
'ask_variables_on_launch':True,
|
||||||
'ask_tags_on_launch':True,
|
'ask_tags_on_launch':True,
|
||||||
|
'ask_skip_tags_on_launch':True,
|
||||||
'ask_job_type_on_launch':True,
|
'ask_job_type_on_launch':True,
|
||||||
'ask_inventory_on_launch':True,
|
'ask_inventory_on_launch':True,
|
||||||
'ask_credential_on_launch': True,
|
'ask_credential_on_launch': True,
|
||||||
|
|||||||
@@ -240,6 +240,28 @@ export default
|
|||||||
text: 'Prompt on launch'
|
text: 'Prompt on launch'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
skip_tags: {
|
||||||
|
label: 'Skip Tags',
|
||||||
|
type: 'textarea',
|
||||||
|
rows: 5,
|
||||||
|
addRequired: false,
|
||||||
|
editRequired: false,
|
||||||
|
'elementClass': 'Form-textInput',
|
||||||
|
column: 2,
|
||||||
|
awPopOver: "<p>Provide a comma separated list of tags.</p>\n" +
|
||||||
|
"<p>Tags are useful when you have a large playbook, and you want to run a specific part of a play or task.</p>" +
|
||||||
|
"<p>For example, you might have a task consisting of a long list of actions. Tag values can be assigned to each action. " +
|
||||||
|
"Suppose the actions have been assigned tag values of "configuration", "packages" and "install".</p>" +
|
||||||
|
"<p>If you just want to run the "configuration" and "packages" actions, you would enter the following here " +
|
||||||
|
"in the Job Tags field:</p>\n<blockquote>configuration,packages</blockquote>\n",
|
||||||
|
dataTitle: "Skip Tags",
|
||||||
|
dataPlacement: "right",
|
||||||
|
dataContainer: "body",
|
||||||
|
subCheckbox: {
|
||||||
|
variable: 'ask_skip_tags_on_launch',
|
||||||
|
text: 'Prompt on launch'
|
||||||
|
}
|
||||||
|
},
|
||||||
checkbox_group: {
|
checkbox_group: {
|
||||||
label: 'Options',
|
label: 'Options',
|
||||||
type: 'checkbox_group',
|
type: 'checkbox_group',
|
||||||
|
|||||||
@@ -132,6 +132,9 @@ angular.module('JobTemplatesHelper', ['Utilities'])
|
|||||||
scope.ask_tags_on_launch = (data.ask_tags_on_launch) ? true : false;
|
scope.ask_tags_on_launch = (data.ask_tags_on_launch) ? true : false;
|
||||||
master.ask_tags_on_launch = scope.ask_tags_on_launch;
|
master.ask_tags_on_launch = scope.ask_tags_on_launch;
|
||||||
|
|
||||||
|
scope.ask_skip_tags_on_launch = (data.ask_skip_tags_on_launch) ? true : false;
|
||||||
|
master.ask_skip_tags_on_launch = scope.ask_skip_tags_on_launch;
|
||||||
|
|
||||||
scope.ask_job_type_on_launch = (data.ask_job_type_on_launch) ? true : false;
|
scope.ask_job_type_on_launch = (data.ask_job_type_on_launch) ? true : false;
|
||||||
master.ask_job_type_on_launch = scope.ask_job_type_on_launch;
|
master.ask_job_type_on_launch = scope.ask_job_type_on_launch;
|
||||||
|
|
||||||
|
|||||||
@@ -154,6 +154,11 @@
|
|||||||
<div class="JobDetail-resultRowText">{{ job.job_tags }}</div>
|
<div class="JobDetail-resultRowText">{{ job.job_tags }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group JobDetail-resultRow toggle-show" ng-show="job.skip_tags">
|
||||||
|
<label class="JobDetail-resultRowLabel col-lg-2 col-md-2 col-sm-2 col-xs-3 control-label">Skip Tags</label>
|
||||||
|
<div class="JobDetail-resultRowText">{{ job.skip_tags }}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-group JobDetail-resultRow JobDetail-resultRow--variables toggle-show" ng-show="variables">
|
<div class="form-group JobDetail-resultRow JobDetail-resultRow--variables toggle-show" ng-show="variables">
|
||||||
<label class="JobDetail-resultRowLabel JobDetail-extraVarsLabel col-lg-2 col-md-2 col-sm-2 col-xs-3 control-label">Extra Variables</label>
|
<label class="JobDetail-resultRowLabel JobDetail-extraVarsLabel col-lg-2 col-md-2 col-sm-2 col-xs-3 control-label">Extra Variables</label>
|
||||||
<textarea rows="6" ng-model="variables" name="variables" class="JobDetail-extraVars" id="pre-formatted-variables"></textarea>
|
<textarea rows="6" ng-model="variables" name="variables" class="JobDetail-extraVars" id="pre-formatted-variables"></textarea>
|
||||||
|
|||||||
@@ -46,6 +46,10 @@ export default
|
|||||||
job_launch_data.job_tags = scope.other_prompt_data.job_tags;
|
job_launch_data.job_tags = scope.other_prompt_data.job_tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(scope.ask_skip_tags_on_launch && scope.other_prompt_data && scope.other_prompt_data.skip_tags){
|
||||||
|
job_launch_data.skip_tags = scope.other_prompt_data.skip_tags;
|
||||||
|
}
|
||||||
|
|
||||||
if(scope.ask_limit_on_launch && scope.other_prompt_data && scope.other_prompt_data.limit){
|
if(scope.ask_limit_on_launch && scope.other_prompt_data && scope.other_prompt_data.limit){
|
||||||
job_launch_data.limit = scope.other_prompt_data.limit;
|
job_launch_data.limit = scope.other_prompt_data.limit;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ export default
|
|||||||
|
|
||||||
// General catch-all for "other prompts" - used in this link function and to hide the Other Prompts tab when
|
// General catch-all for "other prompts" - used in this link function and to hide the Other Prompts tab when
|
||||||
// it should be hidden
|
// it should be hidden
|
||||||
$scope.has_other_prompts = (data.ask_job_type_on_launch || data.ask_limit_on_launch || data.ask_tags_on_launch || data.ask_variables_on_launch) ? true : false;
|
$scope.has_other_prompts = (data.ask_job_type_on_launch || data.ask_limit_on_launch || data.ask_tags_on_launch || data.ask_skip_tags_on_launch || data.ask_variables_on_launch) ? true : false;
|
||||||
$scope.password_needed = data.passwords_needed_to_start && data.passwords_needed_to_start.length > 0;
|
$scope.password_needed = data.passwords_needed_to_start && data.passwords_needed_to_start.length > 0;
|
||||||
$scope.has_default_inventory = data.defaults && data.defaults.inventory && data.defaults.inventory.id;
|
$scope.has_default_inventory = data.defaults && data.defaults.inventory && data.defaults.inventory.id;
|
||||||
$scope.has_default_credential = data.defaults && data.defaults.credential && data.defaults.credential.id;
|
$scope.has_default_credential = data.defaults && data.defaults.credential && data.defaults.credential.id;
|
||||||
@@ -172,6 +172,10 @@ export default
|
|||||||
$scope.other_prompt_data.job_tags = (data.defaults && data.defaults.job_tags) ? data.defaults.job_tags : "";
|
$scope.other_prompt_data.job_tags = (data.defaults && data.defaults.job_tags) ? data.defaults.job_tags : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($scope.ask_skip_tags_on_launch) {
|
||||||
|
$scope.other_prompt_data.skip_tags = (data.defaults && data.defaults.skip_tags) ? data.defaults.skip_tags : "";
|
||||||
|
}
|
||||||
|
|
||||||
if($scope.ask_variables_on_launch) {
|
if($scope.ask_variables_on_launch) {
|
||||||
$scope.jobLaunchVariables = (data.defaults && data.defaults.extra_vars) ? data.defaults.extra_vars : "---";
|
$scope.jobLaunchVariables = (data.defaults && data.defaults.extra_vars) ? data.defaults.extra_vars : "---";
|
||||||
$scope.other_prompt_data.parseType = 'yaml';
|
$scope.other_prompt_data.parseType = 'yaml';
|
||||||
|
|||||||
@@ -148,7 +148,15 @@
|
|||||||
<span class="Form-inputLabel">Job Tags</span>
|
<span class="Form-inputLabel">Job Tags</span>
|
||||||
</label>
|
</label>
|
||||||
<div>
|
<div>
|
||||||
<textarea rows="1" ng-model="other_prompt_data.job_tags" name="tags" class="form-control Form-textArea Form-textInput"></textarea>
|
<textarea rows="5" ng-model="other_prompt_data.job_tags" name="tags" class="form-control Form-textArea Form-textInput"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group Form-formGroup Form-formGroup--singleColumn" ng-if="ask_skip_tags_on_launch">
|
||||||
|
<label for="skip_tags">
|
||||||
|
<span class="Form-inputLabel">Skip Tags</span>
|
||||||
|
</label>
|
||||||
|
<div>
|
||||||
|
<textarea rows="5" ng-model="other_prompt_data.skip_tags" name="skip_tags" class="form-control Form-textArea Form-textInput"></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -518,6 +518,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
data.ask_tags_on_launch = $scope.ask_tags_on_launch ? $scope.ask_tags_on_launch : false;
|
data.ask_tags_on_launch = $scope.ask_tags_on_launch ? $scope.ask_tags_on_launch : false;
|
||||||
|
data.ask_skip_tags_on_launch = $scope.ask_skip_tags_on_launch ? $scope.ask_skip_tags_on_launch : false;
|
||||||
data.ask_limit_on_launch = $scope.ask_limit_on_launch ? $scope.ask_limit_on_launch : false;
|
data.ask_limit_on_launch = $scope.ask_limit_on_launch ? $scope.ask_limit_on_launch : false;
|
||||||
data.ask_job_type_on_launch = $scope.ask_job_type_on_launch ? $scope.ask_job_type_on_launch : false;
|
data.ask_job_type_on_launch = $scope.ask_job_type_on_launch ? $scope.ask_job_type_on_launch : false;
|
||||||
data.ask_inventory_on_launch = $scope.ask_inventory_on_launch ? $scope.ask_inventory_on_launch : false;
|
data.ask_inventory_on_launch = $scope.ask_inventory_on_launch ? $scope.ask_inventory_on_launch : false;
|
||||||
|
|||||||
@@ -640,6 +640,7 @@ export default
|
|||||||
}
|
}
|
||||||
|
|
||||||
data.ask_tags_on_launch = $scope.ask_tags_on_launch ? $scope.ask_tags_on_launch : false;
|
data.ask_tags_on_launch = $scope.ask_tags_on_launch ? $scope.ask_tags_on_launch : false;
|
||||||
|
data.ask_skip_tags_on_launch = $scope.ask_skip_tags_on_launch ? $scope.ask_skip_tags_on_launch : false;
|
||||||
data.ask_limit_on_launch = $scope.ask_limit_on_launch ? $scope.ask_limit_on_launch : false;
|
data.ask_limit_on_launch = $scope.ask_limit_on_launch ? $scope.ask_limit_on_launch : false;
|
||||||
data.ask_job_type_on_launch = $scope.ask_job_type_on_launch ? $scope.ask_job_type_on_launch : false;
|
data.ask_job_type_on_launch = $scope.ask_job_type_on_launch ? $scope.ask_job_type_on_launch : false;
|
||||||
data.ask_inventory_on_launch = $scope.ask_inventory_on_launch ? $scope.ask_inventory_on_launch : false;
|
data.ask_inventory_on_launch = $scope.ask_inventory_on_launch ? $scope.ask_inventory_on_launch : false;
|
||||||
|
|||||||
Reference in New Issue
Block a user