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/alq-cali.bikenow.co/public/js/users.js
hide = true;
$(document).on("ready", function () {
    $("#btn-menu-usuario").on("click", function (event) {
        if (hide) {
            $("#menuUsuario").show();
            hide = false;
        } else {
            $("#menuUsuario").hide();
            hide = true;
        }
    });

    $("input[name='phone']").on("keyup", function () {
        this.value = (this.value + "").replace(/[^0-9]/g, "");
    });

    $("input[name=email]").on("keyup", function () {
        if ($("#email").val()) {
            var regex = /[\w-\.]{2,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/;
            if (regex.test($("#email").val().trim())) {
                $(this).css("border", "1px solid green");
                document.getElementById("btn-create-user").disabled = false;
            } else {
                $(this).css("border", "1px solid red");
                document.getElementById("btn-create-user").disabled = true;
            }
        }
    });
});
$(document).on("click", function (event) {
    var btn = $("#btn-menu-usuario");
    var div = $("#menuUsuario");
    if (!btn.is(event.target) && !btn.has(event.target).length) {
        div.hide();
        hide = true;
    }
});

// Crear cliente
function createClient() {
    $("#createClient").validator("update");
    $("#createClient").validator("update").on("submit", function (e) {
        if (e.isDefaultPrevented()) {
        } else {
            e.preventDefault();
            if (validatePasswords(true)) {
                var tags = $("#createClient select[name='generalMultiselect']").val();

                var info = {
                    first_name: $("#createClient input[name='first_name']").val(),
                    last_name: $("#createClient input[name='last_name']").val(),
                    phone: $("#createClient input[name='phone']").val(),
                    email: $("#createClient input[name='email']").val(),
                    document: $("#createClient input[name='document']").val(),
                    password: $("#createClient input[name='password']").val(),
                    direction: $("#createClient input[name='direction']").val(),
                    district: $("#createClient input[name='district']").val(),
                    indications: $("#createClient textarea[name='indications']").val(),
                    lat: $("#createClient input[name='direction']").attr("data-lat"),
                    long: $("#createClient input[name='direction']").attr("data-long"),
                    city_id: $("#createClient select[name='city_id']").val(),
                    tags: tags,
                    is_subscriber: $("#createClient input[name='isSubscriber']")[0].checked,
                };

                swal(Lang.get("messagesClient.user_client_tag1"), {
                    buttons: {
                        cancel: "No",
                        Ok: true,
                    },
                }).then((val) => {
                    if (val == "Ok") {
                        $.ajax({
                            url: "/clients/create",
                            type: "POST",
                            contentType: "application/json",
                            headers: {
                                "X-CSRF-TOKEN": $(
                                    'meta[name="csrf-token"]'
                                ).attr("content"),
                                "Content-Type": "application/json",
                            },
                            data: JSON.stringify(info),
                            success: function (r) {
                                if (r.r) {
                                    swal(r.m, {
                                        icon: "success",
                                        buttons: {
                                            Ok: true,
                                        },
                                    }).then((val) => {
                                        if (val == "Ok") {
                                            $(location).attr(
                                                "href",
                                                "/clients"
                                            );
                                        }
                                    });
                                } else {
                                    if (r.r == false) {
                                        swal("Error", r.m, "warning");
                                    } else {
                                        swal(
                                            "Error",
                                            Lang.get(
                                                "messagesClient.user_client_tag3"
                                            ),
                                            "error"
                                        );
                                    }
                                }
                            },
                        });
                    }
                });
            }
        }
    });
}

function createDeliveryMan() {
    $("#createDeliveryMan").validator("update");
    $("#createDeliveryMan")
        .validator("update")
        .on("submit", function (e) {
            if (e.isDefaultPrevented()) {
            } else {
                e.preventDefault();
                if (validatePasswords(true)) {
                    sucursal = $("#createDeliveryMan select[name='sucursal_id']").val();
                    company = $("#createDeliveryMan select[name='courier_company_id']").val();
                    if (sucursal == "") {
                        swal(
                            "Ok",
                            Lang.get("messagesClient.user_deliveryMan_tag1"),
                            "warning"
                        );
                    } else if (company == "") {
                        swal(
                            "Ok",
                            Lang.get("messagesClient.user_deliveryMan_tag2"),
                            "warning"
                        );
                    } else {
                        var info = {
                            first_name: $("#createDeliveryMan input[name='first_name']").val(),
                            last_name: $("#createDeliveryMan input[name='last_name']").val(),
                            phone: $("#createDeliveryMan input[name='phone']").val(),
                            email: $("#createDeliveryMan input[name='email']").val(),
                            courier_company: $("#createDeliveryMan input[name='courier_company']").val(),
                            document: $("#createDeliveryMan input[name='document']").val(),
                            plate: $("#createDeliveryMan input[name='plate']").val(),
                            password: $("#createDeliveryMan input[name='password']").val(),
                            sucursal_id: $("#createDeliveryMan select[name='sucursal_id']").val(),
                            courier_company_id: $("#createDeliveryMan select[name='courier_company_id']").val(),
                        };
                        swal(Lang.get("messagesClient.user_deliveryMan_tag3"), {
                            buttons: {
                                cancel: "No",
                                Ok: true,
                            },
                        }).then((val) => {
                            if (val == "Ok") {
                                $.ajax({
                                    url: "/deliveryMan/create",
                                    type: "POST",
                                    contentType: "application/json",
                                    headers: {
                                        "X-CSRF-TOKEN": $(
                                            'meta[name="csrf-token"]'
                                        ).attr("content"),
                                        "Content-Type": "application/json",
                                    },
                                    data: JSON.stringify(info),
                                    success: function (r) {
                                        if (r.r) {
                                            if (r.id) {
                                                idUser = r.id;
                                                swal(r.m, {
                                                    icon: "warning",
                                                    buttons: {
                                                        Ok: true,
                                                    },
                                                }).then((val) => {
                                                    if (val == "Ok") {
                                                        recoverAccount(idUser);
                                                    }
                                                });
                                            } else {
                                                var img = document.getElementById(
                                                    "photo"
                                                );
                                                if (img != null) {
                                                    saveImageUser(
                                                        r.d,
                                                        "/user/saveImage"
                                                    );
                                                } else {
                                                    swal(r.m, {
                                                        icon: "success",
                                                        buttons: {
                                                            Ok: true,
                                                        },
                                                    }).then((val) => {
                                                        if (val == "Ok") {
                                                            $(location).attr(
                                                                "href",
                                                                "/deliveryMan"
                                                            );
                                                        }
                                                    });
                                                }
                                            }
                                        } else {
                                            swal("Error", r.m, "error");
                                        }
                                    },
                                    error: function (e) {
                                        swal(
                                            "Error",
                                            Lang.get(
                                                "messagesClient.user_deliveryMan_tag4"
                                            ),
                                            "error"
                                        );
                                    },
                                });
                            }
                        });
                    }
                }
            }
        });
}

function createAdmin() {
    $("#createAdmin").validator("update");
    $("#createAdmin")
        .validator("update")
        .on("submit", function (e) {
            if (e.isDefaultPrevented()) {
            } else {
                e.preventDefault();
                if (validatePasswords(true)) {
                    var info = {
                        first_name: $("#createAdmin input[name='first_name']").val(),
                        last_name: $("#createAdmin input[name='last_name']").val(),
                        phone: $("#createAdmin input[name='phone']").val(),
                        email: $("#createAdmin input[name='email']").val(),
                        document: $("#createAdmin input[name='document']").val(),
                        rol_id: $("#createAdmin select[name='rol_id']").val(),
                        sucursal_id: $("#createAdmin select[name='sucursal_id']").val(),
                        password: $("#createAdmin input[name='password']").val(),
                        tags: $(" #createAdmin select[name='tags']").val(),
                    };
                    swal(Lang.get("messagesClient.user_admin_tag1"), {
                        buttons: {
                            cancel: "No",
                            Ok: true,
                        },
                    }).then((val) => {
                        if (val == "Ok") {
                            $.ajax({
                                url: "/admins/create",
                                type: "POST",
                                contentType: "application/json",
                                headers: {
                                    "X-CSRF-TOKEN": $(
                                        'meta[name="csrf-token"]'
                                    ).attr("content"),
                                    "Content-Type": "application/json",
                                },
                                data: JSON.stringify(info),
                                success: function (r) {
                                    if (r.r) {
                                        swal(r.m, {
                                            icon: "success",
                                            buttons: {
                                                Ok: true,
                                            },
                                        }).then((val) => {
                                            if (val == "Ok") {
                                                $(location).attr(
                                                    "href",
                                                    "/admins"
                                                );
                                            }
                                        });
                                    } else {
                                        swal("Error", r.m, "error");
                                    }
                                },
                                error: function (e) {
                                    swal(
                                        "Error",
                                        "Error al crear usuario",
                                        "error"
                                    );
                                },
                            });
                        }
                    });
                }
            }
        });
}

// MODAL INFO USUARIO
function clickInfoAdmins(value) {
    var info = {
        id: value,
    };
    $.ajax({
        url: "admins/info",
        type: "POST",
        contentType: "application/json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            "Content-Type": "application/json",
        },
        data: JSON.stringify(info),
        success: function (r) {
            $("#first_name").text(r.u.first_name);
            if (r.u.last_name != null) {
                $("#last_name").text(r.u.last_name);
            } else {
                $("#last_name").text("");
            }
            $("#document").text(r.u.document);
            $("#email").text(r.u.email);
            $("#phone").text(r.u.phone);
            $("#created_at").text(r.u.created_at);
            $("#sucursal").text(r.i.sucursal_id);

            if (r.i.active == 1) {
                $("#active").text("Si");
            } else {
                $("#active").text("No");
            }
            $("#modal-info-admin").modal();
        },
    });
}

