File: /var/www/vhost/disk-apps/demo.sports-crowd.com/resources/views/academy/tournaments/form.blade.php
@csrf
<style>
.icon-rtl {
padding-right: 25px;
background: url("https://img.icons8.com/metro/512/percentage2--v1.png") no-repeat right;
background-size: 20px;
}
</style>
<div class="card-body">
<input type="hidden" class="form-control" id="id" name="id" required value="{{ $object->id ?? old('id') }}">
<div class="row">
<div class="form-group col-md-8">
<label for="name">{{ Lang::get('messages.academy_tournaments.tag1') }} </label>
<input type="text" class="form-control" maxlength="100" name="name" required value="{{ $object->name ?? old('name') }}">
</div>
<div class="form-group col-md-4">
<label for="price">{{ Lang::get('messages.academy_tournaments.tag2') }}</label>
<input type="number" class="form-control" min="0" maxlength="45" name="price" required value="{{ $object->price ?? old('price') }}">
</div>
</div>
<div class="row">
<div class="form-group col-md-4">
<label for="payday_limit" class="ul-form__label">{{ Lang::get('messages.academy_tournaments.tag4') }}</label>
<input type="datetime-local" class="form-control" name="payday_limit" placeholder="" value="{{ isset($object) ? str_replace(' ', 'T', $object->payday_limit) : old('payday_limit') }}" required>
</div>
<div class="form-group col-md-4">
<label for="start_date" class="ul-form__label">{{ Lang::get('messages.academy_tournaments.tag5') }}</label>
<input type="datetime-local" class="form-control" name="start_date" placeholder="" value="{{ isset($object) ? str_replace(' ', 'T', $object->start_date) : old('start_date') }}" required>
</div>
<div class="form-group col-md-4">
<label for="end_date" class="ul-form__label">{{ Lang::get('messages.academy_tournaments.tag6') }}</label>
<input type="datetime-local" class="form-control" name="end_date" placeholder="" value="{{ isset($object) ? str_replace(' ', 'T', $object->end_date) : old('end_date') }}" required>
</div>
</div>
<div class="row">
<div class="form-group col-md-4">
<label for="locations">{{ Lang::get('messages.academy_tournaments.locations') }}</label>
@if(!$enableFranchises)
<i class="fa fa-question-circle-o text-black" style="cursor: pointer;" data-toggle="tooltip" data-placement="top" title="{{ __('messages.academy_tournaments.locations_help_message') }}"></i>
{{ Lang::get('messages.optional') }}
@endif
<select class="form-control select2" multiple="multiple" data-placeholder="{{ Lang::get('messages.screen_products_tag32') }}" name="locations">
<option value="0">TODAS</option>
@foreach ($locations as $location)
<option value="{{ $location->id }}">
{{ $location->name }}
</option>
@endforeach
</select>
</div>
<div class="form-group col-md-4">
<label for="categories">{{ Lang::get('messages.academy_tournaments.categories') }}</label>
@if(!$enableFranchises)
<i class="fa fa-question-circle-o text-black" style="cursor: pointer;" data-toggle="tooltip" data-placement="top" title="{{ __('messages.academy_tournaments.categories_help_message') }}"></i>
{{ Lang::get('messages.optional') }}
@endif
<select class="form-control select2" multiple="multiple" data-placeholder="{{ Lang::get('messages.screen_products_tag32') }}" name="categories">
<option value="0">TODAS</option>
@foreach ($categories as $category)
<option value="{{ $category->id }}" data-location-id="{{ $category->academy_location_id }}" @if (!$category->academy_location) disabled @endif>
{{ $category->name }}
@if ($category->academy_location)
({{ config('app.location') }} {{ $category->academy_location->name }})
@else
(sin {{ config('app.location') }} disponible)
@endif
</option>
@endforeach
</select>
</div>
<div class="form-group col-md-4">
<label for="schedules">{{ Lang::get('messages.academy_tournaments.schedules') }}</label>
@if(!$enableFranchises)
<i class="fa fa-question-circle-o text-black" style="cursor: pointer;" data-toggle="tooltip" data-placement="top" title="{{ __('messages.academy_tournaments.schedules_help_message') }}"></i>
{{ Lang::get('messages.optional') }}
@endif
<select class="form-control select2" multiple="multiple" data-placeholder="{{ Lang::get('messages.screen_products_tag32') }}" name="schedules">
<option value="0">TODOS</option>
@foreach ($schedules as $schedule)
<option value="{{ $schedule->id }}" data-categories='@json($schedule->categories)' {{ isset($academyTournamentSchedules) && in_array($schedule->id, $academyTournamentSchedules) ? 'selected' : '' }}>
{{ $schedule->name }}
</option>
@endforeach
</select>
</div>
</div>
<div class="row">
<div class="form-group col-md-4">
<label for="description">{{ Lang::get('messages.academy_tournaments.tag9') }}
{{ Lang::get('messages.optional') }}</label>
<textarea type="text" class="form-control" rows="4" name="description">{{ $object->description ?? old('description') }}</textarea>
</div>
<div class="form-group col-md-4">
<label for="type">{{ Lang::get('messages.academy_tournaments.type') }}
{{ Lang::get('messages.optional') }}</label>
<select class="form-control" data-placeholder="{{ Lang::get('messages.screen_products_tag32') }}" name="type">
@foreach ($types as $type)
<option value="{{ $type }}" {{ isset($object) && $object->type == $type ? 'selected' : '' }}>
{{ $type }}
</option>
@endforeach
</select>
</div>
<div class="form-group col-md-4">
<label for="discount">{{ Lang::get('messages.academy_tournaments.tag3') }}
{{ Lang::get('messages.optional') }}</label>
<input type="number" class="form-control icon-rtl" min="0" max="100" step="0.01" name="discount" value="{{ $object->discount ?? old('discount') }}">
</div>
</div>
<div class="row">
<div class="form-group col-md-8">
<label for="tags">{{ Lang::get('messages.academy_tournaments.segmentation') }}
{{ Lang::get('messages.optional') }}</label>
@include('layouts.multiselect')
</div>
<div class="form-group col-md-4">
<label for="image">{{ Lang::get('messages.academy_tournaments.tag10') }}
{{ Lang::get('messages.optional') }}</label>
<input type="file" id="image" name="image">
</div>
</div>
<div class="box collapsed-box">
<div class="box-header with-border">
<h3 class="box-title">{{ Lang::get('messages.academy_tournaments.payment_installments') }}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-plus"></i>
</button>
</div>
</div>
<div class="box-body">
<div class="row">
<div class="form-group col-md-4">
<label for="payment_installments">{{ Lang::get('messages.academy_tournaments.fees') }}, (max. 12)
{{ Lang::get('messages.optional') }}</label>
<input type="number" class="form-control" min="0" max="12" step="1" id="payment_installments" name="payment_installments" value="{{ $object->payment_installments ?? old('payment_installments') }}">
</div>
<div class="form-group col-md-4">
<label for="">{{ Lang::get('messages.academy_tournaments.enable_price_payment_installments') }}</label>
@if (isset($object) && $object->enable_price_payment_installments)
<div class="checkbox checbox-switch switch-success">
<label> No
<input type="checkbox" class="form-control" id="enable_price_payment_installments" name="enable_price_payment_installments" checked="" value="1" disabled />
<span></span>
Si
</label>
</div>
@else
<div class="checkbox checbox-switch switch-success">
<label> No
<input type="checkbox" class="form-control" id="enable_price_payment_installments" name="enable_price_payment_installments" value="0" disabled />
<span></span>
Si
</label>
</div>
@endif
</div>
<div class="form-group col-md-4">
<label for="">{{ Lang::get('messages.academy_tournaments.enable_percentage_payment_installments') }}</label>
@if (isset($object) && $object->enable_percentage_payment_installments)
<div class="checkbox checbox-switch switch-success">
<label> No
<input type="checkbox" class="form-control" id="enable_percentage_payment_installments" name="enable_percentage_payment_installments" checked="" value="1" disabled />
<span></span>
Si
</label>
</div>
@else
<div class="checkbox checbox-switch switch-success">
<label> No
<input type="checkbox" class="form-control" id="enable_percentage_payment_installments" name="enable_percentage_payment_installments" value="0" disabled />
<span></span>
Si
</label>
</div>
@endif
</div>
</div>
<div class="row payment-installments-items">
</div>
</div>
</div>
@if ($syncERP)
<!-- PARAMETROS ERP -->
<div class="box collapsed-box">
<div class="box-header with-border">
<h3 class="box-title">{{ Lang::get('messages.erp_config') }}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-plus"></i>
</button>
</div>
</div>
<div class="box-body">
<div class="row">
<div class="col-6 col-md-6">
<div class="form-group">
<label for="registration_service_item_code">{{ Lang::get('messages.academy_tournaments.registration_service_item_code') }}
</label>
<input type="text" class="form-control" maxlength="20" name="registration_service_item_code" onkeypress='validate(event)' value="{{ $object->academy_tournament_erp->registration_service_item_code ?? old('registration_service_item_code') }}">
</div>
</div>
<div class="col-6 col-md-6">
<div class="form-group">
<label for="cost_center">{{ Lang::get('messages.academy_tournaments.cost_center') }}
</label>
<input type="text" class="form-control" maxlength="20" name="cost_center" onkeypress='validate(event)' value="{{ $object->academy_tournament_erp->cost_center ?? old('cost_center') }}">
</div>
</div>
</div>
</div>
</div>
@endif
<input name="type_academy" value="{{ $type_academy ?? $object->type_academy }}" hidden>
<input name="academy_tournament_fees" value="{{ $object->academy_tournament_fees ?? old('academy_tournament_fees') }}" hidden>
</div>
<br>
<script src="{{ asset('js/jQuery/jquery-2.2.3.min.js') }}"></script>
<script src="{{ asset('js/crud.js') . '?v=' . time() }}"></script>
<script src="{{ asset('js/academy_tournaments.js') . '?v=' . time() }}"></script>
<script src="{{ asset('js/bootstrap/js/bootstrap.min.js') }}"></script>
<script>
var categoriesData = @json($categories);
var schedulesData = @json($schedules);
</script>
@php
$locations = $locations ?? [];
$academyTournamentLocations = $academyTournamentLocations ?? [];
$categories = $categories ?? [];
$academyTournamentCategories = $academyTournamentCategories ?? [];
$schedules = $schedules ?? [];
$academyTournamentSchedules = $academyTournamentSchedules ?? [];
@endphp
<script>
$(document).ready(function() {
$('[data-toggle="tooltip"]').tooltip();
$('.select2').select2();
$("input[name='payment_installments']").on('change', function(event) {
createInputFees(this.value, null);
});
let paymentInstallments = $("input[name='payment_installments']")[0].value;
let fees = $("input[name='academy_tournament_fees']")[0].value;
if (fees) {
fees = JSON.parse(fees);
}
createInputFees(paymentInstallments, fees);
// Deshabilitar selects inicialmente
var optionAll = '0';
var locations = @json($locations);
var categories = @json($categories);
var schedules = @json($schedules);
var academyTournamentLocations = @json($academyTournamentLocations);
var academyTournamentCategories = @json($academyTournamentCategories);
var academyTournamentSchedules = @json($academyTournamentSchedules);
var locationsSelect = $('select[name="locations"]');
var categoriesSelect = $('select[name="categories"]');
var schedulesSelect = $('select[name="schedules"]');
var oldCategories = [];
var oldSchedules = [];
categoriesSelect.prop('disabled', academyTournamentCategories.length === 0);
$('select[name="schedules"]').prop('disabled', true);
// Manejar cambio en Locations
$('select[name="locations"]').on('change', function(event, value) {
var selectedLocations = $(this).val() || [];
categoriesSelect.prop('disabled', selectedLocations.length === 0).empty();
if (selectedLocations.length > 0) {
if (selectedLocations.includes(optionAll)) {
locationsSelect.empty();
locationsSelect.append(new Option('TODAS', optionAll, true, true));
}
$.each(categoriesData, function(index, category) {
if (index === 0) {
categoriesSelect.append(new Option('TODAS', optionAll));
}
if (selectedLocations.includes(optionAll) || selectedLocations.includes(category.academy_location_id.toString())) {
if (academyTournamentCategories && academyTournamentCategories.includes(category.id)) {
categoriesSelect.append(new Option(category.name, category.id, true, true));
} else {
categoriesSelect.append(new Option(category.name, category.id));
}
}
});
} else {
locationsSelect.empty();
$.each(locations, function(index, location) {
if (index === 0) {
locationsSelect.append(new Option('TODAS', optionAll));
}
locationsSelect.append(new Option(location.name, location.id));
})
}
categoriesSelect.trigger('change');
});
let isChangingManuallyCategories = false;
// Manejar cambio en Categories
$('select[name="categories"]').on('change', function(event) {
if (isChangingManuallyCategories) return;
var selectedCategories = $(this).val() || [];
var selectedLocations = locationsSelect.val() || [];
schedulesSelect.prop('disabled', selectedCategories.length === 0).empty();
if (selectedCategories.length > 0) {
oldCategories.push(selectedCategories);
if (selectedCategories.includes(optionAll)) {
categoriesSelect.empty();
categoriesSelect.append(new Option('TODAS', optionAll, true, true));
}
$.each(schedulesData, function(index, schedule) {
if (index === 0) {
schedulesSelect.append(new Option('TODOS', optionAll));
}
if (selectedCategories.includes(optionAll) || selectedCategories.some(cat => schedule.categories.includes(parseInt(cat)))) {
schedulesSelect.append(new Option(schedule.name, schedule.id));
}
});
} else if (oldCategories.length > 0) {
oldCategories = [];
categoriesSelect.empty();
selectedLocations = locationsSelect.val() || [];
$.each(categories, function(index, category) {
if (index === 0) {
categoriesSelect.append(new Option('TODAS', optionAll));
}
if (selectedLocations.includes(optionAll) || selectedLocations.includes(category.academy_location_id.toString())) {
if (academyTournamentCategories && academyTournamentCategories.includes(category.id + '')) {
categoriesSelect.append(new Option(category.name, category.id, true, true));
} else {
categoriesSelect.append(new Option(category.name, category.id));
}
}
})
} else if (selectedLocations.length > 0) {
isChangingManually = true;
categoriesSelect.empty();
$.each(categories, function(index, category) {
if (index === 0) {
categoriesSelect.append(new Option('TODAS', optionAll));
}
if (selectedLocations.includes(optionAll) || selectedLocations.includes(category.academy_location_id.toString())) {
if (academyTournamentCategories && academyTournamentCategories.includes(category.id + '')) {
categoriesSelect.append(new Option(category.name, category.id, true, true));
} else {
categoriesSelect.append(new Option(category.name, category.id));
}
}
});
isChangingManually = false;
}
schedulesSelect.trigger('change');
});
let isChangingManually = false;
$('select[name="schedules"]').on('change', function(event) {
if (isChangingManually) return;
const selectedSchedules = $(this).val() || [];
selectedCategories = categoriesSelect.val() || [];
if (selectedSchedules.length > 0) {
oldSchedules.push(selectedSchedules);
if (selectedSchedules.includes(optionAll)) {
isChangingManually = true;
schedulesSelect.empty();
schedulesSelect.append(new Option('TODOS', optionAll, true, true));
isChangingManually = false;
}
} else if (oldSchedules.length > 0) {
oldSchedules = [];
isChangingManually = true;
schedulesSelect.empty();
$.each(schedules, function(index, schedule) {
if (index === 0) {
schedulesSelect.append(new Option('TODOS', optionAll));
}
const matchCategory = selectedCategories.includes(optionAll) ||
selectedCategories.some(cat => schedule.categories.includes(parseInt(cat)));
if (matchCategory) {
if (academyTournamentSchedules && academyTournamentSchedules.includes(schedule.id + '')) {
schedulesSelect.append(new Option(schedule.name, schedule.id));
} else {
schedulesSelect.append(new Option(schedule.name, schedule.id));
}
}
});
isChangingManually = false;
} else if (selectedCategories.length > 0) {
isChangingManually = true;
schedulesSelect.empty();
$.each(schedules, function(index, schedule) {
if (index === 0) {
if (selectedCategories.length === 1 || (academyTournamentSchedules.length === 0 || (academyTournamentSchedules.length === 1 && !academyTournamentSchedules[0]))) {
$('select[name="schedules"]').prop('disabled', false);
schedulesSelect.append(new Option('TODOS', optionAll));
} else {
schedulesSelect.append(new Option('TODOS', optionAll));
}
}
const matchCategory = selectedCategories.includes(optionAll) ||
selectedCategories.some(cat => schedule.categories.includes(parseInt(cat)));
if (matchCategory) {
if (academyTournamentSchedules && academyTournamentSchedules.includes(schedule.id + '')) {
schedulesSelect.append(new Option(schedule.name, schedule.id, true, true));
} else {
schedulesSelect.append(new Option(schedule.name, schedule.id));
}
}
});
isChangingManually = false;
}
});
if (academyTournamentLocations.length > 0) {
$('select[name="locations"]').val(academyTournamentLocations).trigger('change');
}
if (academyTournamentCategories.length > 0) {
$('select[name="categories"]').val(academyTournamentCategories).trigger('change');
}
if (window.appData) {
let stepValue = '1';
if (window.appData.maximumFractionDigits) {
stepValue = '0.' + '0'.repeat(window.appData.maximumFractionDigits - 1) + '1';
}
$("#input[name='price']").attr('step', stepValue);
}
});
function includesAll(arr1, arr2) {
return arr2.every(el => arr1.includes(el));
}
function createInputFees(paymentInstallments, fees) {
paymentInstallments = parseInt(paymentInstallments);
if (paymentInstallments) {
$("input[name='enable_price_payment_installments']").prop('disabled', false);
$("input[name='enable_percentage_payment_installments']").prop('disabled', false);
$('.payment-installments-items > div').remove();
if (fees) {
// Se generan campos dinamicos
fees.forEach(function(fee) {
var formgroup = $("<div/>", {
class: "form-group col-md-4"
});
formgroup.append($("<label>", {
text: "Cuota " + fee.fee,
for: 'fees'
}));
formgroup.append($("<input/>", {
type: "number",
class: "form-control",
min: 0,
require: true,
name: 'fees',
value: fee.price_discount != '0' ? fee.price_discount : fee.discount
}));
$(".payment-installments-items").append(formgroup);
});
} else {
// Se generan campos dinamicos
for (var i = 0; i < paymentInstallments; i++) {
var formgroup = $("<div/>", {
class: "form-group col-md-4"
});
formgroup.append($("<label>", {
text: "Cuota " + (i + 1),
for: 'fees'
}));
formgroup.append($("<input/>", {
type: "number",
class: "form-control",
min: 0,
require: true,
name: 'fees'
}));
$(".payment-installments-items").append(formgroup);
}
}
} else {
$("input[name='enable_price_payment_installments']").prop('disabled', true);
$("input[name='enable_percentage_payment_installments']").prop('disabled', true);
$('.payment-installments-items > div').remove();
}
}
function validate(evt) {
var theEvent = evt || window.event;
// Handle paste
if (theEvent.type === 'paste') {
key = event.clipboardData.getData('text/plain');
} else {
// Handle key press
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
}
var regex = /[0-9]|\./;
if (!regex.test(key)) {
theEvent.returnValue = false;
if (theEvent.preventDefault) theEvent.preventDefault();
}
}
</script>