HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall_new/buyercall/buyercall/assets/components/contacts/contacts_edit.js
var utils = require('../utils');
var moment = require('moment');
var LeadCallView = require('../lead-call');

const LEAD_PRESIGNED_URL = `//${appConfig.server_url}/presigned_audio_url`;
const CAMPAIGNS_URL = `//${appConfig.server_url}/contacts/campaigns`;

var contacts_edit = {
    loUrl: window.location.href,
    loCurrentNoteId: "",
    loCurrentNoteText: "",
    loChangedNotes: [],
    loTable: $('#tbNotes'),
    gloDateRegEx: /^(0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$/,
    gloEmailRegEx: /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/,
    gloVinRegEx: /(^$|([A-Za-z0-9]){17})/,
    gloYearRegEx: /(^$|^([0-9]){4})/,
    gloDefaultCampaigns: true,
    gloSelectedCampaign: -1,
    gloCampaignCount: 0,

    init: function() {
        var loThat = this;
        var setBirthday = $("#birthday").val();
        var defaultBirthday = "";
        var ddModeAdding = false;
        var ddModeEditing = false;
        var selectedCampaign = $("#campaign_id").val();

        if (selectedCampaign == undefined || selectedCampaign == null || selectedCampaign == "") {
            loThat.gloSelectedCampaign = -1;
        } else {
            loThat.gloSelectedCampaign = selectedCampaign;
        }

        $("#birthday").datetimepicker({
            format: "MM/DD/YYYY",
            icons: {
                time: "fa fa-clock-o",
                date: "fa fa-calendar",
                up: "fa fa-chevron-up",
                down: "fa fa-chevron-down",
                previous: "fa fa-chevron-left",
                next: "fa fa-chevron-right",
                today: "fa fa-screenshot",
                clear: "fa fa-trash",
                close: "fa fa-remove",
                inline: true
            },
            keepInvalid: true//,
            //defaultDate: defaultBirthday
        });

        if (setBirthday != undefined && setBirthday != null && setBirthday != "") {
            defaultBirthday = moment(setBirthday, 'MM/DD/YYYY');
            $("#birthday").data("DateTimePicker").date(defaultBirthday);
        }

        loThat.getCampaigns();

        if (!loThat.gloDefaultCampaigns) {
            if (loThat.gloSelectedCampaign > 0) {
                $('.campaign_dd_edit').show();
            }
        }

        loThat.updateNoteObject();
        // loThat.loadVoiceMailUI();

        $('#firstname, #lastname, #progress_status, #notes').on('change', function() {
            loThat.createFlashMsg($('#divLeadForm'), 'Remember to save changes.', 'info', 'leadedit');
        });

        $('#current_vin, #interest_vin').on('keydown', function(e) {
            var currentTest = $(this).val();
            if ((currentTest.length >= 17) && (e.keyCode != 8) && (e.keyCode != 46)) {
                e.preventDefault();
            }
        });

        $('#current_year, #interest_year').on('keypress', function(e) {
            if ((e.keyCode == 8) || (e.keyCode == 46) || (e.keyCode >= 48 && e.keyCode <= 57)) {
                var currentTest = $(this).val();

                if (currentTest.length >= 4) {
                    e.preventDefault();
                }
            } else {
                e.preventDefault();
            }
        });

        $('#btnContactSubmit').on('click', function(e) {
            var loBirthdayControl = $('#birthday');
            var loBirthday = loBirthdayControl.val();
            var loEmailControl = $('#email');
            var loEmail = loEmailControl.val();
            var loVinControl = $('#current_vin');
            var loModelYearControl = $('#current_year');

            //Format Validation
            var loValidBirthday = loThat.validFormatCheck(loBirthdayControl, 'Invalid date. Dates must be in mm/dd/yyyy format.', loThat.gloDateRegEx);
            var loValidEmail = loThat.validFormatCheck(loEmailControl, 'Invalid email.', loThat.gloEmailRegEx);
            var loValidVIN = loThat.validFormatCheck(loVinControl, 'Invalid VIN. VIN must be 17 characters long.', loThat.gloVinRegEx);
            var loValidYear = loThat.validFormatCheck(loModelYearControl, 'Invalid Year.', loThat.gloYearRegEx);

            if (!loValidBirthday || !loValidEmail || !loValidVIN || !loValidYear) {
                e.preventDefault();
            }
        });

        $('#birthday').on("input", function() {
            if ($(this).val().length > 0) {
                $(this).parent().parent().removeClass('is-empty');
            } else {
                $(this).parent().parent().addClass('is-empty');
            }
        });

        $('#birthday').on("dp.change", function() {
            if ($(this).val().length > 0) {
                $(this).parent().parent().removeClass('is-empty');
            } else {
                $(this).parent().parent().addClass('is-empty');
            }
        });

        $('.btn-disable').on('click', function() {
            var loRow = $(this).closest('tr'),
                loRowId = loRow.attr('id'),
                loTextCell = loRow.find('.note-text'),
                loTextCellText = loTextCell.text();

            loThat.disableNote(loRowId, loTextCellText);
            loRow.hide();
            loThat.createFlashMsg($('#divLeadForm'), 'Remember to save changes.', 'info', 'leadedit');
        });

        $('.btn-edit').on('click', function() {
            var loRow = $(this).closest('tr'),
                loTextCell = loRow.find('.note-text');

            loThat.loTable.find('tr').removeClass('lead-note-clicked');
            loThat.loTable.find('.note-text').attr('contenteditable', false);

            loThat.loCurrentNoteText = loTextCell.text();
            loThat.loCurrentNoteId = loRow.attr('id');
            loRow.addClass('lead-note-clicked');
            loTextCell.attr('contenteditable', true);
            loThat.createFlashMsg($('#divLeadForm'), 'Remember to save changes.', 'info', 'leadedit');
        });

        $('.note-text').on('focusout', function() {
            var loTempNoteText = $(this).text(),
                loTempNoteId = $(this).parent().attr('id'),
                loRow = $('#' + loTempNoteId),
                loTempNoteTextMode = $(this).attr('contenteditable');

            if (loThat.loCurrentNoteId == loTempNoteId && loThat.loCurrentNoteText != loTempNoteText) {
                var loUpdated = loThat.addNote(loTempNoteId, loThat.loCurrentNoteText, loTempNoteText);

                if(loUpdated) {
                    loRow.removeClass('lead-note-clicked').addClass('lead-note-changed');
                } else {
                    loRow.removeClass('lead-note-clicked').removeClass('lead-note-changed');
                }
            } else {
                loRow.removeClass('lead-note-clicked');
            }
            $(this).attr('contenteditable', false);
            loThat.cleanUI();
        });

        $(".btn-lead-call").off().on("click", function(e) {
            var id = this.getAttribute("data-lead-id");

            new LeadCallView({
                    leadCall: true,
                    callId: id
                 }).render();
            e.preventDefault();
        });

        $('#btnNewApplication').off().on('click', function(e) {
            var leadId = this.getAttribute("data-new-app-id");
            $("#newAppData").val(leadId);
            $("#newApplicationModal").modal();
        });

        $('#btnAddNewAppCreate').off().on('click', function(e) {
            var formId = $("#contactForm").val();
            if (formId != "Select form...") {
                var contactId = $("#newAppData").val();
                window.location.replace("/form_leads/add/" + contactId + "/" + formId);
            }
        });

        $('.campaign_dd_add').off().on('click', function() {
            ddModeAdding = true;
            $(this).hide();
            $('#campaign_dd_input').val('').focus();
            $('.campaign_dd_text, .campaign_dd_ok, .campaign_dd_cancel').show();
            $('.campaign_dd, .campaign_dd_edit').hide();
        });

        $('.campaign_dd_edit').off().on('click', function() {
            var campaign_dd = $('#campaign :selected');
            var campaign_id = campaign_dd.val();
            var campaign_text = campaign_dd.text();

            ddModeEditing = true;
            $(this).hide();
            $('.campaign_dd_text, .campaign_dd_ok, .campaign_dd_cancel').show();
            $('.campaign_dd, .campaign_dd_add').hide();

            $('#campaign_dd_input').val(campaign_text).focus();
        });

        $('.campaign_dd_ok').off().on('click', function() {
            var textField = $("#campaign_dd_input").val();

            if (textField) {
                $('.campaign_dd, .campaign_dd_add').show();
                $('.campaign_dd_text, .campaign_dd_ok, .campaign_dd_cancel').hide();

                if (ddModeAdding) {
                    loThat.setCampaign(-1, textField, 'add');
                    loThat.getCampaigns();
                } else
                if (ddModeEditing) {
                    var campaign_dd = $('#campaign :selected');
                    var campaign_id = campaign_dd.val();
                    loThat.setCampaign(campaign_id, textField, 'edit');
                    loThat.getCampaigns();
                }
                ddModeAdding = false;
                ddModeEditing = false;

                loThat.getCampaigns();
            }
        });

        $('.campaign_dd_cancel').off().on('click', function() {
            var selectedCampaign = $('#campaign').val();

            $('.campaign_dd, .campaign_dd_add').show();
            $('.campaign_dd_text, .campaign_dd_ok, .campaign_dd_cancel').hide();
            $("#campaign_dd_input").val('');

            if (selectedCampaign && selectedCampaign > 0) {
                $('.campaign_dd_edit').show();
            }
            $('#campaign_dd_input').val('');
            ddModeAdding = false;
            ddModeEditing = false;
        });

        if (loThat.loUrl.includes("#notes")) {
            $('.notes-select').trigger( "click" );
        }

        function onHashChange() {
            var hash = window.location.hash;

            if (hash) {
                // using ES6 template string syntax
                $(`[data-toggle="tab"][href="${hash}"]`).trigger('click');
            }
        }

        window.addEventListener('hashchange', onHashChange, false);
        onHashChange();
    },

    getCampaigns: function() {
        var loThat = this;
        var campaignDetailsUrl = `${CAMPAIGNS_URL}`;

        $.ajax({
            url: campaignDetailsUrl,
            type: 'GET',
            success: function(data) {
                loThat.gloDefaultCampaigns = data.default_campaign;
                loThat.buildCampaignDropDown(data.campaigns);
            }
        });
    },

    setCampaign: function(paId, paText, type) {
        var loThat = this;
        var campaignOptions = {
            id: paId,
            text: paText
        };
        var queryString = $.param(campaignOptions);
        var campaignDetailsUrl = `${CAMPAIGNS_URL}?${queryString}`;

        $.ajax({
            url: campaignDetailsUrl,
            type: 'POST',
            success: function(data) {
                if (data.result == true) {
                    if (type == 'add') {
                        loThat.createFlashMsg($('#divLeadForm'), 'Campaign successfully added.', 'success', 'leadedit');
                    } else {
                        loThat.createFlashMsg($('#divLeadForm'), 'Campaign successfully updated.', 'success', 'leadedit');
                    }
                } else {
                    if (type == 'add') {
                        loThat.createFlashMsg($('#divLeadForm'), 'Error adding campaign.', 'danger', 'leadedit');
                    } else {
                        loThat.createFlashMsg($('#divLeadForm'), 'Error updating campaign.', 'danger', 'leadedit');
                    }
                }
            },
            error: function(data) {
                if (type == 'add') {
                    loThat.createFlashMsg($('#divLeadForm'), 'Error adding campaign.', 'danger', 'leadedit');
                } else {
                    loThat.createFlashMsg($('#divLeadForm'), 'Error updating campaign.', 'danger', 'leadedit');
                }
            }
        });
    },

    buildCampaignDropDown: function(campaigns) {
        var loThat = this;
        var campaign_dd = $('.campaign_dd');
        var campaignString = "<label for='campaign' class='control-label'>Campaign</label>";

        loThat.gloCampaignCount = 0
        campaignString += "<select id='campaign' name='campaign' class='form-control'>";
        campaignString += "<option value=''></option>";
        if (campaigns) {
            var selected = "";

            for ( i in campaigns) {
                loThat.gloCampaignCount++;
                if (i == loThat.gloSelectedCampaign) {
                    selected = "selected";
                } else {
                    selected = "";
                }
                campaignString += "<option value='" + i + "' " + selected + ">" + campaigns[i]  + "</option>";
            }
        }
        campaignString += "</select>";
        campaign_dd.html(campaignString);

        $('#campaign').off().on('change', function() {
            var value = $('#campaign').val();

            if (value == undefined || value == null || value == "") {
                value = -1;
            }

            if(!loThat.gloDefaultCampaigns) {
                if (value < 0) {
                    $('.campaign_dd_edit').hide();
                } else {
                    $('.campaign_dd_edit').show();
                }
            }
            loThat.gloSelectedCampaign = value;
            $('#campaign_id').val(value);
        });
    },

    validFormatCheck: function(control, message, regEx) {
        var loControlValue = control.val().replace(" ", "").replace("(", "").replace(")", "").replace("-", "");

        if (loControlValue != undefined && loControlValue != null && loControlValue != "") {
            if (!loControlValue.match(regEx)) {
                if (control.parent().parent().find('.field-error').length == 0) {
                    control.parent().parent().addClass('has-error');
                    control.parent().parent().append('<div class="list-unstyled text-danger field-error">' + message + '</div>');
                    control.focus();
                }
                return false;
            }
        }
        return true;
    },

    createFlashMsg: function($container, message, status, type) {
        var $flashMsgContainer = $('#flash-messages');
        var $alertContainer = $('#flash-messages .'+type+'.alert');

        if (!$flashMsgContainer[0]) {
            $container.before('<div id="flash-messages">'+
                              '<div class="'+type+' alert alert-'+status+'" role="alert">'+
                                `${message}` +
                              '</div>'+
                        '</div>');
        } else if(!$alertContainer[0]) {
            $flashMsgContainer.append('<div class="'+type+' alert alert-'+status+'" role="alert">'+
                                `${message}` +
                              '</div>');
        } else {
            $alertContainer.html(`${message}`);
        }
    },

    addNote: function(paId, paOldText, paNewText) {
        var loFound = false,
            loUpdated = false,
            loThat = this;

        for(var i = 0; i < loThat.loChangedNotes.length; i++) {
            var loNote = loThat.loChangedNotes[i];

            if(loNote.id == paId) {
                loFound = true;

                //Update the note
                if(loNote.oldText != paNewText) {
                    loNote.newtext = paNewText;
                    loThat.loChangedNotes[i] = loNote;
                    loUpdated = true;
                    break;
                } else {
                    //Remove the note
                    removeNote(paId);
                    loUpdated = false;
                }
            }
        }

        if(!loFound) {
            var loNewNote = {
                id: paId,
                newtext: paNewText,
                oldtext: paOldText,
                isenabled: true
            };

            loThat.loChangedNotes.push(loNewNote);
            loUpdated = true;
        }
        loThat.updateNoteObject();

        return loUpdated;
    },

    disableNote: function(paId, paText) {
        var loFound = false,
        loThat = this;

        for(var i = 0; i < loThat.loChangedNotes.length; i++) {
            var loNote = loThat.loChangedNotes[i];

            if(loNote.id == paId) {
                loNote.isenabled = false;
                loFound = true;
                loThat.loChangedNotes[i] = loNote;
                break;
            }
        }

        if(!loFound) {
            var loNewNote = {
                id: paId,
                newtext: paText,
                oldtext: paText,
                isenabled: false
            };

            loThat.loChangedNotes.push(loNewNote);
        }

        loThat.updateNoteObject();
    },

    removeNote: function(paId) {
        var loThat= this;

        for(var i = 0; i < loThat.loChangedNotes.length; i++) {

            if(loThat.loChangedNotes[i].id == paId) {
                loThat.loChangedNotes.splice(i,1);
                break;
            }
        }
        loThat.updateNoteObject();
    },

    cleanUI: function() {
        var loTable = $('.lead-notes'),
        loThat = this;

        loThat.loTable.find('tr').each(function (x, el) {
            var loRow = $(this),
                loRowId = loRow.attr('id'),
                loFound = false;

            for(var i = 0; i < loThat.loChangedNotes.length; i++) {
                var loNote = loThat.loChangedNotes[i];

                if(loRowId == loNote.id && loNote.oldtext != loNote.newtext) {
                    loFound = true;
                    break;
                } else
                if(loRowId == loNote.id && loNote.oldtext == loNote.newtext) {
                    removeNote(loRowId);
                    loFound = false;
                    break;
                }
            }

            if(loFound) {
                loRow.removeClass('lead-note-clicked').addClass('lead-note-changed');
            } else {
                loRow.removeClass('lead-note-clicked').removeClass('lead-note-changed');
            }
        });
    },

    updateNoteObject: function() {
        var loThat = this;
        var loControl = $('#notes').find('#edited_notes_str');
        loControl.val(JSON.stringify(loThat.loChangedNotes));
    },

    loadVoiceMailUI: function() {
        var loThat = this;

        if ($('.mediPlayer').length > 0) {
            // $('.mediPlayer').mediaPlayer();
            $('.mediPlayer').on('mouseover', function() {
                var parentHolder = $(this);
                var audioClip = parentHolder.find('.listen');

                if (audioClip.attr('src') == "") {
                    audioClip.attr('src', 'pending');

                    var searchOptions = {
                        url: parentHolder.attr('data-url')
                    };
                    var queryString = $.param(searchOptions);
                    var fileDetailsUrl = `${LEAD_PRESIGNED_URL}?${queryString}`;

                    $.ajax(fileDetailsUrl, {
                      success: function(data) {
                        audioClip.attr('src', data);
                        loThat.setAudioRecordingDetails(parentHolder, audioClip);
                      },
                      error: function(data) {
                        parentHolder.attr("title", "Error loading clip...");
                      }
                    });
                } else {
                    if (audioClip.attr('src') != "pending") {
                        loThat.setAudioRecordingDetails(parentHolder, audioClip);
                    }
                }
            });
        }
    },

    setAudioRecordingDetails: function(paParentElement, paAudioElement) {
        if(paAudioElement.length > 0) {
            var currentTime = parseInt(paAudioElement[0].currentTime);
            var durationTime = parseInt(paAudioElement[0].duration);
            var loading = false;

            var currentMinutes = Math.floor(currentTime / 60);
            var currentSeconds = currentTime - currentMinutes * 60;

            var durationMinutes = Math.floor(durationTime / 60);
            var durationSeconds = durationTime - durationMinutes * 60;

            if(currentMinutes < 10) {
                currentMinutes = '0' + currentMinutes;
            }

            if (currentSeconds < 10) {
                currentSeconds = '0' + currentSeconds;
            }

            if(durationMinutes == undefined || durationMinutes == null || isNaN(durationMinutes)) {
                loading = true;
            } else
            if(durationMinutes < 10) {
                durationMinutes = '0' + durationMinutes;
            }

            if(durationSeconds == undefined || durationSeconds == null || isNaN(durationSeconds)) {
                loading = true;
            } else
            if (durationSeconds < 10) {
                durationSeconds = '0' + durationSeconds;
            }

            if(loading) {
                paParentElement.attr('title', "Loading clip details...");
            } else {
                paParentElement.attr('title', "Current Time: " + currentMinutes + ":" + currentSeconds + " Duration: " + durationMinutes + ":" + durationSeconds);
            }
        }
    }
};

$(document).ready(function() {
    contacts_edit.init();
});