// MODAL INFO CLIENTE
function clickInfoClient(value) {
    var info = {
        id: value,
    };
    $.ajax({
        url: "clients/info",
        type: "POST",
        contentType: "application/json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            "Content-Type": "application/json",
        },
        data: JSON.stringify(info),
        success: function (r) {
            $("#first_name").text(r.first_name);
            if (r.last_name != null) {
                $("#last_name").text(r.last_name);
            } else {
                $("#last_name").text("");
            }

            $("#document").text(r.document);
            $("#email").text(r.email);
            $("#phone").text(r.phone);
            $("#created_at").text(r.created_at);

            if (r.active == 1) {
                $("#active").text("Si");
            } else {
                $("#active").text("No");
            }
            $("#modalInfoClient").modal();
        },
    });
}

// MODAL INFO MENSAJERO
function clickInfoDeliveryMan(value) {
    var info = {
        id: value,
    };

    $.ajax({
        url: "deliveryMan/info",
        type: "POST",
        contentType: "application/json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            "Content-Type": "application/json",
        },
        data: JSON.stringify(info),
        success: function (r) {
            $("#first_name").text(r.u.first_name);
            if (r.u.last_name != null) {
                $("#last_name").text(r.u.last_name);
            } else {
                $("#last_name").text("");
            }
            $("#document").text(r.u.document);
            $("#email").text(r.u.email);
            $("#phone").text(r.u.phone);
            $("#created_at").text(r.u.created_at);

            $("#plate").text(r.i.plate);
            $("#courier_company_id").text(r.i.courier_company_id);
            $("#photo").attr("src", r.img);

            if (r.u.active == 1) {
                $("#active").text("Si");
            } else {
                $("#active").text("No");
            }
            $("#modal-info-deliveryMan").modal();
        },
    });
}

//editar cliente
function clickEditClient(value) {
    _table = $(`#${SELECTOR_PREFIX}`).DataTable();
    index = _table.page();
    localStorage.setItem("productsTableIndex", index);
    $(location).attr("href", "/clients/edit/" + value);
}

function editClient() {
    var dir = $("#editClient input[name='direction']").val();
    if (dir != "") {
        $("#editClient select[name='city_id']").attr("required", true);
    } else {
        $("#editClient select[name='city_id']").attr("required", false);
    }

    $("#editClient").validator("update");
    $("#editClient")
        .validator("update")
        .on("submit", function (e) {
            if (e.isDefaultPrevented()) {
            } else {
                e.preventDefault();
                if (validatePasswords()) {
                    var tags = $("#editClient select[name='generalMultiselect']").val();

                    var info = {
                        id: $("#btn-edit-client").attr("data-id"),
                        first_name: $("#editClient input[name='first_name']").val(),
                        phone: $("#editClient input[name='phone']").val(),
                        email: $("#editClient input[name='email']").val(),
                        direction_used: $("#editClient select[name='direction_id']").val(),
                        document: $("#editClient input[name='document']").val(),
                        last_name: $("#editClient input[name='last_name']").val(),
                        password: $("#editClient input[name='password']").val(),
                        direction: $("#editClient input[name='direction']").val(),
                        district: $("#editClient input[name='district']").val(),
                        indications: $("#editClient textarea[name='indications']").val(),
                        lat: $("#editClient input[name='direction']").attr("data-lat"),
                        long: $("#editClient input[name='direction']").attr("data-long"),
                        city_id: $("#editClient select[name='city_id']").val(),
                        tags: tags,
                        is_subscriber: $("#editClient input[name='isSubscriber']")[0].checked,
                    };

                    swal(Lang.get("messagesClient.user_client_tag5"), {
                        buttons: {
                            cancel: "No",
                            Ok: true,
                        },
                    }).then((val) => {
                        if (val == "Ok") {
                            $.ajax({
                                url: "/clients/update",
                                type: "PUT",
                                contentType: "application/json",
                                headers: {
                                    "X-CSRF-TOKEN": $(
                                        'meta[name="csrf-token"]'
                                    ).attr("content"),
                                    "Content-Type": "application/json",
                                },
                                data: JSON.stringify(info),
                                success: function (r) {
                                    if (r.r) {
                                        swal(r.m, {
                                            icon: "success",
                                            buttons: {
                                                Ok: true,
                                            },
                                        }).then((val) => {
                                            if (val == "Ok") {
                                                localStorage.setItem(
                                                    "setPageTable",
                                                    true
                                                );
                                                $(location).attr(
                                                    "href",
                                                    "/clients"
                                                );
                                            }
                                        });
                                    } else {
                                        swal("Error", r.m, "error");
                                    }
                                },
                                error: function (e) {
                                    swal(
                                        "Error",
                                        Lang.get("messagesClient.user_client_tag6"),
                                        "error"
                                    );
                                },
                            });

                        }
                    });
                }
            }
        });
}

