manage_regular_shifts.js 12.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
var selected_member = null,
    possible_cooperative_state = {
        suspended: "Rattrapage",
        exempted: "Exempté.e",
        alert: "En alerte",
        up_to_date: "À jour",
        unsubscribed: "Désinscrit.e des créneaux",
        delay: "En délai",
        gone: "Parti.e"
    };

12 13 14 15 16 17
/**
 * Send request to remove partner from shift template
 */
function remove_from_shift_template() {
    let permanent_unsuscribe = modal.find("#permanent_unsuscribe").prop('checked');

18 19
    openModal();

20 21 22 23
    let data = {
        partner_id: selected_member.id,
        shift_template_id: selected_member.shift_template_id[0],
        permanent_unsuscribe: permanent_unsuscribe,
24
        makeups_to_do: selected_member.makeups_to_do
25 26 27 28 29 30 31 32 33
    };

    $.ajax({
        type: 'POST',
        url: '/members/delete_shift_template_registration',
        data: JSON.stringify(data),
        dataType:"json",
        traditional: true,
        contentType: "application/json; charset=utf-8",
34 35 36 37
        success: function() {
            selected_member.shift_template_id = null;
            selected_member.cooperative_state = (permanent_unsuscribe === true) ? "gone" : "unsubscribed";
            display_member_info();
38 39
            closeModal();
        },
40 41 42 43
        error: function(err_data) {
            if (err_data.status == 403) {
                enqueue_message_for_next_loading("Problème d'autorisation. Merci de vous réidentifier.");
                location.reload();
44

45 46 47 48 49 50 51 52 53 54 55 56 57 58
            } else {
                err = {
                    msg: "erreur serveur lors de la suppression du membre du créneau",
                    ctx: 'members.admin.manage_regular_shifts.remove_from_shift_template'
                };
                report_JS_error(err, 'members.admin');
                closeModal();

                $.notify("Une erreur est survenue lors du processus de suppression du membre du créneau.", {
                    globalPosition:"top right",
                    className: "error"
                });
            }
            
59 60 61 62
        }
    });
}

63
/**
64 65 66
 * Send the request to register a member to a shift template.
 * Ask to unsuscribe first if the member was subscribed.
 *
67
 * @param {int} shift_type 1 === standard ; 2 === ftop ; 3 === exempté
68
 * @param {int} shift_template_id null for ftop shift type
69
 * @param {String} shift_template_name selected shift template name
70
 */
71
function shift_subscrition(shift_type, shift_template_id = null, shift_template_name = null) {
72 73 74 75 76
    openModal();

    let data = {
        partner_id: selected_member.id,
        shift_type: shift_type,
77 78
        shift_template_id: shift_template_id,
        unsubscribe_first: selected_member.shift_template_id !== undefined && selected_member.shift_template_id !== null
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
    };

    $.ajax({
        type: 'POST',
        url: '/members/shift_subscription',
        data: JSON.stringify(data),
        dataType:"json",
        traditional: true,
        contentType: "application/json; charset=utf-8",
        success: function(data) {
            stdata = data.shift_template;
            selected_member.shift_template_id = [
                stdata.id,
                stdata.name
            ];
            selected_member.cooperative_state = data.cooperative_state;
95 96 97
            if(data.makeups_to_do !== undefined) {
                selected_member.makeups_to_do = data.makeups_to_do;
            }
98 99 100 101 102
            display_member_info();

            $("#shifts_calendar_area").hide();
            closeModal();

103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
            setTimeout(() => {
                $.notify("Inscription au nouveau service réussie.", {
                    globalPosition:"top right",
                    className: "success"
                });
            }, 200);
        },
        error: function(err_data) {
            if (
                err_data.status == 409
                && typeof (err_data.responseJSON) != "undefined"
                && err_data.responseJSON.code === "makeup_found"
            ) {
                let modal_template = $("#modal_error_change_shift_template");

                modal_template.find(".shift_template_name").text(shift_template_name);

                closeModal();
                openModal(
                    modal_template.html(),
                    () => {},
                    "Compris !",
                    true,
                    false
                );
128 129 130 131
            } else if (err_data.status == 403) {
                enqueue_message_for_next_loading("Problème d'autorisation. Merci de vous réidentifier.");
                location.reload();

132 133 134 135 136 137 138 139 140 141 142 143 144
            } else {
                err = {
                    msg: "erreur serveur lors de l'inscription du membre au créneau",
                    ctx: 'members.admin.manage_regular_shifts.shift_subscrition'
                };
                report_JS_error(err, 'members.admin');
                closeModal();

                $.notify("Une erreur est survenue lors de l'inscription du membre au créneau.", {
                    globalPosition:"top right",
                    className: "error"
                });
            }
145 146 147 148
        }
    });
}

149 150 151 152 153 154 155
/**
 * When a member is selected, display the selected member relevant info
 */
