HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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>