function clickDeleteClient(value) {
    swal(Lang.get("messagesClient.user_other_tag6"), {
        buttons: {
            cancel: "No",
            Ok: true,
        },
    }).then((val) => {
        if (val == "Ok") {
            var info = {};
            $.ajax({
                url: "/clients/deleteClient/" + value,
                type: "DELETE",
                contentType: "application/json",
                headers: {
                    "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr(
                        "content"
                    ),
                    "Content-Type": "application/json",
                },
                data: JSON.stringify(info),
                success: function (r) {
                    if (r.r) {
                        swal(r.m, {
                            icon: "success",
                            buttons: {
                                Ok: true,
                            },
                        }).then((val) => {
                            if (val == "Ok") {
                                $(location).attr("href", "/clients");
                            }
                        });
                    } else {
                        swal("Error", Lang.get("messagesClient.user_other_tag2"), "error");
                    }
                },
                error: function (r) {
                    swal("Error", Lang.get("messagesClient.user_other_tag2"), "error");
                },
            });
        }
    });
}

//editar mensajero
function clickEditDeliveryMan(value) {
    _table = $(`#${SELECTOR_PREFIX}`).DataTable();
    index = _table.page();
    localStorage.setItem("productsTableIndex", index);
    $(location).attr("href", "/deliveryMan/edit/" + value);
}

function editDeliveryMan() {
    $("#editDeliveryMan").validator("update");
    $("#editDeliveryMan")
        .validator("update")
        .on("submit", function (e) {
            if (e.isDefaultPrevented()) {
            } else {
                e.preventDefault();
                if (validatePasswords()) {
                    sucursal = $("#editDeliveryMan select[name='sucursal_id']").val();
                    company = $("#editDeliveryMan select[name='courier_company_id']").val();
                    if (sucursal == "") {
                        swal(
                            "Ok",
                            Lang.get("messagesClient.user_deliveryMan_tag1"),
                            "warning"
                        );
                    } else if (company == "") {
                        swal(
                            "Ok",
                            Lang.get("messagesClient.user_deliveryMan_tag2"),
                            "warning"
                        );
                    } else {
                        var info = {
                            id: $("#btn-edit-deliveryMan").attr("data-id"),
                            first_name: $("#editDeliveryMan input[name='first_name']").val(),
                            last_name: $("#editDeliveryMan input[name='last_name']").val(),
                            phone: $("#editDeliveryMan input[name='phone']").val(),
                            email: $("#editDeliveryMan input[name='email']").val(),
                            courier_company: $("#editDeliveryMan input[name='courier_company']").val(),
                            document: $("#editDeliveryMan input[name='document']").val(),
                            plate: $("#editDeliveryMan input[name='plate']").val(),
                            password: $("#editDeliveryMan input[name='password']").val(),
                            sucursal_id: $("#editDeliveryMan select[name='sucursal_id']").val(),
                            courier_company_id: $("#editDeliveryMan select[name='courier_company_id']").val(),
                        };
                        swal(Lang.get("messagesClient.user_deliveryMan_tag5"), {
                            buttons: {
                                cancel: "No",
                                Ok: true,
                            },
                        }).then((val) => {
                            if (val == "Ok") {
                                $.ajax({
                                    url: "/deliveryMan/update",
                                    type: "POST",
                                    contentType: "application/json",
                                    headers: {
                                        "X-CSRF-TOKEN": $(
                                            'meta[name="csrf-token"]'
                                        ).attr("content"),
                                        "Content-Type": "application/json",
                                    },
                                    data: JSON.stringify(info),
                                    success: function (r) {
                                        if (r.r) {
                                            swal(r.m, {
                                                icon: "success",
                                                buttons: {
                                                    Ok: true,
                                                },
                                            }).then((val) => {
                                                if (val == "Ok") {
                                                    localStorage.setItem(
                                                        "setPageTable",
                                                        true
                                                    );
                                                    $(location).attr(
                                                        "href",
                                                        "/deliveryMan"
                                                    );
                                                }
                                            });
                                        } else {
                                            swal("Error", r.m, "error");
                                        }
                                    },
                                    error: function (e) {
                                        swal(
                                            "Error",
                                            Lang.get(
                                                "messagesClient.user_deliveryMan_tag6"
                                            ),
                                            "error"
                                        );
                                    },
                                });
                            }
                        });
                    }
                }
            }
        });
}

//editar admin
function clickEditAdmins(value) {
    _table = $(`#${SELECTOR_PREFIX}`).DataTable();
    index = _table.page();
    localStorage.setItem("productsTableIndex", index);
    $(location).attr("href", "/admins/edit/" + value);
}

function editAdmin() {
    $("#editAdmin").validator("update");
    $("#editAdmin")
        .validator("update")
        .on("submit", function (e) {
            if (e.isDefaultPrevented()) {
            } else {
                e.preventDefault();
                if (validatePasswords()) {
                    var info = {
                        id: $("#btn-edit-user").attr("data-id"),
                        first_name: $("#editAdmin input[name='first_name']").val(),
                        last_name: $("#editAdmin input[name='last_name']").val(),
                        phone: $("#editAdmin input[name='phone']").val(),
                        email: $("#editAdmin input[name='email']").val(),
                        document: $("#editAdmin input[name='document']").val(),
                        rol_id: $("#editAdmin select[name='rol_id']").val(),
                        sucursal_id: $("#editAdmin select[name='sucursal_id']").val(),
                        password: $("#editAdmin input[name='password']").val(),
                        tags: $(" #editAdmin select[name='tags']").val(),
                    };
                    swal(Lang.get("messagesClient.user_admin_tag3"), {
                        buttons: {
                            cancel: "No",
                            Ok: true,
                        },
                    }).then((val) => {
                        if (val == "Ok") {
                            $.ajax({
                                url: "/admins/update",
                                type: "POST",
                                contentType: "application/json",
                                headers: {
                                    "X-CSRF-TOKEN": $(
                                        'meta[name="csrf-token"]'
                                    ).attr("content"),
                                    "Content-Type": "application/json",
                                },
                                data: JSON.stringify(info),
                                success: function (r) {
                                    if (r.r) {
                                        swal(r.m, {
                                            icon: "success",
                                            buttons: {
                                                Ok: true,
                                            },
                                        }).then((val) => {
                                            if (val == "Ok") {
                                                localStorage.setItem(
                                                    "setPageTable",
                                                    true
                                                );
                                                $(location).attr("href", "/admins");
                                            }
                                        });
                                    } else {
                                        swal("Error", r.m, "error");
                                    }
                                },
                                error: function (e) {
                                    swal(
                                        "Error",
                                        Lang.get("messagesClient.user_admin_tag4"),
                                        "error"
                                    );
                                },
                            });
                        }
                    });
                }
            }
        });
}