function display_member_info() {
    $('.member_name').text(`${selected_member.barcode_base} - ${selected_member.name}`);
    $('.member_status').text(possible_cooperative_state[selected_member.cooperative_state]);
    $('.member_makeups').text(selected_member.makeups_to_do);
156 157 158 159
    $('.search_member_results_area').hide();

    $("#remove_shift_template_button").hide();
    $("#remove_shift_template_button").off();
160 161
    $("#change_shift_template_button").hide();
    $("#change_shift_template_button").off();
162 163 164 165
    $("#subscribe_to_shift_template_button").hide();
    $("#subscribe_to_shift_template_button").off();

    $("#shifts_calendar_area").hide();
166

167
    // Member is unsuscribed
168
    if (selected_member.shift_template_id === undefined || selected_member.shift_template_id === null) {
169 170 171
        $('.member_shift').text("X");

        $("#subscribe_to_shift_template_button").show();
172
        $("#subscribe_to_shift_template_button").on("click", set_subscription_area);
173
    } else {
174 175
        $('.member_shift').text(selected_member.shift_template_id[1]);

176 177 178
        $("#remove_shift_template_button").show();
        $("#remove_shift_template_button").on("click", () => {
            let modal_template = $("#modal_remove_shift_template");
179

180 181 182 183 184 185 186 187 188
            modal_template.find(".shift_template_name").text(selected_member.shift_template_id[1]);

            openModal(
                modal_template.html(),
                remove_from_shift_template,
                "Valider",
                false
            );
        });
189 190 191

        $("#change_shift_template_button").show();
        $("#change_shift_template_button").on("click", set_subscription_area);
192
    }
193 194 195

    $('#search_member_input').val();
    $('#partner_data_area').css('display', 'flex');
196 197
}

198 199 200 201
/**
 * Set calendar and associated listeners.
 */
function set_subscription_area() {
202
    retrieve_and_draw_shift_tempates({shift_listener: false});
203 204
    $("#shifts_calendar_area").show();

205 206 207 208 209
    // Cancel listeners from subscription page & set custom listeners
    $(document).off("click", "#shifts_calendar_area button[data-select='Volant']");
    $(document).on("click", "#shifts_calendar_area button[data-select='Volant']", function() {
        // Subscribe to comitee/ftop shift
        msg = (has_committe_shift === "True")
210
            ? `Inscrire ${selected_member.name} au ${committees_shift_name} ?`
211 212 213 214 215 216 217 218 219 220 221
            : `Inscrire ${selected_member.name} en Volant ?`;

        openModal(
            msg,
            () => {
                shift_subscrition(2);
            },
            "Confirmer",
            false
        );
    });
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237

    $(document).off("click", "#shifts_calendar_area button[data-select='Exemption']");
    $(document).on("click", "#shifts_calendar_area button[data-select='Exemption']", function() {
        // Subscribe to comitee/ftop shift
        msg = `Inscrire ${selected_member.name} en Éxempté ?`;

        openModal(
            msg,
            () => {
                shift_subscrition(3);
            },
            "Confirmer",
            false
        );
    });

238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
    $(document).off("click", ".shift");
    $(document).on("click", ".shift", function() {
        // Subscribe to shift template
        let shift_template_id = select_shift_among_compact(null, this, false); // method from common.js
        let shift_template_data = shift_templates[shift_template_id].data;// shift_templates: var from common.js
        let shift_template_name = get_shift_name(shift_template_data);

        openModal(
            `Inscrire ${selected_member.name} au créneau ${shift_template_name} ?`,
            () => {
                shift_subscrition(1, parseInt(shift_template_id), shift_template_name);
            },
            "Confirmer",
            false
        );
    });
254

255 256
}

257 258 259
/**
 * Display the members from the search result
 */
260
function display_possible_members() {
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
    $('.search_member_results_area').show();
    $('.search_member_results').empty();
    $('.btn_possible_member').off();

    let no_result = true;

    if (members_search_results.length > 0) {
        for (member of members_search_results) {
            $(".search_results_text").show();
            no_result = false;

            // Display results (possible members) as buttons
            var member_button = '<button class="btn--success btn_possible_member" member_id="'
                + member.id + '">'
                + member.barcode_base + ' - ' + member.name
                + '</button>';

            $('.search_member_results').append(member_button);
        }

        // Set action on member button click
        $('.btn_possible_member').on('click', function() {
            for (member of members_search_results) {
                if (member.id == $(this).attr('member_id')) {
                    selected_member = member;
286
                    display_member_info();
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308

                    $('.search_member_results').empty();
                    $('.search_member_results_area').hide();
                    $('#search_member_input').val('');

                    break;
                }
            }
        });
    }

    if (no_result === true) {
        $(".search_results_text").hide();
        $('.search_member_results').html(`<p>
            <i>Aucun résultat ! Vérifiez votre recherche...</i>
        </p>`);
    }
}

$(document).ready(function() {
    if (coop_is_connected()) {
        $.ajaxSetup({ headers: { "X-CSRFToken": getCookie('csrftoken') } });
309
        dbc = new PouchDB(couchdb_server);
310

311
        $(".page_content").show();
312

313
        if (has_committe_shift === "True") {
314
            $("#shifts_calendar_area button[data-select='Volant']").text(committees_shift_name);
315 316
        }

317 318 319
        // Set action to search for the member
        $('#search_member_form').submit(function() {
            let search_str = $('#search_member_input').val();
320

321
            $.ajax({
322
                url: `/members/search/${search_str}?search_type=shift_template_data`,
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339
                dataType : 'json',
                success: function(data) {
                    $('#partner_data_area').hide();
                    if (data.res.length === 1) {
                        selected_member = data.res[0];
                        display_member_info();
                    } else {
                        members_search_results = data.res;
                        display_possible_members();
                    }
                },
                error: function() {
                    err = {
                        msg: "erreur serveur lors de la recherche de membres",
                        ctx: 'members.admin.manage_regular_shifts.search_members'
                    };
                    report_JS_error(err, 'members.admin');
340

341 342 343 344 345 346 347
                    $.notify("Erreur lors de la recherche de membre, il faut ré-essayer plus tard...", {
                        globalPosition:"top right",
                        className: "error"
                    });
                }
            });
        });
348 349 350 351 352 353
    } else {
        $(".page_content").hide();
    }

    $('#back_to_admin_index').on('click', function() {
        let base_location = window.location.href.split("manage_regular_shifts")[0].slice(0, -1);
354

355 356 357
        window.location.assign(base_location);
    });
});