function initMap() {
    var map = new google.maps.Map(document.getElementById("map"), {
        center: {
            lat: -34.608444,
            lng: -58.3722367,
        },
        zoom: 15,
    });
    var geocoder = new google.maps.Geocoder();

    document.getElementById("submit").addEventListener("click", function () {
        geocodeAddress(geocoder, map);
    });
}

function importArchivo() {
    var archivo = document.getElementById("archivo");
    archivo = archivo.files[0];
    if (archivo) {
        var formData = new FormData();

        formData.append("archivo", archivo);

        $.ajax({
            type: "POST",
            dataType: "json",
            processData: false,
            contentType: false,
            headers: {
                "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            },
            data: formData,
            url: "/Clientes/importar",
            success: function (r) {
                if (r[0]["respuesta"]) {
                    swal("Carga realizada con éxito!", {
                        icon: "success",
                        buttons: {
                            Ok: true,
                        },
                    }).then((val) => {
                        if (val == "Ok") {
                            $(location).attr("href", "/Clientes");
                        }
                    });
                } else {
                    swal(
                        "Error",
                        "¡Error al ingresar datos por réplica de clientes!",
                        "error"
                    );
                }
            },
        });
    } else {
        swal("Warning", "¡No hay archivo!", "warning");
    }
}

function importArchivoMensajeros() {
    var archivo = document.getElementById("archivo");
    archivo = archivo.files[0];
    if (archivo) {
        var formData = new FormData();

        formData.append("archivo", archivo);

        $.ajax({
            type: "POST",
            dataType: "json",
            processData: false,
            contentType: false,
            headers: {
                "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            },
            data: formData,
            url: "/Mensajeros/importar",
            success: function (r) {
                if (r[0]["respuesta"]) {
                    swal("Carga realizada con éxito!", {
                        icon: "success",
                        buttons: {
                            Ok: true,
                        },
                    }).then((val) => {
                        if (val == "Ok") {
                            $(location).attr("href", "/Mensajeros");
                        }
                    });
                } else {
                    swal(
                        "Error",
                        "¡Error al ingresar datos por réplica de Mensajeros!",
                        "error"
                    );
                }
            },
        });
    } else {
        swal("Warning", "¡No hay archivo!", "warning");
    }
}

/**Activar/Desactivar clientes usando switch*/
function chkClient(value) {
    var state;
    if ($("#Checkactive" + value).is(":checked")) {
        state = true;
    } else {
        state = false;
    }

    var info = {
        id: value,
        state: state,
    };

    $.ajax({
        url: "/clients/active",
        type: "POST",
        contentType: "application/json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            "Content-Type": "application/json",
        },
        data: JSON.stringify(info),
        success: function (r) {
            if (r.r) {
                swal("Ok", "¡Cliente modificado con éxito!");
            } else {
                swal(
                    "Error",
                    Lang.get("messagesClient.user_client_tag6"),
                    "error"
                );
            }
        },
        error: function (e) {
            swal("Error", Lang.get("messagesClient.user_client_tag6"), "error");
        },
    });
}

/**Activar/Desactivar mensajeros usando switch*/
function chkDeliveryMan(value) {
    var state;
    if ($("#Checkactive" + value).is(":checked")) {
        state = true;
    } else {
        state = false;
    }

    var info = {
        id: value,
        state: state,
    };

    $.ajax({
        url: "/deliveryMan/active",
        type: "POST",
        contentType: "application/json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            "Content-Type": "application/json",
        },
        data: JSON.stringify(info),
        success: function (r) {
            if (r.r) {
                swal("Ok", r.m);
            } else {
                swal(
                    "Error",
                    Lang.get("messagesClient.user_deliveryMan_tag6"),
                    "error"
                );
            }
        },
        error: function (e) {
            swal(
                "Error",
                Lang.get("messagesClient.user_deliveryMan_tag6"),
                "error"
            );
        },
    });
}

function chkOnlineDelivery(value) {
    var state;
    if ($("#Checkonline" + value).is(":checked")) {
        state = true;
    } else {
        state = false;
    }

    var info = {
        id: value,
        state: state,
    };

    $.ajax({
        url: "/deliveryMan/online",
        type: "POST",
        contentType: "application/json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            "Content-Type": "application/json",
        },
        data: JSON.stringify(info),
        success: function (r) {
            if (r.r) {
                swal("Ok", r.m);
            } else {
                swal(
                    "Error",
                    Lang.get("messagesClient.user_deliveryMan_tag6"),
                    "error"
                );
            }
        },
        error: function (e) {
            swal(
                "Error",
                Lang.get("messagesClient.user_deliveryMan_tag6"),
                "error"
            );
        },
    });
}

/**Activar/Desactivar administrador usando switch*/
function chkAdmins(value) {
    var state;
    if ($("#Checkactive" + value).is(":checked")) {
        state = true;
    } else {
        state = false;
    }

    var info = {
        id: value,
        state: state,
    };

    $.ajax({
        url: "/admins/active",
        type: "POST",
        contentType: "application/json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            "Content-Type": "application/json",
        },
        data: JSON.stringify(info),
        success: function (r) {
            if (r.r) {
                swal("Ok", r.m);
            } else {
                swal(
                    "Error",
                    Lang.get("messagesClient.user_admin_tag4"),
                    "error"
                );
            }
        },
    });
}

/**Método para eliminar admin desde la tabla de admins y en editar */
function clickDeleteAdmins(value) {
    swal(Lang.get("messagesClient.user_admin_tag5"), {
        buttons: {
            cancel: "No",
            Ok: true,
        },
    }).then((val) => {
        if (val == "Ok") {
            var info = {
                id: value,
            };
            $.ajax({
                url: "/admins/delete",
                type: "POST",
                contentType: "application/json",
                headers: {
                    "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr(
                        "content"
                    ),
                    "Content-Type": "application/json",
                },
                data: JSON.stringify(info),
                success: function (r) {
                    if (r.r) {
                        swal(r.m, {
                            icon: "success",
                            buttons: {
                                Ok: true,
                            },
                        }).then((val) => {
                            if (val == "Ok") {
                                $(location).attr("href", "/admins");
                            }
                        });
                    } else {
                        swal(
                            "Ok",
                            Lang.get("messagesClient.user_admin_tag6"),
                            "error"
                        );
                    }
                },
                error: function (e) {
                    swal(
                        "Ok",
                        Lang.get("messagesClient.user_admin_tag6"),
                        "error"
                    );
                },
            });
        }
    });
}

/**Método para eliminar mensajero desde la tabla de admins y en editar */
function clickDeleteDeliveryMan(value) {
    swal(Lang.get("messagesClient.user_deliveryMan_tag8"), {
        buttons: {
            cancel: "No",
            Ok: true,
        },
    }).then((val) => {
        if (val == "Ok") {
            var info = {
                id: value,
            };

            $.ajax({
                url: "/deliveryMan/delete",
                type: "POST",
                contentType: "application/json",
                headers: {
                    "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr(
                        "content"
                    ),
                    "Content-Type": "application/json",
                },
                data: JSON.stringify(info),
                success: function (r) {
                    if (r.r) {
                        swal(r.m, {
                            icon: "success",
                            buttons: {
                                Ok: true,
                            },
                        }).then((val) => {
                            if (val == "Ok") {
                                $(location).attr("href", "/deliveryMan");
                            }
                        });
                    } else {
                        swal(
                            "Error",
                            Lang.get("messagesClient.user_deliveryMan_tag8"),
                            "error"
                        );
                    }
                },
                error: function (r) {
                    swal(
                        "Error",
                        Lang.get("messagesClient.user_deliveryMan_tag8"),
                        "error"
                    );
                },
            });
        }
    });
}

/**Activar/Desactivar sesion multiple de mensajeros usando switch*/
function chkMSDeliveryMan(value) {
    var state;
    if ($("#CheckMS" + value).is(":checked")) {
        state = 1;
    } else {
        state = 0;
    }

    var info = {
        id: value,
        state: state,
    };

    $.ajax({
        url: "/deliveryMan/multipleSession",
        type: "POST",
        contentType: "application/json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            "Content-Type": "application/json",
        },
        data: JSON.stringify(info),
        success: function (r) {
            if (r.r) {
                swal("Ok", r.m);
            } else {
                swal(
                    "Error",
                    Lang.get("messagesClient.user_deliveryMan_tag7"),
                    "error"
                );
            }
        },
        error: function (e) {
            swal(
                "Error",
                Lang.get("messagesClient.user_deliveryMan_tag7"),
                "error"
            );
        },
    });
}

function createDirectionSucursal() {
    var type = $("#select_type_order option:selected").val();

    if (type && type == 1) {
        //obtener valores modal
        var lat = $("#pac-input").attr("data-lat");
        var long = $("#pac-input").attr("data-long");
        var instru = $("#indications-modal").val();
        var district = $("#district-modal").val();
        var valor = $("#pac-input").val();

        //set valores vista
        $("#direction").val(valor);
        $("#direction").attr("data-id", "");
        $("#direction").attr("data-lat", lat);
        $("#direction").attr("data-long", long);
        $("#indications").val(instru);
        $("#district").val(district);
        $("#modal_register_direction").css("display", "none");
        $(".modal-backdrop").attr("class", "modal fade");
        document.documentElement.style.overflow = "scroll";

        if (lat && long) {
            // calculoCobertura(lat, long);
        } else {
            swal("Advertencia", "¡Dirección incorrecta!", "warning");
        }
    } else if (type && type == 5) {
        //obtener valores modal
        var lat = $("#pac-input").attr("data-lat");
        var long = $("#pac-input").attr("data-long");
        var instru = $("#indications-modal").val();
        var district = $("#district-modal").val();
        var valor = $("#pac-input").val();

        //set valores vista
        $("#address_id").append(
            $("<option>", {
                value: 0,
                text: valor,
            })
        );
        $("#address_id").attr("ec-data-id", "");
        $("#address_id").attr("ec-data-direction", valor);
        $("#address_id").attr("ec-data-lat", lat);
        $("#address_id").attr("ec-data-long", long);
        $("#address_id").attr("ec-data-district", district);
        $("#address_id").attr("ec-data-instru", instru);
        $("#modal_register_direction").css("display", "none");
        $(".modal-backdrop").attr("class", "modal fade");
        document.documentElement.style.overflow = "scroll";

        $("#address_id").val(0).change();

        if (lat && long) {
            // calculoCobertura(lat, long);
        } else {
            swal("Advertencia", "¡Dirección incorrecta!", "warning");
        }
    } else {
        //obtener valores modal
        var lat = $("#pac-input").attr("data-lat");
        var long = $("#pac-input").attr("data-long");
        var instru = $("#indications-modal").val();
        var district = $("#district-modal").val();
        var valor = $("#pac-input").val();

        //set valores vista
        $("#direction").val(valor);
        $("#direction").attr("data-id", "");
        $("#direction").attr("data-lat", lat);
        $("#direction").attr("data-long", long);
        $("#indications").val(instru);
        $("#district").val(district);
        $("#modal_register_direction").css("display", "none");
        $(".modal-backdrop").attr("class", "modal fade");
        document.documentElement.style.overflow = "scroll";

        if (lat && long) {
            // calculoCobertura(lat, long);
        } else {
            swal("Advertencia", "¡Dirección incorrecta!", "warning");
        }
    }
}

function recoverAccount(id) {
    var info = {
        id: id,
    };

    $.ajax({
        url: "/deliveryMan/recover",
        type: "PUT",
        contentType: "application/json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            "Content-Type": "application/json",
        },
        data: JSON.stringify(info),
        success: function (r) {
            if (r.r) {
                swal(r.m, {
                    icon: "success",
                    buttons: {
                        Ok: true,
                    },
                }).then((val) => {
                    if (val == "Ok") {
                        clickEditDeliveryMan(r.id);
                    }
                });
            } else {
                swal("Error", r.m, "error");
            }
        },
        error: function (e) {
            swal(
                "Error",
                Lang.get("messagesClient.user_deliveryMan_tag9"),
                "error"
            );
        },
    });
}

function saveImageUser(id, ruta) {
    var fImage = document.getElementById("photo");
    fImage = fImage.files[0];
    if (fImage) {
        var formData = new FormData();
        formData.append("id", id);
        formData.append("photo", fImage);

        $.ajax({
            type: "POST",
            dataType: "json",
            processData: false,
            contentType: false,
            headers: {
                "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            },
            data: formData,
            url: ruta,
            success: function (r) {
                if (r.r) {
                    swal(r.m, {
                        icon: "success",
                        buttons: {
                            Ok: true,
                        },
                    }).then((val) => {
                        if (val == "Ok") {
                            if (ruta == "/user/saveImage") {
                                $(location).attr("href", "/deliveryMan");
                            } else {
                                $("#photo").attr("src", r.file);
                            }
                        }
                    });
                } else {
                    swal("Error", "¡Error al guardar imagen!", "error");
                    $("#btn-create-user").prop("disabled", false);
                }
            },
            error: function (e) {
                swal("Error", "¡Error al guardar imagen!", "error");
                $("#btn-create-user").prop("disabled", false);
            },
        });
    } else {
        swal("Ok", "Mensajero creado", {
            icon: "success",
            buttons: {
                Ok: true,
            },
        }).then((val) => {
            if (val == "Ok") {
                $(location).attr("href", "/deliveryMan");
            }
        });
    }
}

function importSubscribers() {
    var archivo = document.getElementById("archivo");
    archivo = archivo.files[0];
    if (!archivo) {
        swal("Advertencia", "¡No hay archivo!", "warning");
        return;
    }

    var t = $("#example22").DataTable();
    t.clear().draw();

    $("#button-import-subscribers").addClass("displayNone");
    $("#spinnerButtonSubscribers").removeClass("displayNone");

    var formData = new FormData();
    formData.append("archivo", archivo);
    $.ajax({
        type: "POST",
        dataType: "json",
        processData: false,
        contentType: false,
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
        },
        data: formData,
        url: "/clients/importSubscribers",
        success: function (r) {
            $("#button-import-subscribers").removeClass("displayNone");
            $("#spinnerButtonSubscribers").addClass("displayNone");
            if (r.r) {
                if (r.d != null && r.d.length > 0) {
                    for (var i = 0; i < r.d.length; i++) {
                        t.row.add([
                            r.d[i].message,
                            r.d[i].line,
                        ]);
                    }
                    $('#logModal').modal("show");
                    t.draw();
                } else {
                    swal(r.m, {
                        icon: "success",
                        buttons: {
                            Ok: true,
                        },
                    }).then((val) => {
                        if (val == "Ok") {
                            $(location).attr("href", "/preSubscribers");
                        }
                    });
                }
            } else {
                swal("Error", r.m, "error");
            }
        },
        error: function (e) {
            $("#button-import-subscribers").removeClass("displayNone");
            $("#spinnerButtonSubscribers").addClass("displayNone");
            swal("Error", e.responseJSON.message, "error");
        }
    });
}

function generateSubscribersCredit() {
    swal(Lang.get("messagesClient.user_admin_tag7"), {
        buttons: {
            cancel: "No",
            Ok: true,
        },
    }).then((val) => {
        if (val == "Ok") {
            $.ajax({
                url: "/preSubscribers/generateAbonosCredit",
                type: "GET",
                contentType: "application/json",
                headers: {
                    "X-CSRF-TOKEN": $(
                        'meta[name="csrf-token"]'
                    ).attr("content"),
                    "Content-Type": "application/json",
                },
                data: null,
                success: function (r) {
                    let msj = "";
                    if (r.r) {
                        // if (r.data.length) {
                        //     msj = "A excepción de los siguientes documentos que no cuenta con un usuario:  \n \n" + r.data.join("-");
                        // }
                        swal(r.m, {
                            icon: "success",
                            buttons: {
                                Ok: true,
                            },
                        }).then((val) => {
                            if (val == "Ok") {
                                $(location).attr("href", "/preSubscribers");
                            }
                        });
                    } else {
                        if (r.data) {
                            if (r.data.length) {
                                msj = "Listado de documentos o correos:  \n \n" + r.data.join(" - ");
                            }
                        }
                        if (r.dataseat) {
                            if (r.dataseat.length) {
                                msj = "Listado de sillas:  \n \n" + r.dataseat.join("-");
                            }
                        }
                        swal("Alerta", r.m + "\n \n" + msj, "warning");
                    }
                },
                error: function (e) {
                    swal(
                        "Error",
                        Lang.get("messagesClient.user_admin_tag8"),
                        "error"
                    );
                },
            });
        }
    });
}

function generateSubscribersRandom() {
    swal("Generar abono de un solo partido", {
        buttons: {
            cancel: "No",
            Ok: true,
        },
    }).then((val) => {
        if (val == "Ok") {
            $.ajax({
                url: "/preSubscribers/generateSubscribersRandom",
                type: "GET",
                contentType: "application/json",
                headers: {
                    "X-CSRF-TOKEN": $(
                        'meta[name="csrf-token"]'
                    ).attr("content"),
                    "Content-Type": "application/json",
                },
                data: null,
                success: function (r) {
                    if (r.r) {
                        let msj = "";
                        if (r.data.length) {
                            msj = "A excepción de los siguientes documentos que no cuenta con un usuario:  \n \n" + r.data.join("-");
                        }
                        swal(r.m + "\n \n" + msj, {
                            icon: "success",
                            buttons: {
                                Ok: true,
                            },
                        }).then((val) => {
                            if (val == "Ok") {
                                $(location).attr("href", "/preSubscribers");
                            }
                        });
                    } else {
                        swal("Alerta", r.m, "warning");
                    }
                },
                error: function (e) {
                    swal(
                        "Error",
                        Lang.get("messagesClient.user_admin_tag8"),
                        "error"
                    );
                },
            });
        }
    });
}

function deleteSubscribers() {
    swal("¿Eliminar todos los registros de abonados?", {
        buttons: {
            cancel: "No",
            Ok: true,
        },
    }).then((val) => {
        if (val == "Ok") {
            $.ajax({
                url: "/preSubscribers/deleteSubscribers",
                type: "GET",
                contentType: "application/json",
                headers: {
                    "X-CSRF-TOKEN": $(
                        'meta[name="csrf-token"]'
                    ).attr("content"),
                    "Content-Type": "application/json",
                },
                data: null,
                success: function (r) {
                    if (r.r) {
                        swal(r.m, {
                            icon: "success",
                            buttons: {
                                Ok: true,
                            },
                        }).then((val) => {
                            if (val == "Ok") {
                                $(location).attr("href", "/preSubscribers");
                            }
                        });
                    } else {
                        swal("Alerta", r.m, "warning");
                    }
                },
                error: function (e) {
                    swal(
                        "Error",
                        Lang.get("messagesClient.user_admin_tag8"),
                        "error"
                    );
                },
            });
        }
    });
}

function alertLogSubscribers() {
    swal(Lang.get("messagesClient.user_subscribers.title_1"), {
        icon: "error",
        buttons: {
            Ok: true,
        },
    }).then((val) => {
        if (val == "Ok") {
            $(location).attr("href", "/preSubscribers");
        }
    });
}

function clickExportClients() {
    $('#loading').show();

    const validateDownloadUrl = document.location.origin + "/clients/validateExport";
    const checkStatusUrl = document.location.origin + "/clients/checkExportStatus";
    const downloadUrl = document.location.origin + "/clients/export/";

    let data = {
        check: localRetrieve(`${SELECTOR_PREFIX}_check`),
        from_date: localRetrieve(`${SELECTOR_PREFIX}_clientsfilterFromDate`),
        to_date: localRetrieve(`${SELECTOR_PREFIX}_clientsfilterToDate`),
        last_entry_from_date: localRetrieve(`${SELECTOR_PREFIX}_filterLastFromDate`),
        last_entry_to_date: localRetrieve(`${SELECTOR_PREFIX}_filterLastToDate`),
        status: localRetrieve(`${SELECTOR_PREFIX}_filterStatus`)
    };

    $.ajax({
        type: "POST",
        dataType: "json",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
        },
        data: data,
        url: validateDownloadUrl,
        success: function (response) {
            if (response.success) {
                if (response.processing) {
                    // El archivo se está generando, verificar estado
                    swal({
                        title: "Generando archivo",
                        text: "El archivo se está generando. Por favor espere...",
                        icon: "info",
                        buttons: false,
                        closeOnClickOutside: false,
                        closeOnEsc: false
                    });
                    
                    checkExportStatus(response.filename, checkStatusUrl, downloadUrl);
                } else {
                    // Respuesta antigua (por si acaso)
                    $('#loading').hide();
                    window.location.assign(downloadUrl + response.data);
                }
            } else {
                $('#loading').hide();
                swal("Error", response.message, "error");
            }
        },
        error: function (response) {
            $('#loading').hide();
            swal("Error", response.responseJSON ? response.responseJSON.message : 'Hubo un error en el servidor, espere unos segundos e intente de nuevo', "error");
        }
    });
}

function checkExportStatus(filename, checkStatusUrl, downloadUrl) {
    const maxAttempts = 120; // 10 minutos máximo (120 * 5 segundos)
    let attempts = 0;
    
    const interval = setInterval(function() {
        attempts++;
        
        if (attempts > maxAttempts) {
            clearInterval(interval);
            $('#loading').hide();
            swal("Timeout", "El proceso está tomando más tiempo del esperado. Por favor contacte al administrador.", "warning");
            return;
        }
        
        $.ajax({
            type: "POST",
            dataType: "json",
            headers: {
                "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
            },
            data: { filename: filename },
            url: checkStatusUrl,
            success: function(response) {
                if (response.status === 'completed') {
                    clearInterval(interval);
                    $('#loading').hide();
                    swal({
                        title: "¡Listo!",
                        text: "El archivo se generó correctamente",
                        icon: "success",
                        timer: 2000,
                        buttons: false
                    });
                    // Descargar automáticamente
                    window.location.assign(downloadUrl + filename);
                } else if (response.status === 'failed') {
                    clearInterval(interval);
                    $('#loading').hide();
                    swal("Error", response.error || "Error al generar el archivo", "error");
                }
                // Si es 'processing', continúa esperando
            },
            error: function(response) {
                clearInterval(interval);
                $('#loading').hide();
                swal("Error", "Error verificando el estado del archivo", "error");
            }
        });
    }, 5000); // Verificar cada 5 segundos
}

function importClientsSegmentation() {
    var archivo = document.getElementById("archivoSegmentation");
    archivo = archivo.files[0];
    if (!archivo) {
        swal("Advertencia", "¡No hay archivo!", "warning");
        return;
    }

    var t = $("#example22").DataTable();
    t.clear().draw();

    $("#buttonImport").addClass("displayNone");
    $("#spinnerImport").removeClass("displayNone");

    var formData = new FormData();
    formData.append("archivo", archivo);
    $.ajax({
        type: "POST",
        dataType: "json",
        processData: false,
        contentType: false,
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
        },
        data: formData,
        url: "/clients/importSegmentation",
        success: function (r) {
            $("#buttonImport").removeClass("displayNone");
            $("#spinnerImport").addClass("displayNone");
            if (r.r) {
                if (r.d != null && r.d.length > 0) {
                    for (var i = 0; i < r.d.length; i++) {
                        t.row.add([
                            r.d[i].message,
                            r.d[i].line,
                        ]);
                    }
                    $('#modalImportClients').modal("hide");
                    $('#logModal').modal("show");
                    t.draw();
                } else {
                    swal(r.m, {
                        icon: "success",
                        buttons: {
                            Ok: true,
                        },
                    }).then((val) => {
                        if (val == "Ok") {
                            $(location).attr("href", "/clients");
                        }
                    });
                }
            } else {
                swal("Error", r.m, "error");
            }
        },
        error: function (err) {
            $("#buttonImport").removeClass("displayNone");
            $("#spinnerImport").addClass("displayNone");
            swal("Error", err.responseJSON.message, "error");
        },
    });
}

function importClients() {
    var archivo = document.getElementById("file");
    archivo = archivo.files[0];
    if (!archivo) {
        swal("Advertencia", "¡No hay archivo!", "warning");
        return;
    }

    var t = $("#example22").DataTable();
    t.clear().draw();

    $("#buttonImport").addClass("displayNone");
    $("#spinnerImport").removeClass("displayNone");

    var formData = new FormData();
    formData.append("archivo", archivo);
    $.ajax({
        type: "POST",
        dataType: "json",
        processData: false,
        contentType: false,
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
        },
        data: formData,
        url: "/clients/import",
        success: function (r) {
            $("#buttonImport").removeClass("displayNone");
            $("#spinnerImport").addClass("displayNone");
            if (r.r) {
                if (r.d != null && r.d.length > 0) {
                    for (var i = 0; i < r.d.length; i++) {
                        t.row.add([
                            r.d[i].message,
                            r.d[i].line,
                        ]);
                    }
                    $('#modalImportClients').modal("hide");
                    $('#logModal').modal("show");
                    t.draw();
                } else {
                    swal(r.m, {
                        icon: "success",
                        buttons: {
                            Ok: true,
                        },
                    }).then((val) => {
                        if (val == "Ok") {
                            $(location).attr("href", "/clients");
                        }
                    });
                }
            } else {
                swal("Error", r.m, "error");
            }
        },
        error: function (err) {
            $("#buttonImport").removeClass("displayNone");
            $("#spinnerImport").addClass("displayNone");
            swal("Error", err.responseJSON.message, "error");
        },
    });
}

function alertLogClients() {
    $(location).attr("href", "/clients");
}

function clickDeletePreSubscriber(value) {
    swal(Lang.get("messagesClient.user_subscribers.msj_tag1"), {
        buttons: {
            cancel: "No",
            Ok: true,
        },
    }).then((val) => {
        if (val == "Ok") {
            var info = {};
            $.ajax({
                url: "/preSubscribers/delete/" + value,
                type: "DELETE",
                contentType: "application/json",
                headers: {
                    "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr(
                        "content"
                    ),
                    "Content-Type": "application/json",
                },
                data: JSON.stringify(info),
                success: function (r) {
                    if (r.r) {
                        swal(r.m, {
                            icon: "success",
                            buttons: {
                                Ok: true,
                            },
                        }).then((val) => {
                            if (val == "Ok") {
                                $(location).attr("href", "/preSubscribers");
                            }
                        });
                    } else {
                        swal("Error", Lang.get("messagesClient.user_subscribers.msj_tag2"), "error");
                    }
                },
                error: function (r) {
                    swal("Error", Lang.get("messagesClient.user_subscribers.msj_tag2"), "error");
                },
            });
        }
    });
}

function loadCards(id, first_name, last_name, documentNumber, documentType, idCards, userPhoto) {
    var cards = getCardsInfo(idCards);
    if (id && cards.length) {
        var carnet = cards[0];
        $('#modal_carnet').modal('show');
        if (carnet.html) {
            showUserCarnetFromHtml(carnet, id, first_name, last_name, documentNumber, documentType, userPhoto);
            return;
        }

        var canvas = document.getElementById("canvasCarnet");
        canvas.setAttribute('identification', documentNumber);
        canvas.style.display = "block";

        setTimeout(() => {
            var ctx = canvas.getContext('2d');
            var background = new Image();
            background.crossOrigin = "*";
            background.src = carnet["url"] + "?v=" + new Date().getTime();
            // Asegúrese de que la imagen se cargue primero, de lo contrario, no se dibujará nada.
            background.onload = function () {
                ctx.drawImage(background, 0, 0);
            }

            var user = `${first_name} ${last_name}`;
            var cardName = carnet['name'];
            var optionalField = carnet['optional'] ? carnet['optional'] : '';
            var font_type = carnet['font_type'];
            var font_color = carnet['font_color'];

            let identification = (documentType ? ((documentType == 'ID' ? 'CC' : documentType) + ': ' + documentNumber) : (documentNumber ? 'CC: ' + documentNumber : documentNumber)).toUpperCase();
            user = user.toUpperCase();
            cardName = cardName.toUpperCase();

            let qrData = {
                'u': id,
                'c': carnet['id']
            };

            var qr = new Image();
            qr.src = String(generate(JSON.stringify(qrData)));

            background.onload = () => {
                canvas.height = canvas.width * (background.height / background.width);
                ctx.drawImage(background, 0, 0, canvas.width, canvas.height);

                ctx.beginPath();
                if (!font_color) {
                    ctx.fillStyle = 'white';
                } else {
                    ctx.fillStyle = font_color;
                }
                if (!font_type) {
                    ctx.font = "bold 20px Arial black";
                } else {
                    let font = 'bold 20px ' + font_type;
                    ctx.font = font;
                }

                ctx.textAlign = 'left';
                let nameSplit = user.split(' ');

                if (nameSplit.length > 3) {
                    ctx.fillText(nameSplit[0] + ' ' + nameSplit[1], 20, 160);
                    ctx.fillText(nameSplit[2] + ' ' + nameSplit[3], 20, 180);
                } else {
                    ctx.fillText(user.length > 23 ? user.substring(0, 22) + '...' : user, 20, 180);
                }

                if (!font_type) {
                    ctx.font = 'bold 14px Arial';
                } else {
                    let cardNameFont = '14px ' + font_type;
                    ctx.font = cardNameFont;
                }
                ctx.fillText(cardName.length > 30 ? cardName.substring(0, 29) + '...' : cardName, 20, 200);
                ctx.fillText(identification, canvas.width / 4, 230);

                if (optionalField) ctx.fillText(optionalField.length > 30 ? optionalField.substring(0, 29) + '...' : optionalField, canvas.width / 4, 290);
                if (!font_color) {
                    ctx.fillStyle = '#edd549';
                } else {
                    ctx.fillStyle = font_color;
                }
                ctx.fillText('> ', (canvas.width / 4) - 20, 230);
                if (optionalField) ctx.fillText('✔ ', (canvas.width / 4) - 20, 290);

                var someimage = window.document.getElementById('qr');

                for (var i = 0; i < someimage.getElementsByTagName('img').length; i++) {
                    var myimg = someimage.getElementsByTagName('img')[i];
                }

                ctx.fillStyle = "#FFFFFF";
                ctx.fillRect(canvas.width - 105, canvas.height - 165, 90, 90); // something in the background

                ctx.drawImage(myimg, canvas.width - 100, canvas.height - 160, 80, 80);
                myimg.onload = function () {
                    ctx.drawImage(myimg, canvas.width - 100, canvas.height - 160, 80, 80);
                }
                ctx.closePath();
            };
        }, 200);
    } else {
        document.getElementById("alertModal").style.display = "block";
    }
}

function showUserCarnetFromHtml(carnet, user_id, first_name, last_name, identification, documentType, userPhoto) {
    $("#canvas-container").html(carnet.html);
    $("#athlete_names").html(first_name);
    $("#athlete_last_names").html(last_name);
    $("#identification").html(documentType + ' ' + identification);
    if ($("#user-photo") && userPhoto) {
        $("#user-photo").attr('src', userPhoto + '?_dc=' + new Date().getTime());
    }

    let qrData = {
        'u': user_id,
        'c': carnet['id']
    };

    generate(JSON.stringify(qrData));
    setTimeout(() => {
        const container = document.getElementById("qr");
        const canvas = container.querySelector("canvas");
        if (canvas) {
            const base64 = canvas.toDataURL("image/png");
            $('#qr-code').attr('src', base64);
        } else {
            const img = container.querySelector("img");
            if (img) {
                const base64 = img.src;
                $('#qr-code').attr('src', base64);
            }
        }
    }, 100);
}

function getCardsInfo(idCards) {
    var data;
    $.ajax({
        type: "GET",
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
        },
        url: "/carnet/getCarnets/" + idCards,
        data: null,
        async: false,
        success: function (r) {
            if (r.r) {
                data = r.d;
            } else {
                swal("Error", r.m, "error");
            }
        },
        error: function (textStatus, errorThrown) {
            document.getElementById("btn-canvacarne").style.display = "none";
            swal("Error", Lang.get("messagesClient.carnet.if_exists"), "error");
        },
    });
    return data;
}

function generate(user_input) {
    document.getElementById("qr").innerHTML = "";
    var qrcode = new QRCode(document.getElementById("qr"), {
        text: `${user_input}`,
        width: 170, //default 128
        height: 170,
        colorDark: "#000000",
        colorLight: "#ffffff",
        correctLevel: QRCode.CorrectLevel.H
    });
    return qrcode;
}

function clearQr() {
    var bandera = false;
    $('#modal_carnet').on('hide.bs.modal', function (event) {
        var canvasQr = window.document.getElementById("qr");
        var seeCanvas = canvasQr.getElementsByTagName('canvas')
        if (bandera == false) {
            for (let i = 0; i < canvasQr.getElementsByTagName('canvas').length; i++) {
                var ctx = seeCanvas[i].getContext('2d');
                ctx.clearRect(0, 0, seeCanvas[i].width, seeCanvas[i].height);
            }
            bandera = true;
        }
    });
}

function canvasDownloadCard() {
    var canvas = document.getElementById("canvasCarnet");
    if (canvas) {
        imageData = canvas.toDataURL("image/png", 1.0).replace("image/png", "image/octet-stream");
        downloadImage(imageData, 'carnet-' + canvas.getAttribute('identification') + '.png');
    } else {
        const element = document.getElementById("previewDiv");
        html2canvas(element).then(canvas => {
            const link = document.createElement("a");
            link.download = "carnet.png";
            link.href = canvas.toDataURL("image/png");
            link.click();
        });
    }
}

// The standard ID-1 or CR80 ID card
async function canvasDownloadCardForPrint() {
    var canvas = document.getElementById("canvasCarnet");

    if (!canvas) {
        const element = document.getElementById("previewDiv");
        canvas = await html2canvas(element)
    }

    context = canvas.getContext('2d');
    var backCanvas = document.createElement('canvas');
    backCanvas.width = 1012;
    backCanvas.height = 638;
    var backCtx = backCanvas.getContext('2d');

    // save main canvas contents
    backCtx.drawImage(canvas, 0, 0, 1012, 638);

    imageData = backCanvas.toDataURL("image/png", 1.0).replace("image/png", "image/octet-stream");
    convertDPIImage(imageData, 'carnet-' + canvas.getAttribute('identification') + '.jpg');
}

// Save | Download image
function downloadImage(imageData, filename = 'untitled.jpeg') {
    var a = document.createElement('a');
    a.download = filename;
    a.href = imageData;
    a.click();
}

function convertDPIImage(imageData, filename = 'untitled.jpeg') {
    var formData = new FormData();
    formData.append("image", imageData);

    $.ajax({
        type: "POST",
        dataType: "json",
        processData: false,
        contentType: false,
        headers: {
            "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
        },
        data: formData,
        url: "/carnet/convertDPIImage",
        success: function (r) {
            if (r.r) {
                downloadImage(r.d, filename);
            } else {
                swal("Error", r.m, "error");
            }
        },
        error: function (e) {
            swal("Error", "¡Error al descargar el carné!", "error");
        },
    });
}