{"version":3,"sources":["1Initializers.js","lineitemsview.js","timecardaddviews.js","timecardaddweeklyviews.js","timecarddatatables.js","timecardeditviews.js","timecardinputs.js","timecardmodels.js","timecardsettings.js","timecardviews.js"],"names":["PJQ","views","timecards","constants","view","BY_TIMECARD","BY_TIMECARD_GROUP","BY_PROJECT","BY_PROJECT_CONTACT","BY_PROJECT_CONTACT_TIMECARD","BY_CONTACT","BY_CONTACT_PROJECT","BY_CONTACT_PROJECT_TIMECARD","BY_TIMECARD_DATAENTRY","BY_TIMECARD_GROUP_DATAENTRY","PROJECTWALL_BY_TIMECARD","defaultDateRange","WEEK_TO_DATE","DAYS_7","DAYS_14","DAYS_28","MONTH_TO_DATE","selectionMode","NONE","APPROVE","UNAPPROVE","manageTimeCards","stage","SELECT_DATE","SELECT_PROJECT","SELECT_CONTACTS","MANAGE_TIMECARDS","timeCardGroupBy","CONTACT","DATE","helpers","app","module","modules","TIMECARDS","addOldRoutes","route","name","callback","router","navigate","trigger","replace","routes","session","project","APP","get","initNavigator","activeItem","renderView","TimeCardMain","projectId","projectWall","initProjectNavigator","parseInt","addRoutes","LineItemsView","BaseView","extend","defaults","template","templating","Template","onLineItemChanged","canEdit","events","keyup .li-overtime-hours, .li-regular-hours, .li-doubletime-hours","click .btn-add-line-item","click .btn-delete-line-item","click .btn-view-li-locations","beforeFirstRender","_this","this","model","options","contact","isFetched","fetchPermissions","perms","permissions","settings","fetchSubJobs","subJobs","fetchCostCodes","costCodes","render","systemPermissions","beforeRender","hasPermission","enableOvertime","enableDoubletime","enableClockIn","renderData","afterRender","renderLineItems","_this2","_","size","lineItems","models","add","newLineItem","columns","title","width","bind","data","type","row","opt","icons","toString","visible","isNew","costCode","subJob","getDisplayName","push","apply","orderable","searchable","className","time","dateHelpers","getDateString","Date","dateFormats","TIME","cid","hrs","formatHelpers","minutesToHHMM","dataTable","dataTables","DataTable","el","$","filter","lineItem","autoWidth","fixedHeader","header","footer","isHideSearch","paging","order","language","emptyTable","afterDataTableRender","renderInputs","onRowRemoved","contextMenuOptions","actions","isDanger","onClick","deleteLineItem","isShown","dom","_this3","inputHelpers","inputMaskHours","addListeners","binder","Binder","$el","delegate","useDecimalPercentFields","watchElements","each","timeInPicker","inputs","Datepicker","isTimeOnly","datepickerOptions","format","datePicker","DATE_TIME","defaultDate","onChange","value","set","timeOutPicker","SelectPickerCollection","pickerSelector","valueAttribute","selectPickerOptions","noneSelectedText","isLiveSearch","isIntChoices","isDisabled","choices","union","id","map","subtext","costCodeSelectorCollection","pickers","hideDisabled","sjId","sort","c1","c2","sortHelpers","sortAlphaNum","_this4","stopListening","listenTo","regularHours","reduce","mem","li","overtimeHours","doubletimeHours","getLineItemForInput","$input","getRow","closest","getLineItemElement","node","lineItemHoursChanged","e","currentTarget","minutes","minutesFromHHMM","val","addLineItem","TimeCardLineItem","timeCardId","notes","modals","DeleteCancel","body","onDelete","viewTimecardLocationsClicked","target","viewTimecardLocations","TimeCardLocationMapModal","AddTimeCardsModal","BaseModal","subTemplates","timecard","minWidth","timeCard","onSave","noop","click .timecard-delete","click .timecards-save","click .timecards-continue","click .timecards-previous","click .timecards-close","keyup .overtime-time, .regular-time, .doubletime-time","keyup .time-in, .time-out","beforeModalCreated","collection","collections","TimeCards","step","enableLineItems","isAdmin","projectContacts","ProjectContact","user","toJSON","dateNow","timeCardDate","getFullYear","getMonth","getDate","stepTotal","parseDateString","selectedProject","date","renderStep","hoursChanged","_this5","selectedContacts","timeCardDatePicker","projects","ProjectSelector","isSingleChoice","onProjectSelected","prop","dataTableHeaderData","isHideDeletedFilter","fetchProjectContacts","timeCardContactSelect","contacts","ContactsSelectInput","context","contexts","PROJECTCONTACTS","saveButtonText","addButton","nextStep","edit","fnTc","parameters","searchFor","idFilter","startDate","DATE_YMD","endDate","page","pageSize","orderBy","orderDirection","timeZoneOffset","getTimezoneOffset","fetch","success","contactSelected","find","getTimeCard","TimeCard","createdBy","attributes","$tcOuter","empty","renderSubTemplate","_this6","fnTotal","getDateMinutesDiff","text","setStep","_this7","getValue","fnNextStep","YesNo","onYes","previousStep","deleteTimeCard","remove","$timecard","$lineItem","saveTimeCards","isValid","isLineItemsValid","invalidCount","fnSave","ajax","Request","endpoint","urlHelpers","generateEndpoint","rows","isAPIv2","post","notifications","notify","successNotify","message","removeModal","closeAddTimeCards","ManageTimeCardsByWeekModal","maxWidth","timeCardsView","click .last-week","click .next-week","click div.add-row-options a.dropdown-item","setDate","getDay","ProjectContacts","user2","projectContact","unshift","sortBy","toLowerCase","fetchUsers","users","disabledDays","day","renderWeek","append","contextSelectPicker","Selectpicker","isMultiple","mustSelectValue","defaultValue","onHide","newDate","arguments","length","undefined","removeClass","fnContinue","TimeCardContextProjects","getNewDateAddDays","hasLocation","categories","category","dateFormat","DATE_MONTH_DAY","tempDate","valueOf","i","newRows","_this8","_loop","j","sourceModels","timecard2","existingModels","getTime","newRow","addRow","click","recalculateTotals","TimeCardCategories","captureSignature","preferences","hasPref","preferenceTypes","ENABLE_TIMECARDS_SIGNATURE","signatures","SignatureSubmitModal","headerSubText","onSubmit","signature","cb","lastWeek","setValue","save","nextWeek","projectName","addClass","self","TimeCardWeekEditor","appendTo","setTimeout","_this9","grandTotalMinutes","_loop2","totalMinutes","getTotalTimeForDate","getFormattedTime","hasChanges","_toConsumableArray","signTimecards","saveClicked","BaseDataTable","zeroRecords","phoneWidth","click .btn-copy-phone","click .btn-copy-fax","click .btn-copy-cell","click .btn-copy-email","beforeDataTableRender","rowCallback","childDataTables","getContextMenuItems","isHideNoActions","onRowDoubleClick","editRow","rowsPerPage","indexOf","pageLength","columnsDefault","getColumns","column","index","columnData","orderAscending","createdRow","on","details","$dataTable","oInstance","oldOrder","src","dir","timecardsView","userSettings","afterDataTableRenderChild","columnOrderChanged","getRowChildTable","childOpts","getRowChildData","setRowStyle","status","isBlacklisted","statusChanged","statuses","childRowToggle","sender","rowOverride","$target","selector","tr","child","childDt","parentId","hide","renderChildRow","childClass","$childTable","class","show","childData","childTable","onApprove","isApproved","getChildTableSettings","loader","Loader","parent","cleanup","undelegateEvents","getIsRootView","dataIndex","copyPhone","inputId","uniqueId","hiddenInput","style","select","document","execCommand","copyEmail","fetchTimeCards","_fetchTimeCards","_asyncToGenerator","_regeneratorRuntime","mark","_callee","timeCards","wrap","_context","prev","next","abrupt","stop","_x","ProjectDataTable","click i.project-toggle-row","click .approve-project-time-cards","click .unapprove-project-time-cards","iconClass","approveTimeCards","includeAllColumns","includeColumns","defaultContent","window","columnName","timeCardSettings","html","getChildTableType","getSettings","fixedColumnsLeft","fixedColumnsRight","colReorder","realtime","parentDataTable","ContactDataTable","TimeCardDataTable","viewOptions","TimeCardContacts","approveTimeCardsClicked","_approveTimeCardsClicked","_callee2","approveNote","_context2","sent","c","warningNotify","invalidate","draw","_x2","_approveTimeCards","_callee3","_context3","_x3","_x4","click i.contact-toggle-row","click .approve-contact-time-cards","click .unapprove-contact-time-cards","maxEmailWidth","phoneFormatted","formatPhoneNumber","emailFormatted","userType","userTypes","getByIsCompany","TimeCardProjects","_approveTimeCardsClicked2","_callee4","_context4","_x5","_x6","_approveTimeCards2","_callee5","_this10","_context5","_x7","_x8","click i.timecard-toggle-row","click .view-time-card","click .delete-time-card","click .approve-time-card","click .unapprove-time-card","click .select-all-timecards","click .select-timecard","viewTimeCard","approveTimeCard","_includeColumns","renderTimeCardSelect","join","bidsDue","phone","cell","fax","email","userTypeId","selectAll","isChecked","parameter","done","response","addSelectedTimeCards","timeCardIds","selectedTimeCards","removeSelectedTimeCards","selectTimeCard","originalTimeCard","editModal","TimeCardDetailsModal","offsets","updateParentRows","viewTimeCardClicked","parentTR","parentRow","grandParentTR","grandParentRow","force","fn","delete","deleteTimeCardClicked","approveTimeCardClicked","approve","action","TimeCardDataEntryTable","drawCallback","inputMaskDecimal","click i.timecard-dataentry-toggle-row","change .input-notes","change .input-regular-hours","change .input-overtime-hours","change .input-doubletime-hours","groupByColumn","formatCurrency","valueChanged","fieldName","hasClass","parseFloat","timecardsModal","canApprove","canDelete","click .timecard-save","click .timecard-approve","keyup .overtime-hours, .regular-hours, .doubletime-hours","click .btn-view-locations","Project","fnFetch","canViewLocationMap","focus","renderTotals","_this11","_this12","approveClicked","deleteClicked","TimeCardEditor","isReadOnly","onNextField","click button.edit","inputmask","placeholder","positionCaretOnClick","off","which","definitions","5","validator","preventDefault","getTotalTime","hours","showDetails","click .delete-time-card-week","_this13","editors","_loop3","calculateWeekTotal","isDirty","isWeekNewAndEmpty","totalNotes","deleteWeek","deletedOn","input","TimeCardGroupEditor","click .delete-group","padStart","getValues","deleteGroup","groupName","BaseModel","idAttribute","params","parse","groups","TimeCardGroups","TimeCardLineItems","beforeSave","TimeCardCategory","TimeCardGroup","TimeCardUserSettings","forCompany","viewSettings","setting","TimeCardSettings","BaseCollection","isExport","exportURL","url","totalRows","result","TimeCardSettingsModal","change .select-column","click button.settings-save","click .btn-geofence","defaultView","getDataTableInstance","col","selectedColumns","selectView","currentView","manageProjectGeofence","TimeCardGeofenceModal","columnSelected","fnOnSave","settingTemp","slice","columnTemp","keyup .input-longitude, .input-latitude, .input-radius","click .btn-save","click .cb-enable-geofence","geofenceEnabled","geofence","latitude","longitude","defaultLat","defaultLong","radius","renderMap","toggleStatus","_this14","geofenceMap","maps","GoogleMap","refreshMarkers","addListener","Math","round","latLng","lat","lng","positionChanged","valueType","isNaN","positionObject","google","LatLng","marker","circle","setPosition","setCenter","setRadius","Circle","fillColor","fillOpacity","strokeColor","strokeOpacity","strokeWeight","center","clickable","Marker","position","animation","Animation","DROP","getPosition","setZoom","coordinatesIn","coordinatesOut","renderMarkers","inMarker","outMarker","icon","infoWindowContent","infoWindow","InfoWindow","content","open","isShowHeader","useManualDateRange","click .btn-settings","keyup .input-search","click .search","click .clear-search","click .new-timecards","click .approve-batch","click .unapprove-batch","click .approval-continue","click .cancel-approval","click .export","click .export-weekly","click .btn-manual-range","click .btn-auto-range","click .btn-prev-date","click .btn-next-date","canAdd","canViewAll","showHeader","viewSelectPicker","manualDateRange","autoDateRange","renderDateRange","dateRange","DAYS_30","getCurrentYear","getCurrentMonth","startDatePicker","endDatePicker","startDateString","endDateString","prevDateRange","nextDateRange","_this15","setInputError","stayOnPage","clearServerCache","pageCache","tableSettings","dataTableOptions","getPageCallback","getViewData","displayStart","deferRender","showPageSelector","ids","objectHelpers","refinedType","tc","tcCount","onTableDraw","css","pageNumber","orderArr","direction","fail","searchChanged","keyCode","search","clearFilter","addTimeCards","_this16","approveBatchStart","childDT","grandChildDT","showNotification","approveBatchCancel","hideNotification","approveBatchContinue","plural","uniq","_ref","without","concat","export","files","downloadFile","exportList","exportWeekly","TIMECARD_WEEKLY_EXPORT_TEMPLATE","getPref"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.views.timecards = {};\n\nPJQ.constants.timecards = {\n view: {\n BY_TIMECARD: \"timecard\",\n BY_TIMECARD_GROUP: \"timecard-group\",\n BY_PROJECT: \"project\",\n BY_PROJECT_CONTACT: \"project-contact\",\n BY_PROJECT_CONTACT_TIMECARD: \"project-contact-timecard\",\n BY_CONTACT: \"contact\",\n BY_CONTACT_PROJECT: \"contact-project\",\n BY_CONTACT_PROJECT_TIMECARD: \"contact-project-timecard\",\n BY_TIMECARD_DATAENTRY: \"timecard-dataentry\",\n BY_TIMECARD_GROUP_DATAENTRY: \"timecard-group-dataentry\",\n PROJECTWALL_BY_TIMECARD: \"projectwall-timecard\"\n },\n defaultDateRange: {\n WEEK_TO_DATE: 0,\n DAYS_7: 7,\n DAYS_14: 14,\n DAYS_28: 28,\n MONTH_TO_DATE: -1\n },\n selectionMode: {\n NONE: 0,\n APPROVE: 1,\n UNAPPROVE: 2\n },\n manageTimeCards: {\n stage: {\n SELECT_DATE: 0,\n SELECT_PROJECT: 1,\n SELECT_CONTACTS: 2,\n MANAGE_TIMECARDS: 3\n }\n },\n timeCardGroupBy: {\n CONTACT: 'contact',\n DATE: 'date'\n }\n};\n\nPJQ.helpers.timecards = {};\n\nif (PJQ.app.module === PJQ.constants.modules.TIMECARDS) {\n PJQ.app.addOldRoutes([\n {\n route: '',\n name: 'default',\n callback: function () {\n PJQ.app.router.navigate('timecards', {\n trigger: true,\n replace: true\n });\n }\n }\n ]);\n}\n\nPJQ.modules.timecards = {\n routes: [\n {\n route: 'timecards',\n name: 'timecards',\n callback: function () {\n PJQ.app.session.project = null;\n if (PJQ.app.module === PJQ.constants.modules.APP) {\n if (PJQ.app.session.get('ownsPortal')) {\n PJQ.app.initNavigator({\n activeItem: \"timecards\"\n });\n }\n else {\n PJQ.app.initNavigator();\n }\n }\n else {\n PJQ.app.view.renderView(PJQ.views.timecards.TimeCardMain);\n }\n }\n },\n {\n route: 'projects/:projectId/timecards',\n name: 'timecardsProject',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"timecardsProject\");\n }\n }\n ]\n};\n\nPJQ.app.addRoutes(PJQ.modules.timecards.routes);\n\n","PJQ.views.timecards.LineItemsView = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'timecard-line-items'),\n onLineItemChanged: null,\n canEdit: true\n },\n events: {\n 'keyup .li-overtime-hours, .li-regular-hours, .li-doubletime-hours': 'lineItemHoursChanged',\n 'click .btn-add-line-item': 'addLineItem',\n 'click .btn-delete-line-item': 'deleteLineItem',\n 'click .btn-view-li-locations': 'viewTimecardLocationsClicked'\n },\n beforeFirstRender: function () {\n this.model = this.options.model;\n this.contact = null;\n\n let fnFetch = () => {\n if (this.options.project != null) {\n this.options.project.fetchPermissions((perms) => {\n this.options.permissions = perms;\n if (this.options.settings.get('enableLineItems')) {\n this.options.project.fetchSubJobs((subJobs) => {\n this.subJobs = subJobs;\n this.options.project.fetchCostCodes((costCodes) => {\n this.costCodes = costCodes;\n this.isFetched = true;\n this.render();\n });\n });\n } else {\n this.isFetched = true;\n this.render();\n }\n });\n } else {\n this.options.permissions = PJQ.app.session.systemPermissions;\n this.isFetched = true;\n }\n };\n this.isFetched = false;\n fnFetch();\n },\n beforeRender: function () {\n if (this.isFetched) {\n this.options.canEdit = this.model.get('approvedOn') == null && this.options.permissions.hasPermission('timeCards.canAdd');\n this.options.enableOvertime = this.options.settings.get('enableOvertime');\n this.options.enableDoubletime = this.options.settings.get('enableDoubletime');\n this.options.enableClockIn = this.options.settings.get('enableClockIn')\n }\n },\n renderData: function () {\n return {\n model: this.model,\n contact: this.contact,\n project: this.options.project,\n canEdit: this.options.canEdit,\n enableOvertime: this.options.enableOvertime,\n enableDoubletime: this.options.enableDoubletime\n };\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n this.renderLineItems();\n },\n renderLineItems: function () {\n if (this.options.canEdit && _.size(this.model.lineItems.models) === 0) {\n this.model.lineItems.add(this.newLineItem());\n }\n\n let columns = [\n {\n \"title\": \"#\",\n \"width\": \"50px\",\n \"render\": _.bind(function (data, type, row, opt) {\n let icons = '';\n if ((row.get('latitudeIn') && row.get('longitudeIn')) || (row.get('latitudeOut') && row.get('longitudeOut'))) {\n icons += ''\n }\n return '
' + (opt.row + 1).toString() + icons + '
';\n }, this)\n },\n {\n \"title\": \"Sub Job\",\n \"width\": \"150px\",\n \"visible\": this.subJobs != null && _.size(this.subJobs.models) > 0,\n \"render\": (data, type, row) => {\n if (this.options.canEdit && row.isNew()) {\n return '';\n }\n\n let costCode = this.costCodes.get(row.get('costCodeId')),\n subJob = this.subJobs.get(costCode.get('subJobId'));\n return subJob ? subJob.get('name') : '';\n }\n },\n {\n \"title\": \"Cost Code\",\n \"width\": \"250px\",\n \"render\": (data, type, row) => {\n if (this.options.canEdit && row.isNew()) {\n return '';\n }\n\n let costCode = this.costCodes.get(row.get('costCodeId'));\n return costCode ? costCode.getDisplayName() : '';\n }\n }];\n\n if (this.options.enableClockIn) {\n columns.push(...[{\n \"data\": \"attributes.timeIn\",\n \"width\": \"150px\",\n \"title\": \"Time In\",\n \"orderable\": false,\n \"searchable\": false,\n \"className\": \"text-align-center\",\n \"render\": _.bind(function (data, type, row) {\n let time = '';\n if (data != null) {\n time = PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.TIME)\n }\n if (this.options.canEdit) {\n return '
';\n }\n return time;\n }, this),\n },\n {\n \"data\": \"attributes.timeOut\",\n \"width\": \"150px\",\n \"title\": \"Time Out\",\n \"orderable\": false,\n \"searchable\": false,\n \"className\": \"text-align-center\",\n \"render\": _.bind(function (data, type, row) {\n let time = '';\n if (data != null) {\n time = PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.TIME)\n }\n if (this.options.canEdit) {\n return '
';\n }\n return time;\n }, this),\n }]);\n } else {\n columns.push(...[\n {\n \"data\": \"attributes.regularHours\",\n \"width\": \"120px\",\n \"title\": this.options.enableOvertime || this.options.enableDoubletime ? \"Regular\" : \"Hours\",\n \"orderable\": false,\n \"searchable\": false,\n \"className\": \"text-align-center\",\n \"render\": _.bind(function (data, type, row) {\n let hrs = PJQ.helpers.formatHelpers.minutesToHHMM(row.get('regularHours'));\n if (this.options.canEdit) {\n return '';\n }\n return hrs;\n }, this),\n },\n {\n \"data\": \"attributes.overtimeHours\",\n \"width\": \"120px\",\n \"title\": \"Overtime\",\n \"orderable\": false,\n \"searchable\": false,\n \"className\": \"text-align-center\",\n \"visible\": this.options.enableOvertime === true,\n \"render\": _.bind(function (data, type, row) {\n let hrs = PJQ.helpers.formatHelpers.minutesToHHMM(row.get('overtimeHours'));\n if (this.options.canEdit) {\n return '';\n }\n return hrs;\n }, this),\n },\n {\n \"data\": \"attributes.doubletimeHours\",\n \"width\": \"120px\",\n \"title\": \"Double Time\",\n \"orderable\": false,\n \"searchable\": false,\n \"className\": \"text-align-center\",\n \"visible\": this.options.enableDoubletime === true,\n \"render\": _.bind(function (data, type, row) {\n let hrs = PJQ.helpers.formatHelpers.minutesToHHMM(row.get('doubletimeHours'));\n if (this.options.canEdit) {\n return '';\n }\n return hrs;\n }, this),\n }]);\n }\n\n if (this.options.canEdit) {\n columns.push({\n data: \"id\",\n title: \"\",\n orderable: false,\n searchable: false,\n width: 50,\n className: 'text-align-center',\n render: _.bind(function (data, type, row) {\n return '
';\n }, this)\n });\n }\n\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.line-items-table'),\n data: _.filter(this.model.lineItems.models, function (lineItem) {\n return !lineItem.get('delete');\n }),\n autoWidth: false,\n fixedHeader: {\n header: false,\n footer: false\n },\n isHideSearch: true,\n paging: false,\n order: [1, 'asc'],\n language: {\n emptyTable: this.options.canEdit ? 'Click \"Add Line Item\" to create a new Line item' : 'No line items have been added yet'\n },\n columns: columns,\n afterDataTableRender: _.bind(function () {\n this.renderInputs();\n }, this),\n onRowRemoved: _.bind(function () {\n this.renderInputs();\n }, this),\n contextMenuOptions: {\n actions: [\n {\n name: 'Delete',\n isDanger: true,\n onClick: _.bind(function (row) {\n this.deleteLineItem(row);\n }, this),\n isShown: _.bind(function (row) {\n this.options.canEdit\n }, this),\n }\n ]\n },\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n },\n renderInputs: function () {\n PJQ.helpers.inputHelpers.inputMaskHours(this.$('.input-hours'));\n\n if (this.options.canEdit) {\n this.addListeners();\n if (!this.binder) {\n this.binder = new PJQ.Binder(this.$el, this.model.lineItems, {\n delegate: true,\n useDecimalPercentFields: true,\n watchElements: [\n 'input'\n ]\n });\n }\n\n _.each(this.model.lineItems.models, function(model){\n model.timeInPicker = new PJQ.inputs.Datepicker({\n el: this.$('.li-time-in[data-cid=\"' + model.cid + '\"]'),\n isTimeOnly: true,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE_TIME,\n defaultDate: model.get('timeIn')\n },\n onChange: (value) => {\n model.set('timeIn', value);\n }\n });\n\n model.timeOutPicker = new PJQ.inputs.Datepicker({\n el: this.$('.li-time-out[data-cid=\"' + model.cid + '\"]'),\n isTimeOnly: true,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE_TIME,\n defaultDate: model.get('timeOut')\n },\n onChange: (value) => {\n model.set('timeOut', value);\n }\n });\n }, this)\n\n\n if (this.subJobs != null && _.size(this.subJobs.models) > 0) {\n new PJQ.inputs.SelectPickerCollection(this.$el, this.model.lineItems.models, {\n pickerSelector: '.select-sub-job',\n valueAttribute: 'subJobId',\n selectPickerOptions: {\n noneSelectedText: 'Parent Job',\n isLiveSearch: true,\n isIntChoices: true,\n size: 8,\n isDisabled: _.bind(function (model) {\n return !model.isNew() || !this.options.canEdit;\n }, this),\n choices: _.union([{name: '', choices: {id: 0, name: 'Parent Job'}}], [{\n name: 'Sub Jobs', choices: _.map(this.subJobs.models, function (subJob) {\n return {\n id: subJob.id,\n name: subJob.get('code'),\n subtext: subJob.get('name')\n }\n }, this)\n }])\n },\n onChange: _.bind(function (model, value) {\n model.set('subJobId', value > 0 ? value : null);\n model.set('costCodeId', null);\n\n let costCodePicker = this.costCodeSelectorCollection.pickers[model.cid];\n costCodePicker.render();\n }, this)\n });\n }\n\n this.costCodeSelectorCollection = new PJQ.inputs.SelectPickerCollection(this.$el, this.model.lineItems.models, {\n pickerSelector: '.select-cost-code',\n valueAttribute: 'costCodeId',\n selectPickerOptions: {\n isLiveSearch: true,\n isIntChoices: true,\n hideDisabled: false,\n isDisabled: _.bind(function (model) {\n return !model.isNew() || !this.options.canEdit;\n }, this),\n choices: (model) => {\n let sjId = model.get('subJobId');\n return _.map(_.filter(this.costCodes.models, (costCode) => {\n return sjId == null || costCode.get('subJobId') === sjId;\n }).sort((c1, c2) => {\n return PJQ.helpers.sortHelpers.sortAlphaNum(c1.get('code'), c2.get('code'));\n }), function (costCode) {\n return {\n id: costCode.id,\n name: costCode.getDisplayName()\n };\n });\n }\n },\n onChange: _.bind(function (model, value) {\n model.set('costCodeId', value);\n }, this)\n });\n }\n },\n addListeners: function () {\n this.stopListening(this.model.lineItems);\n this.listenTo(this.model.lineItems, 'change', (lineItem) => {\n let lineItems = _.filter(this.model.lineItems.models, (lineItem) => {\n return !lineItem.get('delete');\n })\n this.model.set({\n regularHours: _.reduce(lineItems, function (mem, li) {\n return mem + li.get('regularHours');\n }, 0),\n overtimeHours: _.reduce(lineItems, function (mem, li) {\n return mem + li.get('overtimeHours');\n }, 0),\n doubletimeHours: _.reduce(lineItems, function (mem, li) {\n return mem + li.get('doubletimeHours');\n }, 0)\n });\n if (typeof this.options.onLineItemChanged === 'function') {\n this.options.onLineItemChanged(lineItem);\n }\n });\n },\n getLineItemForInput: function ($input) {\n if ($input == null || this.dataTable == null) {\n return null;\n }\n let row = this.dataTable.getRow($input.closest('tr'));\n if (row) {\n return row.data();\n }\n return null;\n },\n getLineItemElement: function (lineItem) {\n if (lineItem == null || this.dataTable == null) {\n return null;\n }\n let row = this.dataTable.getRow(lineItem.cid);\n if (row) {\n return $(row.node());\n }\n return null;\n },\n lineItemHoursChanged: function (e) {\n let lineItem = this.getLineItemForInput($(e.currentTarget)),\n type = $(e.currentTarget).data('type'),\n minutes = PJQ.helpers.formatHelpers.minutesFromHHMM($(e.currentTarget).val());\n lineItem.set(type, minutes);\n },\n addLineItem: function (e) {\n this.model.lineItems.add(this.newLineItem());\n this.renderLineItems();\n },\n newLineItem: function () {\n return new PJQ.models.timecards.TimeCardLineItem({\n timeCardId: this.model.id,\n notes: '',\n regularHours: 0,\n overtimeHours: 0,\n doubletimeHours: 0\n });\n },\n deleteLineItem: function (e) {\n let lineItem = this.getLineItemForInput($(e.currentTarget));\n if (lineItem) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this Line Item?\",\n onDelete: _.bind(function () {\n lineItem.set('delete', true);\n this.renderLineItems();\n }, this)\n });\n }\n },\n viewTimecardLocationsClicked: function (e) {\n let target = $(e.currentTarget),\n lineItem = this.dataTable.getRow(target.closest('tr')).data();\n\n this.viewTimecardLocations(lineItem);\n },\n viewTimecardLocations: function (lineItem) {\n new PJQ.views.timecards.TimeCardLocationMapModal({\n model: lineItem\n });\n }\n});","PJQ.views.timecards.AddTimeCardsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'modal-manage-timecards'),\n subTemplates: {\n timecard: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'contact-timecard')\n },\n minWidth: '800px',\n timeCard: null,\n project: null,\n onSave: _.noop(),\n onDelete: _.noop()\n },\n events: {\n 'click .timecard-delete': 'deleteTimeCard',\n 'click .timecards-save': 'saveTimeCards',\n 'click .timecards-continue': 'nextStep',\n 'click .timecards-previous': 'previousStep',\n 'click .timecards-close': 'closeAddTimeCards',\n 'keyup .overtime-time, .regular-time, .doubletime-time': 'hoursChanged',\n 'keyup .time-in, .time-out': 'lineItemClockChanged',\n },\n beforeModalCreated: function () {\n this.collection = new PJQ.collections.timecards.TimeCards();\n this.options.step = PJQ.constants.timecards.manageTimeCards.stage.SELECT_DATE;\n\n this.options.enableLineItems = this.options.settings.get('enableLineItems');\n\n if (this.options.project != null) {\n this.options.permissions = this.options.project.permissions ? this.options.project.permissions : PJQ.app.session.project.permissions;\n } else {\n this.options.permissions = PJQ.app.session.systemPermissions;\n }\n\n this.options.isAdmin = this.options.permissions.hasPermission('timeCards.isAdmin');\n if (!this.options.isAdmin) {\n this.options.contact = new PJQ.models.projectContacts.ProjectContact(PJQ.app.session.user.toJSON());\n }\n\n let dateNow = new Date();\n this.options.timeCardDate = new Date(dateNow.getFullYear(), dateNow.getMonth(), dateNow.getDate());\n this.options.stepTotal = 4;\n if (this.options.timeCard != null) {\n this.options.project = this.options.project ? this.options.project : this.options.timeCard.get('project');\n this.collection.add(this.options.timeCard);\n this.options.timeCardDate = PJQ.helpers.dateHelpers.parseDateString(this.options.timeCard.get('date'), false);\n this.options.step = PJQ.constants.timecards.manageTimeCards.stage.MANAGE_TIMECARDS;\n } else if (this.options.project != null) {\n this.options.stepTotal -= 1;\n this.options.step = PJQ.constants.timecards.manageTimeCards.stage.SELECT_DATE;\n }\n\n if (!this.options.isAdmin) {\n this.options.stepTotal -= 1;\n }\n },\n beforeRender: function () {\n this.options.enableOvertime = this.options.settings.get('enableOvertime');\n this.options.enableDoubletime = this.options.settings.get('enableDoubletime');\n this.options.enableLineItems = this.options.settings.get('enableLineItems');\n this.options.enableClockIn = this.options.settings.get('enableClockIn');\n },\n renderData: function () {\n return {\n project: this.selectedProject,\n date: this.options.timeCardDate,\n settings: this.options.settings,\n stepTotal: this.options.stepTotal,\n step: this.options.step,\n enableOvertime: this.options.enableOvertime,\n enableDoubletime: this.options.enableDoubletime,\n enableLineItems: this.options.enableLineItems,\n enableClockIn: this.options.enableClockIn,\n isAdmin: this.options.isAdmin\n }\n },\n afterRender: function () {\n this.renderStep();\n },\n hoursChanged: function (e) {\n let $target = $(e.currentTarget).closest('.contact-timecard'),\n cid = $target.data('cid'),\n timecard = this.collection.get(cid),\n type = $(e.currentTarget).data('type'),\n minutes = PJQ.helpers.formatHelpers.minutesFromHHMM($(e.currentTarget).val());\n timecard.set(type, minutes);\n },\n renderStep: function () {\n switch (this.options.step) {\n case PJQ.constants.timecards.manageTimeCards.stage.SELECT_DATE:\n this.selectedContacts = [];\n this.timeCardDatePicker = new PJQ.inputs.Datepicker({\n el: this.$('.timecard-date'),\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n defaultDate: this.options.timeCardDate,\n }\n });\n break;\n case PJQ.constants.timecards.manageTimeCards.stage.SELECT_PROJECT:\n this.selectedContacts = [];\n new PJQ.views.projects.ProjectSelector({\n el: this.$('.select-project'),\n isSingleChoice: true,\n onProjectSelected: _.bind(function (project) {\n this.selectedProject = project;\n if (project !== null) {\n this.$('.timecards-continue').prop('disabled', (this.selectedProject === null));\n } else {\n this.$('.timecards-continue').prop('disabled', true);\n }\n }, this),\n dataTableHeaderData: {\n isHideDeletedFilter: true\n }\n });\n break;\n case PJQ.constants.timecards.manageTimeCards.stage.SELECT_CONTACTS:\n this.selectedProject.fetchProjectContacts((projectContacts) => {\n this.timeCardContactSelect = new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.select-contacts'),\n context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\n saveButtonText: 'Select Contacts',\n contacts: projectContacts,\n isSingleChoice: false,\n addButton: this.$('.timecards-add-contacts'),\n onChange: _.bind(function (selectedContacts) {\n this.selectedContacts = selectedContacts;\n this.nextStep();\n }, this)\n });\n this.timeCardContactSelect.edit();\n })\n break;\n case PJQ.constants.timecards.manageTimeCards.stage.MANAGE_TIMECARDS:\n let fnTc = () => {\n let timecards = new PJQ.collections.timecards.TimeCards(),\n dateNow = new Date(),\n parameters = {\n searchFor: '',\n idFilter: _.size(this.selectedContacts) === 1 ? this.selectedContacts[0].id : _.map(this.selectedContacts, (contact) => {\n return contact.id;\n }),\n startDate: PJQ.helpers.dateHelpers.getDateString(this.options.timeCardDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n endDate: PJQ.helpers.dateHelpers.getDateString(this.options.timeCardDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n page: 1,\n pageSize: 2147483646,\n orderBy: 'companyName',\n orderDirection: 'asc',\n projectId: this.selectedProject.get('projectId'),\n timeZoneOffset: dateNow.getTimezoneOffset()\n };\n\n timecards.fetch({\n data: parameters,\n success: () => {\n _.each(timecards.models, (timecard) => {\n let contactSelected = _.find(this.selectedContacts, function (contact) {\n return contact.id === timecard.get('contact').id;\n }, this) != null;\n\n if (!this.collection.getTimeCard(timecard.get('id'), timecard.get('date')) && contactSelected)\n this.collection.add(timecard);\n });\n\n let date = this.options.timeCardDate\n _.each(this.selectedContacts, (contact) => {\n if (this.collection.getTimeCard(contact.get('id'), date))\n return;\n\n if (contact.get('contactId') == null)\n contact.set('contactId', 0);\n\n let timeCard = new PJQ.models.timecards.TimeCard({\n projectId: this.selectedProject.get('projectId'),\n id: contact.get('id'),\n date: PJQ.helpers.dateHelpers.parseDateString(PJQ.helpers.dateHelpers.getDateString(date, PJQ.helpers.dateHelpers.dateFormats.DATE, false)),\n notes: '',\n regularHours: 0,\n overtimeHours: 0,\n doubletimeHours: 0,\n createdBy: -PJQ.app.session.user.id,\n contact: contact.attributes\n });\n this.collection.add(timeCard);\n });\n\n let $tcOuter = this.$('.timecard-data');\n $tcOuter.empty();\n _.each(this.collection.models, function (model) {\n if (!model.get('deletedOn')) {\n this.renderSubTemplate(true, this.options.subTemplates.timecard, $tcOuter, {\n timecard: model,\n timecards: this.collection.models,\n contact: model.get('contact'),\n settings: this.options.settings,\n enableOvertime: this.options.enableOvertime,\n enableDoubletime: this.options.enableDoubletime,\n enableLineItems: this.options.enableLineItems,\n enableClockIn: this.options.enableClockIn,\n canEdit: this.options.canEdit,\n isAdmin: this.options.isAdmin\n }, _.bind(function (el) {\n new PJQ.Binder(el, model, {\n watchElements: [\n 'textarea'\n ]\n });\n let fnTotal = () => {\n let regularHours = PJQ.helpers.formatHelpers.minutesToHHMM(model.get('regularHours')),\n overtimeHours = PJQ.helpers.formatHelpers.minutesToHHMM(model.get('overtimeHours')),\n doubletimeHours = PJQ.helpers.formatHelpers.minutesToHHMM(model.get('doubletimeHours'));\n\n if (this.options.enableClockIn) {\n let minutes = 0;\n if (this.options.enableLineItems) {\n _.each(model.lineItems.models, function (lineItem) {\n if (lineItem.get('timeIn') != null && lineItem.get('timeOut') != null) {\n minutes += PJQ.helpers.dateHelpers.getDateMinutesDiff(new Date(lineItem.get('timeOut')), new Date(lineItem.get('timeIn')));\n }\n });\n } else if (model.get('timeIn') != null && model.get('timeOut') != null) {\n minutes = PJQ.helpers.dateHelpers.getDateMinutesDiff(new Date(model.get('timeOut')), new Date(model.get('timeIn')));\n }\n\n regularHours = minutes > 0 ? PJQ.helpers.formatHelpers.minutesToHHMM(minutes) : '00:00'\n }\n\n el.find('.label-regular-hours').text(regularHours);\n el.find('.label-overtime-hours').text(overtimeHours);\n el.find('.label-doubletime-hours').text(doubletimeHours);\n el.find('.regular-hours').val(regularHours);\n el.find('.overtime-hours').val(overtimeHours);\n el.find('.doubletime-hours').val(doubletimeHours);\n };\n fnTotal();\n\n if (this.options.enableLineItems) {\n new PJQ.views.timecards.LineItemsView({\n el: el.find('.line-items-outer'),\n model: model,\n project: this.selectedProject,\n settings: this.options.settings,\n onLineItemChanged: () => {\n fnTotal();\n }\n });\n } else {\n new PJQ.inputs.Datepicker({\n el: this.$('.time-in[data-cid=\"' + model.cid + '\"]'),\n isTimeOnly: true,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE_TIME,\n defaultDate: model.get('timeIn')\n },\n onChange: (value) => {\n model.set('timeIn', value);\n fnTotal();\n }\n });\n\n new PJQ.inputs.Datepicker({\n el: this.$('.time-out[data-cid=\"' + model.cid + '\"]'),\n isTimeOnly: true,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE_TIME,\n defaultDate: model.get('timeOut')\n },\n onChange: (value) => {\n model.set('timeOut', value);\n fnTotal();\n }\n });\n }\n }, this));\n }\n }, this);\n PJQ.helpers.inputHelpers.inputMaskHours(this.$('.input-hours'));\n }\n });\n };\n this.selectedProject.fetchPermissions((perms) => {\n this.options.permissions = perms;\n if (this.options.enableLineItems) {\n this.selectedProject.fetchSubJobs((subJobs) => {\n this.subJobs = subJobs;\n this.selectedProject.fetchCostCodes((costCodes) => {\n this.costCodes = costCodes;\n fnTc();\n });\n });\n } else {\n fnTc();\n }\n });\n break;\n }\n },\n setStep: function (step) {\n this.options.step = step;\n this.render();\n },\n nextStep: function () {\n switch (this.options.step) {\n case PJQ.constants.timecards.manageTimeCards.stage.SELECT_DATE:\n this.options.timeCardDate = this.timeCardDatePicker.getValue();\n\n if (this.options.project != null && this.options.contact != null) {\n this.selectedProject = this.options.project;\n this.selectedContacts = [this.options.contact];\n this.setStep(PJQ.constants.timecards.manageTimeCards.stage.MANAGE_TIMECARDS);\n } else if (this.options.project != null) {\n this.selectedProject = this.options.project;\n this.setStep(PJQ.constants.timecards.manageTimeCards.stage.SELECT_CONTACTS);\n } else {\n this.setStep(PJQ.constants.timecards.manageTimeCards.stage.SELECT_PROJECT);\n }\n break;\n case PJQ.constants.timecards.manageTimeCards.stage.SELECT_PROJECT:\n let fnNextStep = () => {\n if (this.options.contact != null) {\n this.selectedContacts = [this.options.contact];\n this.setStep(PJQ.constants.timecards.manageTimeCards.stage.MANAGE_TIMECARDS);\n } else {\n this.setStep(PJQ.constants.timecards.manageTimeCards.stage.SELECT_CONTACTS);\n }\n }\n if (this.options.project != null && this.selectedProject.get('projectId') !== this.options.project.get('projectId')) {\n if (this.selectedProject.get('projectId') !== this.options.project.get('projectId')) {\n new PJQ.views.modals.YesNo({\n header: \"Confirm Project Change\",\n body: \"Are you sure you want to change the Project? Doing so will clear any data you have entered without saving.\",\n onYes: _.bind(function () {\n this.options.project = this.selectedProject;\n fnNextStep();\n }, this)\n });\n } else {\n fnNextStep();\n }\n } else {\n fnNextStep();\n }\n break;\n case PJQ.constants.timecards.manageTimeCards.stage.SELECT_CONTACTS:\n this.setStep(PJQ.constants.timecards.manageTimeCards.stage.MANAGE_TIMECARDS);\n break;\n }\n },\n previousStep: function () {\n switch (this.options.step) {\n case PJQ.constants.timecards.manageTimeCards.stage.MANAGE_TIMECARDS:\n this.setStep(this.options.contact != null ? PJQ.constants.timecards.manageTimeCards.stage.SELECT_PROJECT : PJQ.constants.timecards.manageTimeCards.stage.SELECT_CONTACTS);\n break;\n case PJQ.constants.timecards.manageTimeCards.stage.SELECT_CONTACTS:\n this.setStep(PJQ.constants.timecards.manageTimeCards.stage.SELECT_PROJECT);\n break;\n case PJQ.constants.timecards.manageTimeCards.stage.SELECT_PROJECT:\n this.setStep(PJQ.constants.timecards.manageTimeCards.stage.SELECT_DATE);\n break;\n }\n },\n addLineItem: function (e) {\n let $target = $(e.currentTarget).closest('.contact-timecard'),\n cid = $target.data('cid'),\n timecard = this.collection.get(cid),\n lineItem = new PJQ.models.timecards.TimeCardLineItem({\n timeCardId: timecard.id,\n notes: ''\n });\n\n timecard.lineItems.add(lineItem);\n this.render();\n },\n deleteTimeCard: function (e) {\n let $target = $(e.currentTarget).closest('.contact-timecard'),\n cid = $target.data('cid'),\n timecard = this.collection.get(cid);\n\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this Time Card?\",\n onDelete: _.bind(function () {\n this.collection.remove(timecard);\n this.selectedContacts = _.filter(this.selectedContacts, (contact) => {\n return contact.id !== timecard.get('contact').id\n });\n this.render();\n }, this)\n });\n },\n deleteLineItem: function (e) {\n let $timecard = $(e.currentTarget).closest('.contact-timecard'),\n $lineItem = $(e.currentTarget).closest('.timecard-line-item'),\n timecard = this.collection.get($timecard.data('cid'));\n\n if (timecard) {\n let lineItem = timecard.lineItems.get($lineItem.data('cid'));\n\n if (lineItem) {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this Line Item?\",\n onDelete: _.bind(function () {\n lineItem.set('delete', true);\n timecard.set({\n regularHours: timecard.get('regularHours') - lineItem.get('regularHours'),\n overtimeHours: timecard.get('overtimeHours') - lineItem.get('overtimeHours'),\n doubletimeHours: timecard.get('doubletimeHours') - lineItem.get('doubletimeHours')\n });\n this.render();\n }, this)\n });\n }\n }\n },\n saveTimeCards: function (e) {\n if (_.size(this.collection.models) === 0)\n return;\n\n let isValid = true,\n isLineItemsValid = true,\n invalidCount = 0,\n fnSave = _.bind(function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards',\n },\n {\n endpoint: 'batch'\n }\n ]),\n data: {\n rows: this.collection.models\n },\n isAPIv2: true\n }).post().success(_.bind(function (data) {\n PJQ.notifications.notify.successNotify({\n message: 'Time Cards saved successfully'\n });\n if (typeof this.options.onSave === 'function') {\n this.options.onSave();\n }\n this.removeModal();\n }, this));\n }, this);\n\n _.each(this.collection.models, _.bind(function (model) {\n if (!model.get('deletedOn') && (model.get('regularHours') + model.get('overtimeHours') + model.get('doubletimeHours') === 0) && !this.options.enableClockIn) {\n isValid = false;\n invalidCount++;\n } else if (this.options.enableClockIn && !this.options.enableLineItems && (model.get('timeIn') == null || model.get('timeOut') == null)) {\n isValid = false;\n invalidCount++\n } else if (this.options.enableLineItems && this.options.enableClockIn) {\n _.each(model.lineItems.models, _.bind(function (lineItem) {\n if (!lineItem.get('delete') && (lineItem.get('timeIn') == null || lineItem.get('timeOut') == null || lineItem.get('costCodeId') == null)) {\n isLineItemsValid = false;\n }\n }, this));\n }\n\n // Validate and set line items\n if (this.options.enableLineItems) {\n model.set('lineItems', model.lineItems.toJSON());\n }\n }, this));\n\n if (!isValid && isLineItemsValid) {\n new PJQ.views.modals.YesNo({\n header: \"Time Entry Warning\",\n body: invalidCount.toString() + \" Time Card\" + (invalidCount > 1 ? \"s do\" : \" does\") + \" not have time entered. Do you want to save anyway?\",\n onYes: _.bind(function () {\n fnSave();\n }, this)\n });\n } else if (isLineItemsValid) {\n fnSave();\n }\n },\n closeAddTimeCards: function () {\n if (this.options.step === PJQ.constants.timecards.manageTimeCards.stage.MANAGE_TIMECARDS) {\n new PJQ.views.modals.YesNo({\n header: \"Unsaved Time Cards\",\n body: \"Unsaved Time Cards will be lost. Are you sure you want to close without saving?\",\n onYes: _.bind(function () {\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n }\n});","PJQ.views.timecards.ManageTimeCardsByWeekModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'modal-manage-timecards-week'),\n maxWidth: '1400px',\n minWidth: '600px',\n onSave: _.noop(),\n onDelete: _.noop(),\n timeCardsView: null\n },\n events: {\n 'click .last-week': 'lastWeek',\n 'click .next-week': 'nextWeek',\n 'click div.add-row-options a.dropdown-item': 'newRow',\n 'click .timecards-save': 'saveClicked'\n },\n beforeModalCreated: function () {\n let today = new Date(PJQ.helpers.dateHelpers.getDateString(new Date(), PJQ.helpers.dateHelpers.dateFormats.DATE));\n this.startDate = new Date();\n switch (this.options.settings.get('weekStart')) {\n case 0: // Su\n this.startDate.setDate(this.startDate.getDate() - (this.startDate.getDay()) % 7);\n break;\n default:\n this.startDate.setDate(this.startDate.getDate() - (this.startDate.getDay() + (7 - this.options.settings.get('weekStart'))) % 7);\n break;\n }\n\n if (this.options.project != null) {\n this.options.permissions = PJQ.app.session.project.permissions;\n\n let projectContacts = new PJQ.collections.projectContacts.ProjectContacts(null, {\n project: PJQ.app.session.project\n });\n\n projectContacts.fetch({\n success: _.bind(function () {\n this.projectContacts = [];\n\n if (this.options.permissions.hasPermission('timeCards.canViewAll')) {\n this.projectContacts = projectContacts.models;\n\n // add project user 2 to top if not present\n if (PJQ.app.session.project.user2) {\n if (_.size(_.filter(this.projectContacts, function (projectContact) {\n return projectContact.get('id') === PJQ.app.session.project.user2.get('id');\n })) === 0) {\n this.projectContacts.unshift(PJQ.app.session.project.user2);\n }\n }\n\n // add project user 1 to top if not present\n if (PJQ.app.session.project.user) {\n if (_.size(_.filter(this.projectContacts, function (projectContact) {\n return projectContact.get('id') === PJQ.app.session.project.user.get('id');\n })) === 0) {\n this.projectContacts.unshift(PJQ.app.session.project.user);\n }\n }\n }\n\n // add current user to top if not present\n if (_.size(_.filter(this.projectContacts, function (projectContact) {\n return projectContact.get('id') === PJQ.app.session.user.get('id');\n })) === 0) {\n this.projectContacts.unshift(PJQ.app.session.user);\n }\n\n this.projectContacts = _.sortBy(this.projectContacts, function (user) {\n return user.get('contactName') ? user.get('contactName').toLowerCase() : '';\n });\n\n this.render();\n }, this)\n });\n } else {\n this.options.permissions = PJQ.app.session.systemPermissions;\n\n if (this.options.permissions.hasPermission('timeCards.canViewAll')) {\n PJQ.app.session.fetchUsers(_.bind(function (users) {\n this.users = _.sortBy(users.models, function (user) {\n return user.get('contactName') ? user.get('contactName').toLowerCase() : '';\n });\n this.render();\n }, this));\n } else {\n this.users = [PJQ.app.session.user];\n this.render();\n }\n }\n },\n afterRender: function () {\n if (!this.users && !this.projectContacts)\n return;\n\n this.datePicker = new PJQ.inputs.Datepicker({\n el: this.$('.select-week-input'),\n datepickerOptions: {\n defaultDate: this.startDate,\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n },\n disabledDays: _.filter([0, 1, 2, 3, 4, 5, 6], _.bind(function (day) {\n return day !== this.options.settings.get('weekStart');\n }, this)),\n onChange: _.bind(function (value) {\n this.renderWeek(value);\n }, this)\n });\n\n if (PJQ.app.session.project) {\n _.each(this.projectContacts, _.bind(function (user) {\n this.$('.select-context').append(\"\");\n }, this));\n } else {\n _.each(this.users, _.bind(function (user) {\n this.$('.select-context').append(\"\");\n }, this));\n }\n\n this.context = PJQ.app.session.user;\n\n this.contextSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-context'),\n isIntChoices: true,\n isMultiple: false,\n mustSelectValue: true,\n defaultValue: this.context.get('id'),\n onHide: _.bind(function () {\n if (this.context.get('id') !== this.contextSelectPicker.getValue()) {\n if (PJQ.app.session.project) {\n _.each(this.projectContacts, _.bind(function (user) {\n if (user.get('id') === this.contextSelectPicker.getValue()) {\n this.context = user;\n this.renderWeek();\n }\n }, this));\n } else {\n _.each(this.users, _.bind(function (user) {\n if (user.get('id') === this.contextSelectPicker.getValue()) {\n this.context = user;\n this.renderWeek();\n }\n }, this));\n }\n }\n }, this)\n });\n\n this.renderWeek();\n },\n renderWeek: function (newDate = null) {\n if (newDate)\n this.startDate = newDate;\n\n this.projects = null;\n this.rows = [];\n this.$('.timecards-list, .add-row-options').empty();\n this.$('.timecards-empty').removeClass('hidden');\n\n let fnContinue = _.bind(function () {\n this.projects = new PJQ.collections.timecards.TimeCardContextProjects(null, {\n id: this.context.get('id'),\n startDate: this.startDate,\n endDate: PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, 7)\n });\n\n this.projects.fetch({\n success: _.bind(function () {\n this.$('.add-row-options').append(\"\");\n\n if (PJQ.app.session.project) {\n let hasLocation = (_.size(PJQ.app.session.project.get('city')) + _.size(PJQ.app.session.project.get('state')) > 0);\n this.$('.add-row-options').append(\"\" + PJQ.app.session.project.get('projectName') + \"\");\n } else if (_.size(this.projects.models) > 0) {\n _.each(this.projects.models, _.bind(function (project) {\n let hasLocation = (_.size(project.get('city')) + _.size(project.get('state')) > 0);\n this.$('.add-row-options').append(\"\" + project.get('projectName') + \"\");\n }, this));\n } else {\n this.$('.add-row-options .dropdown-item[data-project-id=\"0\"]').removeClass('hidden');\n }\n\n if (_.size(this.categories.models) > 0) {\n this.$('.add-row-options').append(\"\");\n }\n\n _.each(this.categories.models, _.bind(function (category) {\n this.$('.add-row-options').append(\"\" + category.get('name') + \"\");\n }, this));\n\n let dateFormat = \"ddd, \" + PJQ.helpers.dateHelpers.dateFormats.DATE_MONTH_DAY,\n tempDate = new Date(this.startDate.valueOf());\n for (var i = 0; i < 7; i++) {\n this.$('div.timecards-header div[data-day-column=\"' + i + '\"]').text(PJQ.helpers.dateHelpers.getDateString(tempDate, dateFormat));\n tempDate.setDate(tempDate.getDate() + 1);\n }\n\n let idFilter = 0;\n if (this.options.contact)\n idFilter = this.options.contact.get('id');\n else {\n if (!this.options.permissions.hasPermission('contacts.canView') && (PJQ.app.session.project === null || !this.options.permissions.hasPermission('canViewAll')))\n idFilter = -PJQ.app.session.user.id;\n }\n\n let dateNow = new Date(), parameters = {\n searchFor: '',\n startDate: PJQ.helpers.dateHelpers.getDateString(this.startDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n endDate: PJQ.helpers.dateHelpers.getDateString(PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, 6), PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n page: 1,\n pageSize: 2147483646,\n orderBy: 'project.projectId',\n orderDirection: 'asc',\n projectId: PJQ.app.session.project ? PJQ.app.session.project.get('projectId') : 0,\n idFilter: this.context.get('id'),\n timeZoneOffset: dateNow.getTimezoneOffset()\n }, timecards = new PJQ.collections.timecards.TimeCards();\n\n timecards.fetch({\n data: parameters,\n success: _.bind(function () {\n let newRows = [];\n _.each(timecards.models, _.bind(function (timecard) {\n if (_.size(_.filter(newRows, function (row) {\n return row.project.projectId == timecard.get('projectId');\n })) === 0) {\n // iterate through the models in each newRow and add any missing dates for this date range.\n let models = [];\n\n for (let j = 0; j < 7; j++) {\n let date = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, j),\n sourceModels = _.filter(timecards.models, function (timecard2) {\n return timecard2.projectId === timecard.projectId;\n });\n\n let existingModels = _.filter(sourceModels, function (timecard2) {\n return timecard2.get('projectId') === timecard.get('projectId') && timecard2.get('date').getTime() === PJQ.helpers.dateHelpers.parseDateString(PJQ.helpers.dateHelpers.getDateString(date, PJQ.helpers.dateHelpers.dateFormats.DATE, false)).getTime();\n });\n\n if (_.size(existingModels) === 0) {\n models.push(new PJQ.models.timecards.TimeCard({\n projectId: timecard.get('projectId'),\n project: timecard.get('project'),\n contact: timecard.get('contact'),\n id: timecard.get('id'),\n date: PJQ.helpers.dateHelpers.parseDateString(PJQ.helpers.dateHelpers.getDateString(date, PJQ.helpers.dateHelpers.dateFormats.DATE, false)),\n notes: '',\n regularHours: 0,\n overtimeHours: 0,\n doubletimeHours: 0,\n createdBy: -PJQ.app.session.user.id\n }));\n } else {\n models.push(existingModels[0]);\n }\n }\n\n newRows.push({\n project: timecard.get('project'),\n models: models\n });\n }\n }, this));\n\n if (_.size(newRows) > 0) {\n _.each(newRows, _.bind(function (newRow) {\n this.addRow(newRow);\n }, this));\n } else if (PJQ.app.session.project) {\n this.$('.add-row-options .dropdown-item.project[data-project-id=\"' + PJQ.app.session.project.get('projectId') + '\"]').click();\n }\n }, this)\n });\n\n this.recalculateTotals();\n }, this)\n });\n }, this);\n\n // load categories\n if (this.categories == null) {\n this.categories = new PJQ.collections.timecards.TimeCardCategories();\n this.categories.fetch({\n success: _.bind(function () {\n fnContinue();\n }, this)\n });\n } else {\n fnContinue();\n }\n },\n captureSignature: function (callback) {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_TIMECARDS_SIGNATURE)) {\n new PJQ.views.signatures.SignatureSubmitModal({\n headerSubText: \"Sign off on your time card changes\",\n onSubmit: _.bind(function (signature, cb) {\n cb();\n callback(signature ? signature : \"\");\n }, this)\n });\n } else {\n callback(null);\n }\n },\n lastWeek: function () {\n let fnContinue = _.bind(function () {\n let date = new Date(this.startDate.valueOf());\n date.setDate(date.getDate() - 7);\n this.datePicker.setValue(date);\n this.renderWeek(date);\n }, this);\n\n if (_.size(this.rows) > 0) {\n\n this.save(_.bind(function () {\n fnContinue();\n }, this));\n\n } else\n fnContinue();\n },\n nextWeek: function () {\n let fnContinue = _.bind(function () {\n let date = new Date(this.startDate.valueOf());\n date.setDate(date.getDate() + 7);\n this.datePicker.setValue(date);\n this.renderWeek(date)\n }, this);\n\n if (_.size(this.rows) > 0) {\n this.save(_.bind(function () {\n fnContinue();\n }, this));\n } else\n fnContinue();\n },\n newRow: function (e) {\n let projectId = $(e.currentTarget).data('projectId'), newRow = {};\n\n if (projectId === 0)\n return;\n\n if (projectId > 0) {\n _.each(this.projects.models, _.bind(function (project) {\n if (project.get('id') == projectId) {\n newRow.project = project.attributes;\n }\n }, this));\n\n if (!newRow.project && PJQ.app.session.project)\n newRow.project = PJQ.app.session.project.attributes;\n } else {\n // find category\n _.each(this.categories.models, _.bind(function (category) {\n if (category.get('timeCardCategoryId') == projectId * -1) {\n newRow.project = {\n projectId: category.get('timeCardCategoryId') * -1,\n projectName: category.get('name')\n };\n }\n }, this));\n }\n\n // add new models for the days of this work week\n newRow.models = [];\n for (let i = 0; i < 7; i++) {\n let date = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, i);\n newRow.models.push(new PJQ.models.timecards.TimeCard({\n projectId: projectId,\n project: newRow.project,\n contact: this.context.attributes,\n id: this.context.get('id'),\n date: PJQ.helpers.dateHelpers.parseDateString(PJQ.helpers.dateHelpers.getDateString(date, PJQ.helpers.dateHelpers.dateFormats.DATE, false)),\n notes: '',\n regularHours: 0,\n overtimeHours: 0,\n doubletimeHours: 0,\n createdBy: -PJQ.app.session.user.id\n }));\n }\n\n this.addRow(newRow);\n },\n addRow: function (row) {\n this.$('.timecards-empty').addClass('hidden');\n this.$('.add-row-options a.dropdown-item[data-project-id=\"' + row.project.projectId + '\"]').addClass('hidden');\n if (_.size(this.$('.add-row-options a.dropdown-item.category:not(.hidden)')) === 0)\n this.$('.add-row-options .dropdown-divider').addClass('hidden');\n\n if (_.size(this.$('.add-row-options a.dropdown-item.project:not(.hidden)')) === 0)\n this.$('.add-row-options .dropdown-item.no-projects').removeClass('hidden');\n\n let self = this;\n this.rows.push(new PJQ.inputs.timecards.TimeCardWeekEditor({\n el: $('
').appendTo(this.$('.timecards-list')),\n settings: this.options.settings,\n project: this.options.project,\n row: row,\n startDate: this.startDate,\n onChange: _.bind(function () {\n setTimeout(function () {\n self.recalculateTotals();\n }, 200);\n }, this),\n onDelete: function () {\n this.el.addClass('hidden');\n self.$('.add-row-options a.dropdown-item[data-project-id=\"' + row.project.projectId + '\"]').removeClass('hidden');\n\n // handle New Row dropdowns depending on if project or category\n if (this.row.project.projectId > 0) {\n // if at least one visible project in the list exists, hide the 'no projects' item\n if (_.size(self.$('.add-row-options a.dropdown-item.project:not(.hidden)')) > 0)\n self.$('.add-row-options .dropdown-item.no-projects').addClass('hidden');\n else\n self.$('.add-row-options .dropdown-item.no-projects').removeClass('hidden');\n } else {\n // at least one category now exists, so show the divider\n self.$('.add-row-options .dropdown-divider').removeClass('hidden');\n }\n\n if (_.size(self.$('.timecards-list .time-card-week:not(\".hidden\")')) == 0)\n self.$('.timecards-empty').removeClass('hidden');\n\n self.recalculateTotals();\n }\n }));\n },\n recalculateTotals: function () {\n let grandTotalMinutes = 0;\n for (let i = 0; i < 7; i++) {\n let totalMinutes = 0;\n\n // loop through each day, and then through each row and get the daytotal\n let date = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, i);\n _.each(this.rows, _.bind(function (row) {\n totalMinutes += row.getTotalTimeForDate(date);\n }, this));\n\n grandTotalMinutes += totalMinutes;\n\n this.$('.timecards-footer .time-card-day-total[data-day-column=\"' + i + '\"]').text(PJQ.helpers.timecards.getFormattedTime(totalMinutes));\n }\n\n this.$('.timecards-footer .time-card-total[data-day-column=\"total\"]').text(PJQ.helpers.timecards.getFormattedTime(grandTotalMinutes));\n },\n save: function (callback) {\n let timecards = [];\n _.each(this.rows, _.bind(function (row) {\n if (row.hasChanges()) {\n timecards.push(..._.filter(row.options.row.models, function (model) {\n return !model.isNew() || !model.get('deletedOn');\n }));\n }\n }, this));\n\n let signTimecards = _.filter(timecards, function (timecard) {\n return timecard.get('id') === -PJQ.app.session.user.id;\n }), fnSave = _.bind(function (signature) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards',\n },\n {\n endpoint: 'batch'\n }\n ]),\n data: {\n signature: signature,\n rows: timecards\n },\n isAPIv2: true\n }).post().success(_.bind(function (data) {\n PJQ.notifications.notify.successNotify({\n message: 'Timecard changes saved sucessfully'\n });\n this.options.onSave();\n callback();\n }, this));\n }, this)\n if (_.size(signTimecards) > 0) {\n this.captureSignature(_.bind(function (signature) {\n fnSave(signature);\n }, this));\n } else if (_.size(timecards) > 0) {\n fnSave();\n } else {\n callback();\n }\n },\n saveClicked: function () {\n this.save(_.bind(function () {\n this.removeModal();\n }, this));\n }\n});","PJQ.views.timecards.BaseDataTable = PJQ.views.dataTables.DataTable.extend({\n defaults: {\n language: {\n zeroRecords: \"No Results Available\"\n },\n isHideSearch: true,\n dom: '<\"top\"p<\"clear\">>rt<\"bottom\"p<\"clear\">>',\n phoneWidth: '125px'\n },\n events: {\n 'click .btn-copy-phone': 'copyPhone',\n 'click .btn-copy-fax': 'copyPhone',\n 'click .btn-copy-cell': 'copyPhone',\n 'click .btn-copy-email': 'copyEmail'\n },\n beforeDataTableRender: function () {\n this.options.rowCallback = function (row, data) {\n };\n\n if (this.options.project != null) {\n this.options.permissions = PJQ.app.session.project.permissions;\n } else {\n this.options.permissions = PJQ.app.session.systemPermissions;\n }\n\n this.options.childDataTables = [];\n\n this.options.contextMenuOptions = {\n actions: this.getContextMenuItems(),\n isHideNoActions: true\n };\n\n this.options.onRowDoubleClick = _.bind(function (row) {\n if (row.data()) {\n this.editRow(row.data());\n }\n }, this);\n\n if (this.options.settings) {\n // enable paging for grids that have a setting for it / are not subgrids\n if (this.options.settings.rowsPerPage !== 0 && this.options.view.indexOf('-') === -1)\n this.options.pageLength = this.options.settings.rowsPerPage;\n else\n this.options.pageLength = 2147483646;\n\n if (this.options.settings.orderBy !== 'sortOrder') {\n if (_.size(this.options.settings.columns) === 0) {\n this.options.settings.orderBy = this.options.settings.columnsDefault[0];\n } else if (this.options.settings.columns.indexOf(this.options.settings.orderBy) === -1) {\n this.options.settings.orderBy = this.options.settings.columns[0];\n }\n }\n _.each(this.getColumns(false, this.options.view), _.bind(function (column, index) {\n if (column.columnData === this.options.settings.orderBy) {\n this.options.order = [[index, this.options.settings.orderAscending ? 'asc' : 'desc']];\n }\n }, this));\n\n }\n\n this.options.createdRow = _.bind(this.createdRow, this);\n\n if (typeof this.options.beforeDataTableRender === 'function') {\n this.options.beforeDataTableRender();\n }\n },\n afterDataTableRender: function () {\n this.$el.on('order.dt', _.bind(function (e, settings, details) {\n if (this.$dataTable[0].id !== settings.oInstance[0].id)\n return;\n\n if (!this.options.settings)\n return;\n\n let oldOrder = 0, columns = this.getColumns(false);\n _.each(columns, _.bind(function (column, index) {\n if (column.columnData === this.options.settings.orderBy)\n oldOrder = index;\n }, this));\n\n if (oldOrder !== details[details.length - 1].src || this.options.settings.orderAscending !== (details[details.length - 1].dir === 'asc')) {\n this.options.settings.orderBy = columns[details[details.length - 1].src].columnData;\n this.options.settings.orderAscending = details[details.length - 1].dir === 'asc';\n this.options.timecardsView.userSettings.save();\n }\n }, this));\n\n this.$el.on('draw.dt', _.bind(function () {\n this.afterDataTableRenderChild();\n }, this));\n\n if (typeof this.options.afterDataTableRender === 'function') {\n this.options.afterDataTableRender(this.dataTable);\n }\n\n this.afterDataTableRenderChild();\n },\n columnOrderChanged: function (columns) {\n if (this.options.userSettings != null) {\n let settings = this.options.userSettings.get('viewSettings');\n for (let i = 0; i < _.size(settings); i++) {\n if (settings[i].view === this.options.view) {\n settings[i].columns = columns;\n }\n }\n\n this.options.userSettings.set('viewSettings', settings);\n this.options.userSettings.save();\n }\n },\n afterDataTableRenderChild: function () {\n },\n getRowChildTable: function (childOpts) {\n },\n getRowChildData: function (row) {\n },\n setRowStyle: function (row, status, isBlacklisted) {\n },\n getContextMenuItems: function () {\n },\n editRow: function (model) {\n },\n statusChanged: function (statuses) {\n },\n childRowToggle: function (sender, rowOverride) {\n let $target = rowOverride ? $(rowOverride.selector.rows).find('.timecard-dataentry-toggle-row') : $(sender.currentTarget),\n id = $target.data('id'),\n tr = $target.closest('tr'),\n row = this.getRow(tr);\n if (row.child.isShown() && rowOverride == null) {\n // This row is already open - close it\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== id;\n }, this));\n row.child.hide();\n tr.removeClass('shown');\n $target.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n } else {\n $target.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n\n this.renderChildRow(row, id);\n }\n },\n renderChildRow: function (row, parentId) {\n //row.child.hide();\n let childClass = 'subgrid-' + parentId.toString(),\n $childTable = $('
', {\n class: childClass + ' p-2'\n });\n row.child($childTable).show();\n\n let childData = this.getRowChildData(row);\n if (childData != null) {\n if (this.options.view === PJQ.constants.timecards.view.BY_TIMECARD_DATAENTRY ||\n this.options.view === PJQ.constants.timecards.view.BY_TIMECARD ||\n this.options.view === PJQ.constants.timecards.view.PROJECTWALL_BY_TIMECARD ||\n this.options.view === PJQ.constants.timecards.view.BY_PROJECT_CONTACT_TIMECARD ||\n this.options.view === PJQ.constants.timecards.view.BY_CONTACT_PROJECT_TIMECARD) {\n let childTable = this.getRowChildTable({\n el: $childTable,\n data: childData,\n parentId: parentId,\n onApprove: this.options.onApprove,\n isApproved: row.data().get('approvedOn') ? true : false,\n timecardsView: this.options.timecardsView\n });\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== parentId;\n }, this));\n this.options.childDataTables.push(childTable);\n } else {\n let settings = this.getChildTableSettings(),\n dateNow = new Date(),\n parameters = {\n searchFor: this.options.timecardsView.$('.input-search').val(),\n startDate: PJQ.helpers.dateHelpers.getDateString(this.options.timecardsView.startDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n endDate: PJQ.helpers.dateHelpers.getDateString(this.options.timecardsView.endDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n page: 1,\n pageSize: 2147483646,\n orderBy: settings.orderBy,\n orderDirection: settings.orderAscending ? 'asc' : 'desc',\n timeZoneOffset: dateNow.getTimezoneOffset(),\n projectId: childData.options.projectId,\n idFilter: childData.options.idFilter\n };\n\n let loader = new PJQ.Loader(this.$el.parent());\n childData.fetch({\n type: 'GET',\n data: parameters,\n success: _.bind(function () {\n loader.remove();\n let childTable = this.getRowChildTable({\n el: $childTable,\n data: childData.models,\n parentId: parentId,\n timecardsView: this.options.timecardsView\n });\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== parentId;\n }, this));\n this.options.childDataTables.push(childTable);\n //tr.addClass('shown');\n }, this)\n });\n }\n }\n },\n getColumns: function () {\n },\n cleanup: function () {\n this.undelegateEvents();\n $(this.el).empty();\n },\n getIsRootView: function () {\n return (this.options.view.indexOf('-') === -1);\n },\n createdRow: function (row, data, dataIndex) {\n },\n copyPhone: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('', {\n value: $(e.currentTarget).data('phone'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Number copied to clipboard.'\n });\n },\n copyEmail: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('', {\n value: $(e.currentTarget).data('email'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Email copied to clipboard.'\n });\n },\n fetchTimeCards: async function (data) {\n if (data == null || typeof this.options.onApprove !== 'function') {\n return;\n }\n\n let timeCards;\n if (data.timeCards != null) {\n timeCards = data.timeCards;\n } else if (data.idFilter != null || data.projectId != null) {\n timeCards = new PJQ.collections.timecards.TimeCards(null, {\n projectId: data.projectId,\n idFilter: data.idFilter\n });\n\n let dateNow = new Date(),\n parameters = {\n startDate: PJQ.helpers.dateHelpers.getDateString(this.options.timecardsView.startDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n endDate: PJQ.helpers.dateHelpers.getDateString(this.options.timecardsView.endDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n page: 1,\n pageSize: 2147483646,\n timeZoneOffset: dateNow.getTimezoneOffset(),\n projectId: timeCards.options.projectId,\n idFilter: timeCards.options.idFilter\n };\n\n await timeCards.fetch({\n type: 'GET',\n data: parameters\n });\n }\n\n return timeCards;\n }\n});\n\nPJQ.views.timecards.ProjectDataTable = PJQ.views.timecards.BaseDataTable.extend({\n events: {\n 'click i.project-toggle-row': 'childRowToggle',\n 'click .approve-project-time-cards': 'approveTimeCardsClicked',\n 'click .unapprove-project-time-cards': 'approveTimeCardsClicked',\n },\n getContextMenuItems: function () {\n return [\n {\n name: 'Approve Time Cards',\n iconClass: 'fal fa-calendar-check',\n onClick: _.bind(function (row) {\n this.approveTimeCards(null, row);\n }, this),\n isShown: _.bind(function (row) {\n return this.options.permissions.hasPermission('timeCards.canApprove');\n }, this)\n }\n ];\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [],\n includeColumns = ['projectId', 'projectName', 'address1', 'address2', 'city', 'state', 'zip', 'country', 'bidsDue', 'startDate', 'endDate', 'regularHours', 'overtimeHours', 'doubletimeHours'];\n\n if (!includeAllColumns) {\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n if (this.options.view === PJQ.constants.timecards.view.BY_PROJECT ||\n this.options.view === PJQ.constants.timecards.view.BY_CONTACT_PROJECT) {\n columns.push({\n \"columnData\": \"childData\",\n \"data\": null,\n \"title\": \"\",\n \"width\": \"20px\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '';\n }\n });\n }\n }\n let maxEmailWidth = $(window).width() > 1200 ? 225 : 100;\n\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'projectId':\n columns.push({\n \"columnData\": \"projectId\",\n \"data\": \"attributes.projectId\",\n \"title\": \"Project Id\"\n });\n break;\n case 'projectName':\n columns.push({\n \"columnData\": \"projectName\",\n \"data\": \"attributes.projectName\",\n \"title\": \"Project\"\n });\n break;\n case 'address1':\n columns.push({\n \"columnData\": \"address1\",\n \"data\": \"attributes.address1\",\n \"title\": \"Address 1\"\n });\n break;\n case 'address2':\n columns.push({\n \"columnData\": \"address2\",\n \"data\": \"attributes.address2\",\n \"title\": \"Address 2\"\n });\n break;\n case 'city':\n columns.push({\n \"columnData\": \"city\",\n \"data\": \"attributes.city\",\n \"title\": \"City\"\n });\n break;\n case 'state':\n columns.push({\n \"columnData\": \"state\",\n \"data\": \"attributes.state\",\n \"title\": \"State\"\n });\n break;\n case 'zip':\n columns.push({\n \"columnData\": \"zip\",\n \"data\": \"attributes.zip\",\n \"title\": \"Zip\"\n });\n break;\n case 'country':\n columns.push({\n \"columnData\": \"country\",\n \"data\": \"attributes.country\",\n \"title\": \"Country\"\n });\n break;\n case 'bidsDue':\n columns.push({\n \"columnData\": \"bidsDue\",\n \"data\": \"attributes.bidsDue\",\n \"title\": 'Bids Due',\n \"width\": '90px',\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('bidsDue')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }, this)\n });\n break;\n case 'startDate':\n columns.push({\n \"columnData\": \"startDate\",\n \"data\": \"attributes.startDate\",\n \"title\": 'Start Date',\n \"width\": '90px',\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n return (row.get('projectId') > 0) ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('startDate')), PJQ.helpers.dateHelpers.dateFormats.DATE) : 'N/A';\n }, this)\n });\n break;\n case 'endDate':\n columns.push({\n \"columnData\": \"endDate\",\n \"data\": \"attributes.endDate\",\n \"title\": 'End Date',\n \"width\": '90px',\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n return (row.get('projectId') > 0) ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('endDate')), PJQ.helpers.dateHelpers.dateFormats.DATE) : 'N/A';\n }, this)\n });\n break;\n case 'regularHours':\n columns.push({\n \"columnData\": \"regularHours\",\n \"data\": \"attributes.regularHours\",\n \"title\": 'Reg. Hours',\n \"width\": '50px',\n \"orderable\": true,\n \"className\": 'regularHours',\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.timecards.getFormattedTime(row.get('regularHours'));\n }, this)\n });\n break;\n case 'overtimeHours':\n columns.push({\n \"columnData\": \"overtimeHours\",\n \"data\": \"attributes.overtimeHours\",\n \"title\": 'OT Hours',\n \"width\": '50px',\n \"orderable\": true,\n \"className\": 'overtimeHours',\n \"visible\": this.options.timeCardSettings.get('enableOvertime'),\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.timecards.getFormattedTime(row.get('overtimeHours'));\n }, this)\n });\n break;\n case 'doubletimeHours':\n columns.push({\n \"columnData\": \"doubletimeHours\",\n \"data\": \"attributes.doubletimeHours\",\n \"title\": 'DT Hours',\n \"width\": '50px',\n \"orderable\": true,\n \"className\": 'doubletimeHours',\n \"visible\": this.options.timeCardSettings.get('enableDoubletime'),\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.timecards.getFormattedTime(row.get('doubletimeHours'));\n }, this)\n });\n break;\n }\n }, this));\n\n if (!includeAllColumns) {\n columns.push({\n \"title\": '',\n \"render\": _.bind(function (data, type, row) {\n let html = '';\n html += '
';\n\n if (this.options.permissions.hasPermission('timeCards.canApprove')) {\n html += row.get('approvedOn') ? '' : '';\n }\n\n html += '
';\n return html;\n }, this),\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"50px\",\n \"className\": \"text-center\"\n });\n }\n\n return columns;\n },\n getChildTableType: function () {\n if (this.options.view === PJQ.constants.timecards.view.BY_PROJECT)\n return PJQ.constants.timecards.view.BY_PROJECT_CONTACT;\n if (this.options.view === PJQ.constants.timecards.view.BY_CONTACT_PROJECT)\n return PJQ.constants.timecards.view.BY_CONTACT_PROJECT_TIMECARD;\n },\n getChildTableSettings: function () {\n return this.options.timecardsView.userSettings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n\n let fixedColumnsLeft = 1, fixedColumnsRight = 0;\n if (this.options.view === PJQ.constants.timecards.view.BY_CONTACT_PROJECT) {\n fixedColumnsLeft = 1;\n fixedColumnsRight = 1;\n }\n\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.timecardsView.userSettings;\n childOpts.colReorder = {\n fixedColumnsLeft: fixedColumnsLeft,\n fixedColumnsRight: fixedColumnsRight,\n realtime: false\n };\n childOpts.timecardsView = this.options.timecardsView;\n childOpts.onApprove = this.options.onApprove;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n childOpts.timeCardSettings = this.options.timeCardSettings;\n\n if (this.options.view === PJQ.constants.timecards.view.BY_PROJECT)\n return new PJQ.views.timecards.ContactDataTable(childOpts);\n if (this.options.view === PJQ.constants.timecards.view.BY_CONTACT_PROJECT)\n return new PJQ.views.timecards.TimeCardDataTable(childOpts);\n },\n getRowChildData: function (row) {\n let viewOptions = {\n view: this.getChildTableType(),\n projectId: row.data().get('projectId'),\n };\n\n if (this.options.view === PJQ.constants.timecards.view.BY_PROJECT)\n return new PJQ.collections.timecards.TimeCardContacts(null, viewOptions);\n if (this.options.view === PJQ.constants.timecards.view.BY_CONTACT_PROJECT) {\n viewOptions.idFilter = this.options.parentId;\n return new PJQ.collections.timecards.TimeCards(null, viewOptions);\n }\n },\n approveTimeCardsClicked: async function (e) {\n if (typeof this.options.onApprove !== 'function') {\n return;\n }\n\n let $target = $(e.currentTarget),\n row = this.getRow($target.closest('tr')),\n project = row.data();\n if (project.timeCards == null) {\n let loader = new PJQ.Loader($target);\n project.timeCards = await this.fetchTimeCards({\n projectId: project.get('projectId'),\n idFilter: this.options.parentId\n })\n loader.remove();\n }\n\n if (_.size(project.timeCards.models.filter((c) => {\n return c.get('approvedOn') == null;\n })) === 0) {\n PJQ.notifications.notify.warningNotify({\n message: 'This project has no time cards to approve for the selected dates'\n });\n return;\n }\n\n let approveNote;\n if (project.timeCards.options.idFilter != null) {\n approveNote = \"Are you sure you want to approve this contact's time cards for the selected project?\";\n } else {\n approveNote = \"Are you sure you want to approve this project's time cards for all contacts?\";\n }\n new PJQ.views.modals.YesNo({\n header: \"Approve Time Cards\",\n body: approveNote,\n onYes: _.bind(function () {\n this.options.onApprove(project.timeCards.models, true, () => {\n row.invalidate().draw();\n });\n }, this)\n });\n },\n approveTimeCards: async function (e, row) {\n if (typeof this.options.onApprove !== 'function') {\n return;\n }\n\n let $target = null;\n if (e != null) {\n $target = $(e.currentTarget);\n row = this.getRow($target.closest('tr'));\n }\n\n let project = row.data();\n if (project.timeCards == null) {\n let loader = null;\n if ($target != null) {\n loader = new PJQ.Loader($target);\n }\n\n project.timeCards = await this.fetchTimeCards({\n projectId: project.get('projectId'),\n idFilter: this.options.parentId\n })\n\n if (loader != null) {\n loader.remove();\n }\n }\n\n if (_.size(project.timeCards.models.filter((c) => {\n return c.get('approvedOn') == null;\n })) === 0) {\n PJQ.notifications.notify.warningNotify({\n message: 'This project has no time cards to approve for the selected dates'\n });\n return;\n }\n\n let approveNote;\n if (project.timeCards.options.idFilter != null) {\n approveNote = \"Are you sure you want to approve this contact's time cards for the selected project?\";\n } else {\n approveNote = \"Are you sure you want to approve this project's time cards for all contacts?\";\n }\n new PJQ.views.modals.YesNo({\n header: \"Approve Time Cards\",\n body: approveNote,\n onYes: _.bind(function () {\n this.options.onApprove(project.timeCards.models, true, () => {\n row.invalidate().draw();\n });\n }, this)\n });\n }\n});\n\nPJQ.views.timecards.ContactDataTable = PJQ.views.timecards.BaseDataTable.extend({\n events: {\n 'click i.contact-toggle-row': 'childRowToggle',\n 'click .approve-contact-time-cards': 'approveTimeCardsClicked',\n 'click .unapprove-contact-time-cards': 'approveTimeCardsClicked',\n },\n getContextMenuItems: function () {\n return [\n {\n name: 'Approve Time Cards',\n iconClass: 'fal fa-calendar-check',\n onClick: _.bind(function (row) {\n this.approveTimeCards(null, row);\n }, this),\n isShown: _.bind(function (row) {\n return this.options.permissions.hasPermission('timeCards.canApprove');\n }, this)\n }\n ];\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [],\n includeColumns = ['companyName', 'contactName', 'address1', 'address2', 'city', 'state', 'zip', 'country', 'phone', 'fax', 'cell', 'email', 'userTypeId', 'regularHours', 'overtimeHours', 'doubletimeHours'];\n\n if (!includeAllColumns) {\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n if (this.options.view === PJQ.constants.timecards.view.BY_CONTACT ||\n this.options.view === PJQ.constants.timecards.view.BY_PROJECT_CONTACT) {\n columns.push({\n \"columnData\": \"childData\",\n \"data\": null,\n \"title\": \"\",\n \"width\": \"20px\",\n \"orderable\": false,\n \"searchable\": false,\n \"defaultContent\": '',\n \"render\": function (data, type, row) {\n return '';\n }\n });\n }\n }\n let maxEmailWidth = $(window).width() > 1200 ? 225 : 100;\n\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'companyName':\n columns.push({\n \"columnData\": \"companyName\",\n \"data\": \"attributes.companyName\",\n \"title\": \"Company\"\n });\n break;\n case 'contactName':\n columns.push({\n \"columnData\": \"contactName\",\n \"data\": \"attributes.contactName\",\n \"title\": \"Contact\"\n });\n break;\n case 'address1':\n columns.push({\n \"columnData\": \"address1\",\n \"data\": \"attributes.address1\",\n \"title\": \"Address 1\"\n });\n break;\n case 'address2':\n columns.push({\n \"columnData\": \"address2\",\n \"data\": \"attributes.address2\",\n \"title\": \"Address 2\"\n });\n break;\n case 'city':\n columns.push({\n \"columnData\": \"city\",\n \"data\": \"attributes.city\",\n \"title\": \"City\"\n });\n break;\n case 'state':\n columns.push({\n \"columnData\": \"state\",\n \"data\": \"attributes.state\",\n \"title\": \"State\"\n });\n break;\n case 'zip':\n columns.push({\n \"columnData\": \"zip\",\n \"data\": \"attributes.zip\",\n \"title\": \"Zip\"\n });\n break;\n case 'country':\n columns.push({\n \"columnData\": \"country\",\n \"data\": \"attributes.country\",\n \"title\": \"Country\"\n });\n break;\n case 'phone':\n columns.push({\n \"columnData\": \"phone\",\n \"data\": \"attributes.phone\",\n \"title\": \"Phone\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('phone') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('phone')) : 'N/A');\n\n if (row.get('phone') !== '')\n html += '';\n\n html += '
' + phoneFormatted + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'cell':\n columns.push({\n \"columnData\": \"cell\",\n \"data\": \"attributes.cell\",\n \"title\": \"Cell\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('cell') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('cell')) : 'N/A');\n\n if (row.get('cell') !== '')\n html += '';\n\n html += '
' + phoneFormatted + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'fax':\n columns.push({\n \"columnData\": \"fax\",\n \"data\": \"attributes.fax\",\n \"title\": \"Fax\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('fax') ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('fax')) : 'N/A');\n\n if (row.get('fax') !== '')\n html += '';\n\n html += '
' + phoneFormatted + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'email':\n columns.push({\n \"columnData\": \"email\",\n \"data\": \"attributes.email\",\n \"title\": \"Email\",\n \"render\": function (data, type, row) {\n let html = '
',\n emailFormatted = (row.get('email') ? ('' + row.get('email') + '') : '');\n\n if (row.get('email') !== '')\n html += '';\n\n html += '
' + emailFormatted + '
';\n return html;\n }\n });\n break;\n case 'userTypeId':\n columns.push({\n \"columnData\": 'userTypeId',\n \"title\": 'Type',\n \"data\": 'attributes.userTypeId',\n \"render\": function (data, type, row) {\n let userType = _.filter(PJQ.app.session.userTypes.getByIsCompany(null), _.bind(function (userType) {\n return row.get('userTypeId') === userType.get('userTypeId');\n }, this))[0];\n\n return userType != null ? userType.get('name') : 'N/A';\n }\n });\n break;\n case 'regularHours':\n columns.push({\n \"columnData\": \"regularHours\",\n \"data\": \"attributes.regularHours\",\n \"title\": 'Reg. Hours',\n \"width\": '50px',\n \"orderable\": true,\n \"className\": 'regularHours',\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.timecards.getFormattedTime(row.get('regularHours'));\n }, this)\n });\n break;\n case 'overtimeHours':\n columns.push({\n \"columnData\": \"overtimeHours\",\n \"data\": \"attributes.overtimeHours\",\n \"title\": 'OT Hours',\n \"width\": '50px',\n \"orderable\": true,\n \"className\": 'overtimeHours',\n \"visible\": this.options.timeCardSettings.get('enableOvertime'),\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.timecards.getFormattedTime(row.get('overtimeHours'));\n }, this)\n });\n break;\n case 'doubletimeHours':\n columns.push({\n \"columnData\": \"doubletimeHours\",\n \"data\": \"attributes.doubletimeHours\",\n \"title\": 'DT Hours',\n \"width\": '50px',\n \"orderable\": true,\n \"className\": 'doubletimeHours',\n \"visible\": this.options.timeCardSettings.get('enableDoubletime'),\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.timecards.getFormattedTime(row.get('doubletimeHours'));\n }, this)\n });\n break;\n }\n }, this));\n\n if (!includeAllColumns) {\n columns.push({\n \"title\": '',\n \"render\": _.bind(function (data, type, row) {\n let html = '';\n html += '
';\n\n if (this.options.permissions.hasPermission('timeCards.canApprove')) {\n html += row.get('approvedOn') ? '' : '';\n }\n\n html += '
';\n return html;\n }, this),\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"50px\",\n \"className\": \"text-center\"\n });\n }\n\n return columns;\n },\n getChildTableType: function () {\n if (this.options.view === PJQ.constants.timecards.view.BY_CONTACT)\n return PJQ.constants.timecards.view.BY_CONTACT_PROJECT;\n if (this.options.view === PJQ.constants.timecards.view.BY_PROJECT_CONTACT)\n return PJQ.constants.timecards.view.BY_PROJECT_CONTACT_TIMECARD;\n },\n getChildTableSettings: function () {\n return this.options.timecardsView.userSettings.getSettings(this.getChildTableType());\n },\n getRowChildTable: function (childOpts) {\n\n let fixedColumnsLeft = 1, fixedColumnsRight = 0;\n if (this.options.view === PJQ.constants.timecards.view.BY_PROJECT_CONTACT) {\n fixedColumnsLeft = 1;\n fixedColumnsRight = 1;\n }\n\n childOpts.view = this.getChildTableType();\n childOpts.settings = this.getChildTableSettings();\n childOpts.userSettings = this.options.timecardsView.userSettings;\n childOpts.colReorder = {\n fixedColumnsLeft: fixedColumnsLeft,\n fixedColumnsRight: fixedColumnsRight,\n realtime: false\n };\n childOpts.timecardsView = this.options.timecardsView;\n childOpts.onApprove = this.options.onApprove;\n childOpts.parentDataTable = this;\n childOpts.dom = 't';\n childOpts.timeCardSettings = this.options.timeCardSettings;\n\n if (this.options.view === PJQ.constants.timecards.view.BY_CONTACT)\n return new PJQ.views.timecards.ProjectDataTable(childOpts);\n if (this.options.view === PJQ.constants.timecards.view.BY_PROJECT_CONTACT)\n return new PJQ.views.timecards.TimeCardDataTable(childOpts);\n },\n getRowChildData: function (row) {\n let viewOptions = {\n view: this.getChildTableType(),\n idFilter: row.data().get('id'),\n };\n\n if (this.options.view === PJQ.constants.timecards.view.BY_CONTACT)\n return new PJQ.collections.timecards.TimeCardProjects(null, viewOptions);\n if (this.options.view === PJQ.constants.timecards.view.BY_PROJECT_CONTACT) {\n viewOptions.projectId = this.options.parentId;\n return new PJQ.collections.timecards.TimeCards(null, viewOptions);\n }\n },\n approveTimeCardsClicked: async function (e, row) {\n return await this.approveTimeCards(e);\n },\n approveTimeCards: async function (e, row) {\n if (typeof this.options.onApprove !== 'function') {\n return;\n }\n\n let $target = null;\n if (e != null) {\n $target = $(e.currentTarget);\n row = this.getRow($target.closest('tr'));\n }\n\n let contact = row.data();\n if (contact.timeCards == null) {\n let loader = null;\n if ($target != null) {\n loader = new PJQ.Loader($target);\n }\n\n contact.timeCards = await this.fetchTimeCards({\n projectId: this.options.parentId,\n idFilter: contact.get('id')\n })\n\n if (loader != null) {\n loader.remove();\n }\n }\n\n if (_.size(contact.timeCards.models.filter((c) => {\n return c.get('approvedOn') == null;\n })) === 0) {\n PJQ.notifications.notify.warningNotify({\n message: 'This contact has no time cards to approve for the selected dates'\n });\n return;\n }\n\n new PJQ.views.modals.YesNo({\n header: \"Approve Time Cards\",\n body: \"Are you sure you want to approve this contact's time cards for \" + (contact.timeCards.options.projectId > 0 ? 'the selected project' : 'all projects') + \"?\",\n onYes: () => {\n this.options.onApprove(contact.timeCards.models, true, () => {\n row.invalidate().draw();\n });\n }\n });\n }\n});\n\nPJQ.views.timecards.TimeCardDataTable = PJQ.views.timecards.BaseDataTable.extend({\n events: {\n 'click i.timecard-toggle-row': 'childRowToggle',\n 'click .view-time-card': 'viewTimeCardClicked',\n 'click .delete-time-card': 'deleteTimeCardClicked',\n 'click .approve-time-card': 'approveTimeCardClicked',\n 'click .unapprove-time-card': 'approveTimeCardClicked',\n 'click .select-all-timecards': 'selectAll',\n 'click .select-timecard': 'selectTimeCard'\n },\n onRowDoubleClick: function (row) {\n this.viewTimeCard(row);\n },\n getContextMenuItems: function () {\n return [\n {\n name: 'Approve Time Card',\n iconClass: 'fal fa-calendar-check',\n onClick: _.bind(function (row) {\n this.approveTimeCard(row);\n }, this),\n isShown: _.bind(function (row) {\n return ((PJQ.app.session.contact == null && (this.options.permissions.hasPermission('timeCards.canApprove') || this.options.permissions.hasPermission('timeCards.isAdmin'))) && !row.data().get('approvedOn'));\n }, this)\n },\n {\n name: 'Un-Approve Time Card',\n iconClass: 'fal fa-calendar-times',\n onClick: _.bind(function (row) {\n this.approveTimeCard(row);\n }, this),\n isShown: _.bind(function (row) {\n return ((PJQ.app.session.contact == null && (this.options.permissions.hasPermission('timeCards.canApprove') || this.options.permissions.hasPermission('timeCards.isAdmin'))) && _.size(row.data().get('approvedOn')) > 0);\n }, this)\n },\n {\n name: 'View Time Card',\n iconClass: 'fal fa-arrow-alt-from-left',\n onClick: _.bind(function (row) {\n this.viewTimeCard(row);\n }, this),\n isShown: _.bind(function (row) {\n return true;\n }, this)\n },\n {\n name: 'Delete Time Card',\n iconClass: 'fal fa-trash',\n onClick: _.bind(function (row) {\n this.deleteTimeCard(row);\n }, this),\n isShown: _.bind(function (row) {\n return (!row.data().get('approvedOn') && (this.options.permissions.hasPermission('timeCards.isAdmin')));\n }, this)\n }\n ];\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [], includeColumns = [];\n\n if (this.options.settings.view === PJQ.constants.timecards.view.BY_TIMECARD || this.options.settings.view === PJQ.constants.timecards.view.PROJECTWALL_BY_TIMECARD)\n includeColumns = ['projectId', 'projectName', 'projectAddress1', 'projectAddress2', 'projectCity', 'projectState', 'projectZip', 'projectCountry', 'projectBidsDue', 'projectStartDate', 'projectEndDate', 'companyName', 'contactName', 'contactAddress1', 'contactAddress2', 'contactCity', 'contactState', 'contactZip', 'contactCountry', 'contactPhone', 'contactCell', 'contactFax', 'contactEmail', 'contactUserTypeId'];\n\n includeColumns.push(...['date', 'notes', 'regularHours', 'overtimeHours', 'doubletimeHours', 'approvedOn']);\n\n if (!includeAllColumns) {\n if (_.size(this.options.settings.columns) > 0)\n includeColumns = this.options.settings.columns;\n else\n includeColumns = this.options.settings.columnsDefault;\n\n if (this.options.timecardsView && (this.options.timecardsView.selectionMode !== PJQ.constants.timecards.selectionMode.NONE)) {\n columns.push({\n \"columnData\": '',\n \"title\": '
',\n \"width\": \"20px\",\n \"data\": \"null\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(this.renderTimeCardSelect, this)\n });\n }\n\n columns.push({\n \"columnData\": 'icons',\n \"title\": \"\",\n \"width\": \"20px\",\n \"data\": \"null\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data, type, row) {\n let icons = [];\n\n if (row.get('approvedOn')) {\n icons.push(\"\");\n }\n\n return '
' + icons.join('') + '
';\n }, this)\n });\n\n }\n let maxEmailWidth = $(window).width() > 1200 ? 225 : 100;\n\n _.each(includeColumns, _.bind(function (columnName) {\n switch (columnName) {\n case 'projectId':\n columns.push({\n \"columnData\": \"projectId\",\n \"data\": \"attributes.project.projectId\",\n \"title\": \"Project Id\"\n });\n break;\n case 'projectName':\n columns.push({\n \"columnData\": \"projectName\",\n \"data\": \"attributes.project.projectName\",\n \"title\": \"Project\"\n });\n break;\n case 'projectAddress1':\n columns.push({\n \"columnData\": \"projectAddress1\",\n \"data\": \"attributes.project.address1\",\n \"title\": (includeAllColumns ? 'Project ' : '') + \"Address 1\"\n });\n break;\n case 'projectAddress2':\n columns.push({\n \"columnData\": \"projectAddress2\",\n \"data\": \"attributes.project.address2\",\n \"title\": (includeAllColumns ? 'Project ' : '') + \"Address 2\"\n });\n break;\n case 'projectCity':\n columns.push({\n \"columnData\": \"projectCity\",\n \"data\": \"attributes.project.city\",\n \"title\": (includeAllColumns ? 'Project ' : '') + \"City\"\n });\n break;\n case 'projectState':\n columns.push({\n \"columnData\": \"projectState\",\n \"data\": \"attributes.project.state\",\n \"title\": (includeAllColumns ? 'Project ' : '') + \"State\"\n });\n break;\n case 'projectZip':\n columns.push({\n \"columnData\": \"projectZip\",\n \"data\": \"attributes.project.zip\",\n \"title\": (includeAllColumns ? 'Project ' : '') + \"Zip\"\n });\n break;\n case 'projectCountry':\n columns.push({\n \"columnData\": \"projectCountry\",\n \"data\": \"attributes.project.country\",\n \"title\": (includeAllColumns ? 'Project ' : '') + \"Country\"\n });\n break;\n case 'projectBidsDue':\n columns.push({\n \"columnData\": \"projectBidsDue\",\n \"data\": \"attributes.project.bidsDue\",\n \"title\": 'Bids Due',\n \"width\": '90px',\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('project').bidsDue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }, this)\n });\n break;\n case 'projectStartDate':\n columns.push({\n \"columnData\": \"projectStartDate\",\n \"data\": \"attributes.project.startDate\",\n \"title\": 'Start Date',\n \"width\": '90px',\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n return (row.get('project').projectId > 0) ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('project').startDate), PJQ.helpers.dateHelpers.dateFormats.DATE) : 'N/A';\n }, this)\n });\n break;\n case 'projectEndDate':\n columns.push({\n \"columnData\": \"projectEndDate\",\n \"data\": \"attributes.project.endDate\",\n \"title\": 'End Date',\n \"width\": '90px',\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n return (row.get('project').projectId > 0) ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('project').endDate), PJQ.helpers.dateHelpers.dateFormats.DATE) : 'N/A';\n }, this)\n });\n break;\n case 'companyName':\n columns.push({\n \"columnData\": \"companyName\",\n \"data\": \"attributes.contact.companyName\",\n \"title\": \"Company\"\n });\n break;\n case 'contactName':\n columns.push({\n \"columnData\": \"contactName\",\n \"data\": \"attributes.contact.contactName\",\n \"title\": \"Contact\"\n });\n break;\n case 'contactAddress1':\n columns.push({\n \"columnData\": \"contactAddress1\",\n \"data\": \"attributes.contact.address1\",\n \"title\": \"Address 1\"\n });\n break;\n case 'contactAddress2':\n columns.push({\n \"columnData\": \"contactAddress2\",\n \"data\": \"attributes.contact.address2\",\n \"title\": \"Address 2\"\n });\n break;\n case 'contactCity':\n columns.push({\n \"columnData\": \"contactCity\",\n \"data\": \"attributes.contact.city\",\n \"title\": \"City\"\n });\n break;\n case 'contactState':\n columns.push({\n \"columnData\": \"contactState\",\n \"data\": \"attributes.contact.state\",\n \"title\": \"State\"\n });\n break;\n case 'contactZip':\n columns.push({\n \"columnData\": \"contactZip\",\n \"data\": \"attributes.contact.zip\",\n \"title\": \"Zip\"\n });\n break;\n case 'contactCountry':\n columns.push({\n \"columnData\": \"contactCountry\",\n \"data\": \"attributes.contact.country\",\n \"title\": \"Country\"\n });\n break;\n case 'contactPhone':\n columns.push({\n \"columnData\": \"contactPhone\",\n \"data\": \"attributes.contact.phone\",\n \"title\": \"Phone\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('contact').phone ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('contact').phone) : 'N/A');\n\n if (row.get('contact').phone !== '')\n html += '';\n\n html += '
' + phoneFormatted + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'contactCell':\n columns.push({\n \"columnData\": \"contactCell\",\n \"data\": \"attributes.contact.cell\",\n \"title\": \"Cell\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('contact').cell ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('contact').cell) : 'N/A');\n\n if (row.get('contact').cell !== '')\n html += '';\n\n html += '
' + phoneFormatted + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'contactFax':\n columns.push({\n \"columnData\": \"contactFax\",\n \"data\": \"attributes.contact.fax\",\n \"title\": \"Fax\",\n \"width\": this.options.phoneWidth,\n \"render\": _.bind(function (data, type, row) {\n let html = '
',\n phoneFormatted = (row.get('contact').fax ? PJQ.helpers.formatHelpers.formatPhoneNumber(row.get('contact').fax) : 'N/A');\n\n if (row.get('contact').fax !== '')\n html += '';\n\n html += '
' + phoneFormatted + '
';\n html += '
';\n return html;\n }, this)\n });\n break;\n case 'contactEmail':\n columns.push({\n \"columnData\": \"contactEmail\",\n \"data\": \"attributes.contact.email\",\n \"title\": \"Email\",\n \"render\": function (data, type, row) {\n let html = '
',\n emailFormatted = (row.get('contact').email ? ('' + row.get('contact').email + '') : '');\n\n if (row.get('contact').email !== '')\n html += '';\n\n html += '
' + emailFormatted + '
';\n return html;\n }\n });\n break;\n case 'contactUserTypeId':\n columns.push({\n \"columnData\": 'contactUserTypeId',\n \"title\": 'Type',\n \"data\": 'userTypeId',\n \"orderable\": false,\n \"render\": function (data, type, row) {\n let userType = _.filter(PJQ.app.session.userTypes.getByIsCompany(null), _.bind(function (userType) {\n return row.get('contact').userTypeId === userType.get('userTypeId');\n }, this))[0];\n\n return userType != null ? userType.get('name') : 'N/A';\n }\n });\n break;\n case 'date':\n columns.push({\n \"columnData\": \"date\",\n \"data\": \"attributes.date\",\n \"title\": \"Date\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('date')), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }, this)\n });\n break;\n case 'notes':\n columns.push({\n \"columnData\": \"notes\",\n \"data\": \"attributes.notes\",\n \"orderable\": false,\n \"title\": \"Notes\",\n \"width\": \"200px\"\n });\n break;\n case 'regularHours':\n columns.push({\n \"columnData\": \"regularHours\",\n \"data\": \"attributes.regularHours\",\n \"title\": 'Reg. Hours',\n \"width\": '50px',\n \"orderable\": true,\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.timecards.getFormattedTime(row.get('regularHours'));\n }, this)\n });\n break;\n case 'overtimeHours':\n columns.push({\n \"columnData\": \"overtimeHours\",\n \"data\": \"attributes.overtimeHours\",\n \"title\": 'OT Hours',\n \"width\": '50px',\n \"orderable\": true,\n \"visible\": this.options.timeCardSettings.get('enableOvertime'),\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.timecards.getFormattedTime(row.get('overtimeHours'));\n }, this)\n });\n break;\n case 'doubletimeHours':\n columns.push({\n \"columnData\": \"doubletimeHours\",\n \"data\": \"attributes.doubletimeHours\",\n \"title\": 'DT Hours',\n \"width\": '50px',\n \"orderable\": true,\n \"visible\": this.options.timeCardSettings.get('enableDoubletime'),\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.timecards.getFormattedTime(row.get('doubletimeHours'));\n }, this)\n });\n break;\n case 'approvedOn':\n columns.push({\n \"columnData\": \"approvedOn\",\n \"data\": \"attributes.approvedOn\",\n \"title\": \"Approved On\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n return row.get('approvedOn') ? PJQ.helpers.dateHelpers.getDateString(new Date(row.get('approvedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, false) : '';\n }, this)\n });\n break;\n }\n }, this));\n\n if (!includeAllColumns) {\n columns.push({\n \"title\": '',\n \"render\": _.bind(function (data, type, row) {\n let html = '';\n html += '
';\n\n if (PJQ.app.session.contact == null && (this.options.permissions.hasPermission('timeCards.canApprove') || this.options.permissions.hasPermission('timeCards.isAdmin')))\n html += row.get('approvedOn') ? '' : '';\n\n html += '';\n\n if (!row.get('approvedOn') && (this.options.permissions.hasPermission('timeCards.isAdmin')))\n html += '';\n\n html += '
';\n return html;\n }, this),\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"120px\",\n \"className\": \"text-center\"\n });\n }\n\n return columns;\n },\n selectAll: function (e) {\n let isChecked = $(e.currentTarget).prop('checked');\n\n if (this.options.view === PJQ.constants.timecards.view.BY_TIMECARD) {\n if (isChecked) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'ids'\n }\n ], [\n {\n parameter: 'searchFor',\n value: this.options.timecardsView.$('.input-search').val()\n },\n {\n parameter: 'startDate',\n value: PJQ.helpers.dateHelpers.getDateString(this.options.timecardsView.startDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD)\n },\n {\n parameter: 'endDate',\n value: PJQ.helpers.dateHelpers.getDateString(this.options.timecardsView.endDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD)\n }\n ]),\n isAPIv2: true\n }).get().done(_.bind(function (response) {\n this.options.timecardsView.addSelectedTimeCards(response.timeCardIds);\n }, this));\n } else {\n this.options.timecardsView.selectedTimeCards = [];\n }\n } else {\n let timeCardIds = [];\n this.dataTable.rows().data().each(_.bind(function (data) {\n timeCardIds.push(data.get('timeCardId'));\n }));\n\n if (isChecked)\n this.options.timecardsView.addSelectedTimeCards(timeCardIds);\n else\n this.options.timecardsView.removeSelectedTimeCards(timeCardIds);\n }\n\n this.dataTable.rows().invalidate().draw(false);\n },\n selectTimeCard: function (e) {\n let isChecked = $(e.currentTarget).prop('checked'), row = this.getRow($(e.currentTarget).closest('tr'));\n\n if (isChecked)\n this.options.timecardsView.addSelectedTimeCards([row.data().get('timeCardId')]);\n else\n this.options.timecardsView.removeSelectedTimeCards([row.data().get('timeCardId')]);\n },\n renderTimeCardSelect: function (data, type, row) {\n let isSelected = (this.options.timecardsView.selectedTimeCards.indexOf(row.get('timeCardId')) !== -1);\n\n let html = '
' +\n '' +\n '
' +\n '
';\n\n return (html);\n },\n captureSignature: function (callback) {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_TIMECARDS_SIGNATURE)) {\n new PJQ.views.signatures.SignatureSubmitModal({\n headerSubText: \"Sign off on your time card changes\",\n onSubmit: _.bind(function (signature, cb) {\n cb();\n callback(signature ? signature : \"\");\n }, this)\n });\n } else {\n callback(null);\n }\n },\n viewTimeCard: function (row) {\n let timeCard = new PJQ.models.timecards.TimeCard({timeCardId: row.data().get('timeCardId')}, {\n context: row.data().get('context')\n });\n\n timeCard.fetch({\n success: _.bind(function () {\n this.originalTimeCard = {\n regularHours: timeCard.get('regularHours'),\n overtimeHours: timeCard.get('overtimeHours'),\n doubletimeHours: timeCard.get('doubletimeHours')\n };\n\n let editModal = new PJQ.views.timecards.TimeCardDetailsModal({\n project: this.options.project,\n settings: this.options.timeCardSettings,\n permissions: PJQ.app.session.project ? PJQ.app.session.project.permissions : PJQ.app.session.systemPermissions,\n model: timeCard,\n onSave: _.bind(function () {\n let fnSave = _.bind(function (signature) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards',\n },\n {\n endpoint: 'batch'\n }\n ]),\n data: {\n rows: [timeCard],\n signature: signature\n },\n isAPIv2: true\n }).post().success(_.bind(function (data) {\n row.data().set('notes', timeCard.get('notes'));\n row.data().set('regularHours', timeCard.get('regularHours'));\n row.data().set('overtimeHours', timeCard.get('overtimeHours'));\n row.data().set('doubletimeHours', timeCard.get('doubletimeHours'));\n row.data().set('approvedOn', timeCard.get('approvedOn'));\n\n row.invalidate().draw(false);\n let offsets = {\n regularHours: timeCard.get('regularHours') - this.originalTimeCard.regularHours,\n overtimeHours: timeCard.get('overtimeHours') - this.originalTimeCard.overtimeHours,\n doubletimeHours: timeCard.get('doubletimeHours') - this.originalTimeCard.doubletimeHours\n };\n this.updateParentRows(offsets, row);\n\n PJQ.notifications.notify.successNotify({\n message: 'Time Card saved successfully'\n });\n }, this));\n }, this);\n\n if (timeCard.get('id') === -PJQ.app.session.user.id) {\n this.captureSignature(_.bind(function (signature) {\n fnSave(signature);\n editModal.removeModal();\n }, this));\n } else {\n fnSave();\n editModal.removeModal();\n }\n return false;\n }, this),\n onDelete: _.bind(function () {\n this.deleteTimeCard(row, true);\n }, this)\n });\n }, this),\n });\n },\n viewTimeCardClicked: function (e) {\n let row = this.getRow($(e.currentTarget).closest('tr'));\n this.viewTimeCard(row);\n },\n updateParentRows: function (offsets, row) {\n if (this.options.view === PJQ.constants.timecards.view.BY_CONTACT_PROJECT_TIMECARD ||\n this.options.view === PJQ.constants.timecards.view.BY_PROJECT_CONTACT_TIMECARD) {\n let parentTR = this.options.parentDataTable ? $(row.node()).parent().closest('tr').prev() : null,\n parentRow = this.options.parentDataTable ? this.options.parentDataTable.getRow(parentTR) : null;\n\n if (parentRow !== null) {\n parentRow.data().set('regularHours', parentRow.data().get('regularHours') + offsets.regularHours);\n parentRow.data().set('overtimeHours', parentRow.data().get('overtimeHours') + offsets.overtimeHours);\n parentRow.data().set('doubletimeHours', parentRow.data().get('doubletimeHours') + offsets.doubletimeHours);\n parentRow.invalidate().draw(false);\n\n let grandParentTR = $(parentRow.node()).parent().closest('tr').prev(),\n grandParentRow = this.options.parentDataTable.options.parentDataTable.getRow(grandParentTR);\n grandParentRow.data().set('regularHours', grandParentRow.data().get('regularHours') + offsets.regularHours);\n grandParentRow.data().set('overtimeHours', grandParentRow.data().get('overtimeHours') + offsets.overtimeHours);\n grandParentRow.data().set('doubletimeHours', grandParentRow.data().get('doubletimeHours') + offsets.doubletimeHours);\n grandParentTR.find('.regularHours').text(PJQ.helpers.timecards.getFormattedTime(grandParentRow.data().get('regularHours')));\n grandParentTR.find('.overtimeHours').text(PJQ.helpers.timecards.getFormattedTime(grandParentRow.data().get('overtimeHours')));\n grandParentTR.find('.doubletimeHours').text(PJQ.helpers.timecards.getFormattedTime(grandParentRow.data().get('doubletimeHours')));\n }\n }\n },\n deleteTimeCard: function (row, force) {\n let fn = _.bind(function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards',\n value: row.data().get('timeCardId')\n }\n ]),\n isAPIv2: true\n }).delete().done(_.bind(function (response) {\n let offsets = {\n regularHours: -row.data().get('regularHours'),\n overtimeHours: -row.data().get('overtimeHours'),\n doubletimeHours: -row.data().get('doubletimeHours'),\n };\n this.updateParentRows(offsets, row);\n row.remove().draw();\n }, this));\n }, this);\n\n if (force)\n fn();\n else {\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Time Card\",\n body: \"Do you want to delete this Time Card?\",\n onDelete: _.bind(function () {\n fn();\n }, this)\n });\n }\n },\n deleteTimeCardClicked: function (e) {\n let row = this.getRow($(e.currentTarget).closest('tr'));\n this.deleteTimeCard(row);\n },\n approveTimeCardClicked: function (e) {\n let row = this.getRow($(e.currentTarget).closest('tr'));\n this.approveTimeCard(row);\n },\n approveTimeCard: function (row) {\n let timeCard = row.data(),\n approve = timeCard.get('approvedOn') == null,\n action = (approve ? 'Approve' : 'Un-Approve');\n if (typeof this.options.onApprove === 'function') {\n new PJQ.views.modals.YesNo({\n header: action + \" Time Card\",\n body: \"Are you sure you want to \" + action.toLowerCase() + \" this time card?\",\n onYes: _.bind(function () {\n this.options.onApprove(row.data(), approve, () => {\n row.invalidate().draw();\n });\n }, this)\n });\n }\n }\n});\n\n// Data Entry Datatables\nPJQ.views.timecards.TimeCardDataEntryTable = PJQ.views.timecards.BaseDataTable.extend({\n defaults: {\n isHideSearch: true,\n order: [],\n dom: 't',\n pageLength: 5,\n language: {\n zeroRecords: \"No Time Cards to edit\"\n },\n drawCallback: _.bind(function (settings) {\n PJQ.helpers.inputHelpers.inputMaskDecimal(this.$('.input-regular-hours'), 2);\n PJQ.helpers.inputHelpers.inputMaskDecimal(this.$('.input-overtime-hours'), 2);\n PJQ.helpers.inputHelpers.inputMaskDecimal(this.$('.input-doubletime-hours'), 2);\n }, this),\n },\n events: {\n 'click i.timecard-dataentry-toggle-row': 'childRowToggle',\n 'change .input-notes': 'valueChanged',\n 'change .input-regular-hours': 'valueChanged',\n 'change .input-overtime-hours': 'valueChanged',\n 'change .input-doubletime-hours': 'valueChanged',\n 'click .delete-time-card': 'deleteTimeCard'\n },\n getColumns: function (includeAllColumns = false) {\n let columns = [];\n\n if (this.options.groupByColumn === PJQ.constants.timecards.timeCardGroupBy.DATE) {\n columns.push({\n \"data\": \"attributes.contact.companyName\",\n \"title\": \"Company\",\n \"orderable\": false\n });\n\n columns.push({\n \"data\": \"attributes.contact.contactName\",\n \"title\": \"Contact\",\n \"orderable\": false\n });\n }\n\n if (this.options.groupByColumn === PJQ.constants.timecards.timeCardGroupBy.CONTACT) {\n columns.push({\n \"data\": \"attributes.date\",\n \"title\": \"Date\",\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n return PJQ.helpers.dateHelpers.getDateString(row.get('date'), PJQ.helpers.dateHelpers.dateFormats.DATE_YMD, false);\n }, this)\n },\n );\n\n }\n\n columns.push({\n \"title\": \"Notes\",\n \"orderable\": false,\n \"width\": '200px',\n \"render\": _.bind(function (data, type, row) {\n if (!row.get('approvedOn')) {\n return '';\n } else {\n return row.get('notes');\n }\n }, this)\n });\n\n columns.push({\n \"title\": \"Reg.\",\n \"width\": '50px',\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let value = PJQ.helpers.formatHelpers.formatCurrency(row.get('regularHours'), 2, false);\n if (!row.get('approvedOn')) {\n return '';\n } else {\n return value;\n }\n }, this)\n });\n columns.push({\n \"title\": \"OT\",\n \"width\": '50px',\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let value = PJQ.helpers.formatHelpers.formatCurrency(row.get('overtimeHours'), 2, false);\n if (!row.get('approvedOn')) {\n return '';\n } else {\n return value;\n }\n }, this)\n });\n columns.push({\n \"title\": \"DT\",\n \"width\": '50px',\n \"orderable\": false,\n \"render\": _.bind(function (data, type, row) {\n let value = PJQ.helpers.formatHelpers.formatCurrency(row.get('doubletimeHours'), 2, false);\n if (!row.get('approvedOn')) {\n return '';\n } else {\n return value;\n }\n }, this)\n });\n\n columns.push({\n \"title\": '',\n \"render\": _.bind(function (data, type, row) {\n let html = '';\n html += '
';\n\n if (!row.get('approvedOn') &&\n ((PJQ.app.session.contact == null && (this.options.permissions.hasPermission('timeCards.canAdd') || this.options.permissions.hasPermission('timeCards.isAdmin'))) ||\n (PJQ.app.session.contact && this.options.permissions.hasPermission('timeCards.canAdd')))\n ) {\n if (!PJQ.app.session.contact || !row.get('timeCardId'))\n html += '';\n }\n html += '
';\n return html;\n }, this),\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"80px\",\n \"className\": \"text-center\"\n });\n\n if (!includeAllColumns) {\n\n }\n\n return columns;\n },\n valueChanged: function (e) {\n let row = this.getRow($(e.currentTarget).closest('tr')[0]),\n fieldName = $(e.currentTarget).data('field'),\n value = ($(e.currentTarget).hasClass('input-notes')) ? $(e.currentTarget).val() : parseInt(parseFloat($(e.currentTarget).val()) * 100);\n\n row.data().set(fieldName, value);\n\n if (fieldName !== 'notes')\n $(e.currentTarget).val(PJQ.helpers.formatHelpers.formatCurrency(row.data().get(fieldName), 2, false));\n },\n deleteTimeCard: function (e) {\n let row = this.getRow($(e.currentTarget).closest('tr')[0]);\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Time Card\",\n body: \"Do you want to delete this Time Card?\" + (this.options.timecardsModal.options.timeCard == null && !row.data().isNew() ? '

Note: You will need to click Save after finishing all editing in order to save your changes.' : ''),\n onDelete: _.bind(function () {\n\n if (this.options.timecardsModal.options.timeCard === null) {\n if (row.data().isNew()) {\n this.options.timecardsModal.model.remove([row.data()]);\n row.remove().draw();\n } else {\n row.data().set('deletedOn', new Date());\n row.remove().draw();\n }\n } else {\n row.data().set('deletedOn', new Date());\n this.options.timecardsModal.saveTimeCards(null, true);\n }\n }, this)\n });\n }\n});","PJQ.views.timecards.TimeCardDetailsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'modal-manage-timecard'),\n subTemplates: {\n lineItems: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'timecard-line-items')\n },\n minWidth: '800px',\n onSave: _.noop(),\n model: null,\n canApprove: false,\n canDelete: false\n },\n events: {\n 'click .timecard-save': 'saveClicked',\n 'click .timecard-delete': 'deleteClicked',\n 'click .timecard-approve': 'approveClicked',\n 'keyup .overtime-hours, .regular-hours, .doubletime-hours': 'hoursChanged',\n 'click .btn-view-locations': 'viewTimecardLocations'\n },\n beforeModalCreated: function () {\n if (this.model != null && (this.options.project == null || this.options.project.id !== this.model.get('project').id)) {\n this.options.project = new PJQ.models.projects.Project(this.model.get('project'));\n }\n\n let fnFetch = _.bind(function () {\n this.isFetched = true;\n this.render();\n }, this)\n\n if(this.options.project.id <= 0) {\n this.options.permissions = PJQ.app.session.systemPermissions;\n fnFetch();\n } else if (!this.options.project.isFetched) {\n this.options.project.fetch({\n success: _.bind(function () {\n this.options.permissions = this.options.project.permissions\n fnFetch();\n }, this)\n })\n } else {\n this.options.permissions = this.options.project.permissions;\n fnFetch();\n }\n },\n beforeRender: function () {\n if (this.isFetched) {\n this.options.canApprove = this.options.permissions.hasPermission('timeCards.canApprove') || this.options.permissions.hasPermission('timeCards.isAdmin');\n this.options.canDelete = this.model.get('approvedOn') == null && this.options.permissions.hasPermission('timeCards.isAdmin');\n this.options.canEdit = this.model.get('approvedOn') == null && this.options.permissions.hasPermission('timeCards.canAdd');\n this.options.enableOvertime = this.options.settings.get('enableOvertime');\n this.options.enableDoubletime = this.options.settings.get('enableDoubletime');\n this.options.enableLineItems = this.options.settings.get('enableLineItems');\n this.options.enableClockIn = this.options.settings.get('enableClockIn');\n }\n },\n renderData: function () {\n return {\n model: this.model,\n project: this.options.project,\n settings: this.options.settings,\n canEdit: this.options.canEdit,\n canApprove: this.options.canApprove,\n canDelete: this.options.canDelete,\n enableOvertime: this.options.enableOvertime,\n enableDoubletime: this.options.enableDoubletime,\n enableLineItems: this.options.enableLineItems,\n enableClockIn: this.options.enableClockIn,\n canViewLocationMap: (this.model.get('latitudeIn') && this.model.get('longitudeIn')) || (this.model.get('latitudeOut') && this.model.get('longitudeOut'))\n };\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'textarea'\n ]\n });\n\n if (this.options.enableLineItems) {\n this.renderLineItems();\n } else {\n this.$('.regular-hours').focus().select();\n }\n this.renderInputs();\n this.renderTotals();\n },\n renderLineItems: function () {\n new PJQ.views.timecards.LineItemsView({\n el: this.$('.line-items-outer'),\n model: this.model,\n project: this.options.project,\n settings: this.options.settings,\n onLineItemChanged: () => {\n this.renderTotals();\n }\n });\n },\n renderInputs: function () {\n this.$('.regular-hours').val(PJQ.helpers.formatHelpers.minutesToHHMM(this.model.get('regularHours')));\n this.$('.overtime-hours').val(PJQ.helpers.formatHelpers.minutesToHHMM(this.model.get('overtimeHours')));\n this.$('.doubletime-hours').val(PJQ.helpers.formatHelpers.minutesToHHMM(this.model.get('doubletimeHours')));\n PJQ.helpers.inputHelpers.inputMaskHours(this.$('.input-hours'));\n\n if(this.options.enableClockIn) {\n new PJQ.inputs.Datepicker({\n el: this.$('.time-in'),\n isTimeOnly: true,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE_TIME,\n defaultDate: this.model.get('timeIn')\n },\n onChange: (value) => {\n this.model.set('timeIn', value);\n this.renderTotals();\n }\n });\n\n new PJQ.inputs.Datepicker({\n el: this.$('.time-out'),\n isTimeOnly: true,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE_TIME,\n defaultDate: this.model.get('timeOut')\n },\n onChange: (value) => {\n this.model.set('timeOut', value);\n this.renderTotals();\n }\n });\n }\n },\n renderTotals: function () {\n if(!this.options.enableClockIn) {\n this.$('.total-regular-hours').text(PJQ.helpers.formatHelpers.minutesToHHMM(this.model.get('regularHours')));\n } else {\n let minutes = 0;\n if(this.options.enableLineItems){\n _.each(this.model.lineItems.models, function(lineItem){\n if(lineItem.get('timeIn') != null && lineItem.get('timeOut') != null) {\n minutes += PJQ.helpers.dateHelpers.getDateMinutesDiff(new Date(lineItem.get('timeOut')), new Date(lineItem.get('timeIn')));\n }\n });\n }\n else if(this.model.get('timeIn') != null && this.model.get('timeOut') != null){\n minutes = PJQ.helpers.dateHelpers.getDateMinutesDiff(new Date(this.model.get('timeOut')), new Date(this.model.get('timeIn')));\n }\n this.$('.total-regular-hours').text(minutes > 0 ? PJQ.helpers.formatHelpers.minutesToHHMM(minutes) : '00:00');\n }\n\n this.$('.total-overtime-hours').text(PJQ.helpers.formatHelpers.minutesToHHMM(this.model.get('overtimeHours')));\n this.$('.total-doubletime-hours').text(PJQ.helpers.formatHelpers.minutesToHHMM(this.model.get('doubletimeHours')));\n },\n hoursChanged: function (e) {\n let $target = $(e.currentTarget),\n type = $target.data('type'),\n minutes = PJQ.helpers.formatHelpers.minutesFromHHMM($target.val());\n\n this.model.set(type, minutes);\n this.renderTotals();\n },\n saveClicked: function () {\n this.model.set('lineItems', this.model.lineItems.toJSON());\n\n if (typeof this.options.onSave === 'function') {\n if (this.options.onSave() !== false) {\n this.removeModal();\n }\n } else {\n this.removeModal();\n }\n },\n approveClicked: function () {\n let isApproved = this.model.get('approvedOn') != null;\n new PJQ.views.modals.YesNo({\n header: \"Confirm \" + (isApproved ? 'Un-Approval' : 'Approval'),\n body: \"Are you sure you want to \" + (isApproved ? 'un-approve' : 'approve') + \" this Time Card?\",\n onYes: _.bind(function () {\n if (this.model.get('approvedOn')) {\n this.model.set('approvedOn', null);\n this.$('.timecard-approve').text('Approve');\n this.render();\n } else {\n this.model.set('approvedOn', new Date());\n this.saveClicked();\n }\n }, this)\n });\n },\n deleteClicked: function () {\n new PJQ.views.modals.YesNo({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this Time Card?\",\n onYes: _.bind(function () {\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete();\n }\n\n this.removeModal();\n }, this)\n });\n },\n viewTimecardLocations: function () {\n new PJQ.views.timecards.TimeCardLocationMapModal({\n model: this.model\n });\n }\n});","PJQ.inputs.timecards = {}\nPJQ.inputs.timecards.TimeCardEditor = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'timecard-editor-input'),\n isReadOnly: false,\n onChange: _.noop(),\n onNextField: _.noop(),\n model: null\n },\n events: {\n 'click button.edit': 'showDetails'\n },\n beforeFirstRender: function () {\n this.model = this.options.model;\n\n if (this.model.get('approvedOn') || !(PJQ.app.session.hasPermission('timeCards.canAdd') || (PJQ.app.session.project && PJQ.app.session.project.hasPermission('timeCards.canAdd'))))\n this.options.isReadOnly = true;\n\n },\n renderData: function () {\n return {\n model: this.model,\n isReadOnly: this.options.isReadOnly\n };\n },\n afterRender: function () {\n\n this.$('input.hours').inputmask('99', {\n placeholder: '',\n positionCaretOnClick: 'select'\n }).off(\"keyup.tei\").on(\"keyup.tei\", _.bind(function (e) {\n\n if (e.which !== 9 && e.which !== 16 && _.size(this.$('input.hours').val()) == 2) {\n this.$('input.minutes').focus();\n }\n\n }, this)).off(\"change.tei\").on(\"change.tei\", _.bind(function () {\n this.valueChanged();\n }, this)).off(\"focus.tei\").on(\"focus.tei\", _.bind(function () {\n this.$('input.hours').select();\n }, this));\n\n this.$('input.minutes').inputmask('59', {\n positionCaretOnClick: 'select',\n definitions: {\n \"5\": {\n validator: \"[012345]\"\n }\n },\n placeholder: ''\n }).off(\"keyup.tei\").on(\"keyup.tei\", _.bind(function (e) {\n if (e.which !== 9 && e.which !== 16 && _.size(this.$('input.minutes').val()) == 2) {\n if (typeof this.options.onNextField === 'function') {\n this.options.onNextField(this.model);\n }\n }\n }, this)).off(\"keydown.tei\").on(\"keydown.tei\", _.bind(function (e) {\n if (e.which == 9) {\n if (typeof this.options.onNextField === 'function') {\n this.options.onNextField(this.model);\n }\n\n e.preventDefault();\n }\n }, this)).off(\"change.tei\").on(\"change.tei\", _.bind(function () {\n this.valueChanged();\n }, this)).off(\"focus.tei\").on(\"focus.tei\", _.bind(function () {\n this.$('input.minutes').select();\n }, this));\n\n let totalMinutes = this.model.getTotalTime();\n let hours = parseInt(totalMinutes / 60);\n let minutes = totalMinutes % 60;\n\n this.$('input.hours').val(hours);\n this.$('input.minutes').val(minutes);\n },\n showDetails: function () {\n new PJQ.views.timecards.TimeCardDetailsModal({\n settings: this.options.settings,\n project: this.options.project,\n model: this.model,\n onSave: _.bind(function () {\n let totalMinutes = this.model.getTotalTime();\n let hours = parseInt(totalMinutes / 60);\n let minutes = totalMinutes % 60;\n\n this.$('input.hours').val(hours);\n this.$('input.minutes').val(minutes);\n\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(this.model);\n }\n }, this)\n });\n },\n valueChanged: function (e) {\n let hours = 0, minutes = 0;\n\n if (this.$('input.hours').val())\n hours = parseInt(this.$('input.hours').val());\n\n if (this.$('input.minutes').val())\n minutes = parseInt(this.$('input.minutes').val());\n\n this.model.set('regularHours', (hours * 60) + minutes);\n this.model.set('overtimeHours', 0);\n this.model.set('doubletimeHours', 0);\n\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(this.model);\n }\n },\n});\n\nPJQ.inputs.timecards.TimeCardWeekEditor = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'timecard-week-input'),\n isReadOnly: false,\n onChange: _.noop(),\n onDelete: _.noop(),\n row: null,\n startDate: null\n },\n events: {\n 'click .delete-time-card-week': 'deleteWeek'\n },\n beforeFirstRender: function () {\n\n },\n renderData: function () {\n return {\n project: this.options.row.project,\n canDelete: _.size(_.filter(this.options.row.models, function (model) {\n return model.get('approvedOn') == null;\n })) > 0 && (PJQ.app.session.hasPermission('timeCards.isAdmin') || (PJQ.app.session.project && PJQ.app.session.project.hasPermission('timeCards.isAdmin')))\n };\n },\n afterRender: function () {\n this.editors = [];\n\n // iterate through the days, find model for that day and create the control\n for (let i = 0; i < 7; i++) {\n let date = PJQ.helpers.dateHelpers.getNewDateAddDays(this.options.startDate, i);\n\n _.each(this.options.row.models, _.bind(function (timecard) {\n if (timecard.get('date').getTime() == PJQ.helpers.dateHelpers.parseDateString(PJQ.helpers.dateHelpers.getDateString(date, PJQ.helpers.dateHelpers.dateFormats.DATE, false)).getTime()) {\n this.editors.push(new PJQ.inputs.timecards.TimeCardEditor({\n el: this.$('div.time-card-day[data-day-column=\"' + i + '\"] div.timecard-editor'),\n settings: this.options.settings,\n model: timecard,\n project: this.options.project,\n onChange: _.bind(function () {\n this.calculateWeekTotal();\n }, this),\n onNextField: _.bind(function () {\n if (i < 6) {\n this.editors[i + 1].$el.find('input.hours').focus();\n }\n }, this)\n }));\n }\n }, this));\n }\n\n this.calculateWeekTotal();\n },\n getTotalTimeForDate: function (date) {\n let totalMinutes = 0;\n _.each(this.options.row.models, _.bind(function (timecard) {\n if (!timecard.get('deletedOn') && timecard.get('date').getTime() == PJQ.helpers.dateHelpers.parseDateString(PJQ.helpers.dateHelpers.getDateString(date, PJQ.helpers.dateHelpers.dateFormats.DATE, false)).getTime())\n totalMinutes += timecard.getTotalTime();\n }, this));\n\n return totalMinutes;\n },\n calculateWeekTotal: function () {\n let totalMinutes = 0;\n _.each(this.options.row.models, _.bind(function (timecard) {\n if (!timecard.get('deletedOn'))\n totalMinutes += timecard.getTotalTime();\n }, this));\n\n this.$('.time-card-total').text(PJQ.helpers.timecards.getFormattedTime(totalMinutes));\n\n if (typeof this.options.onChange === 'function') {\n this.options.onChange();\n }\n },\n hasChanges: function () {\n for (let i = 0; i < _.size(this.options.row.models); i++) {\n let timecard = this.options.row.models[i];\n if (timecard.get('deletedOn') || (!timecard.isNew() && timecard.isDirty)\n || (timecard.isNew() && (_.size(timecard.get('notes')) > 0 || timecard.getTotalTime() > 0))) {\n return true;\n }\n }\n return false;\n },\n isWeekNewAndEmpty: function () {\n let totalMinutes = 0, totalNotes = 0;\n _.each(this.options.row.models, _.bind(function (timecard) {\n if (!timecard.get('deletedOn') && timecard.isNew()) {\n totalMinutes += timecard.getTotalTime();\n totalNotes += _.size(timecard.get('notes'));\n } else {\n // found a not new one\n totalMinutes += 1;\n }\n }, this));\n\n return (totalMinutes + totalNotes === 0);\n },\n deleteWeek: function () {\n new PJQ.views.modals.YesNo({\n header: \"Delete Time Cards\",\n body: \"Do you want delete time cards for this week for \" + this.options.row.project.projectName + \"?\",\n onYes: _.bind(function () {\n _.each(this.options.row.models, _.bind(function (timecard) {\n if (!timecard.get('approvedOn'))\n timecard.set({\n delete: true,\n deletedOn: new Date()\n });\n }, this));\n\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete();\n }\n }, this)\n });\n }\n});\n\nPJQ.helpers.timecards = {}\nPJQ.helpers.timecards.getFormattedTime = function (input) {\n let totalMinutes = input,\n hours = parseInt(totalMinutes / 60),\n minutes = totalMinutes % 60;\n\n return hours + ':' + ((minutes < 10) ? '0' : '') + minutes;\n};\n\nPJQ.inputs.timecards.TimeCardGroupEditor = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'timecard-group-editor-input'),\n isReadOnly: false,\n onChange: _.noop(),\n onDelete: _.noop(),\n onNextField: _.noop(),\n model: null\n },\n events: {\n 'click .delete-group': 'deleteGroup'\n },\n beforeFirstRender: function () {\n\n },\n renderData: function () {\n return {\n isReadOnly: this.options.isReadOnly,\n model: this.options.model\n };\n },\n afterRender: function () {\n this.$('input.group-regular-hours').inputmask('99', {\n placeholder: '',\n positionCaretOnClick: 'select'\n }).off(\"keyup.tei\").on(\"keyup.tei\", _.bind(function (e) {\n if (e.which !== 9 && e.which !== 16 && _.size(this.$('input.group-regular-hours').val()) == 2)\n this.$('input.group-regular-minutes').focus();\n }, this)).off(\"change.tei\").on(\"change.tei\", _.bind(function () {\n this.valueChanged();\n }, this)).off(\"focus.tei\").on(\"focus.tei\", _.bind(function () {\n this.$('input.group-regular-hours').select();\n }, this));\n\n this.$('input.group-overtime-hours').inputmask('99', {\n placeholder: '',\n positionCaretOnClick: 'select'\n }).off(\"keyup.tei\").on(\"keyup.tei\", _.bind(function (e) {\n if (e.which !== 9 && e.which !== 16 && _.size(this.$('input.group-overtime-hours').val()) == 2)\n this.$('input.group-overtime-minutes').focus();\n }, this)).off(\"change.tei\").on(\"change.tei\", _.bind(function () {\n this.valueChanged();\n }, this)).off(\"focus.tei\").on(\"focus.tei\", _.bind(function () {\n this.$('input.group-overtime-hours').select();\n }, this));\n\n this.$('input.group-doubletime-hours').inputmask('99', {\n placeholder: '',\n positionCaretOnClick: 'select'\n }).off(\"keyup.tei\").on(\"keyup.tei\", _.bind(function (e) {\n if (e.which !== 9 && e.which !== 16 && _.size(this.$('input.group-doubletime-hours').val()) == 2)\n this.$('input.group-doubletime-minutes').focus();\n }, this)).off(\"change.tei\").on(\"change.tei\", _.bind(function () {\n this.valueChanged();\n }, this)).off(\"focus.tei\").on(\"focus.tei\", _.bind(function () {\n this.$('input.group-doubletime-hours').select();\n }, this));\n\n this.$('input.group-regular-minutes, input.group-overtime-minutes, input.group-doubletime-minutes').inputmask('59', {\n definitions: {\n \"5\": {\n validator: \"[012345]\"\n }\n },\n placeholder: '',\n positionCaretOnClick: 'select'\n }).off(\"change.tei\").on(\"change.tei\", _.bind(function () {\n this.valueChanged();\n }, this)).off(\"focus.tei\").on(\"focus.tei\", function () {\n $(this).select();\n });\n\n this.$('input.group-regular-minutes').off(\"keyup.tei\").on(\"keyup.tei\", _.bind(function (e) {\n if (e.which !== 9 && e.which !== 16 && _.size(this.$('input.group-regular-minutes').val()) == 2)\n this.$('input.group-overtime-hours').focus();\n }, this));\n\n this.$('input.group-overtime-minutes').off(\"keyup.tei\").on(\"keyup.tei\", _.bind(function (e) {\n if (e.which !== 9 && e.which !== 16 && _.size(this.$('input.group-overtime-minutes').val()) == 2)\n this.$('input.group-doubletime-hours').focus();\n }, this));\n\n this.$('input.group-doubletime-minutes').off(\"keyup.tei\").on(\"keyup.tei\", _.bind(function (e) {\n if (e.which !== 9 && e.which !== 16 && _.size(this.$('input.group-doubletime-minutes').val()) == 2) {\n if (typeof this.options.onNextField === 'function') {\n this.options.onNextField(this.options.model);\n }\n }\n }, this)).off(\"keydown.tei\").on(\"keydown.tei\", _.bind(function (e) {\n if (e.which == 9) {\n if (typeof this.options.onNextField === 'function') {\n this.options.onNextField(this.options.model);\n }\n e.preventDefault();\n }\n }, this));\n\n this.$('input.group-regular-hours').val((parseInt(this.options.model.get('regularHours') / 60)).toString().padStart(2, '0'));\n this.$('input.group-regular-minutes').val((parseInt(this.options.model.get('regularHours') % 60)).toString().padStart(2, '0'));\n this.$('input.group-overtime-hours').val((parseInt(this.options.model.get('overtimeHours') / 60)).toString().padStart(2, '0'));\n this.$('input.group-overtime-minutes').val((parseInt(this.options.model.get('overtimeHours') % 60)).toString().padStart(2, '0'));\n this.$('input.group-doubletime-hours').val((parseInt(this.options.model.get('doubletimeHours') / 60)).toString().padStart(2, '0'));\n this.$('input.group-doubletime-minutes').val((parseInt(this.options.model.get('doubletimeHours') % 60)).toString().padStart(2, '0'));\n\n this.$('.group-regular-hours').focus();\n },\n valueChanged: function () {\n if (typeof this.options.onChange == 'function')\n this.options.onChange();\n },\n getValues: function () {\n let regularHours = 0, overtimeHours = 0, doubletimeHours = 0;\n\n let hours = 0, minutes = 0;\n\n if (this.$('input.group-regular-hours').val())\n hours = parseInt(this.$('input.group-regular-hours').val());\n\n if (this.$('input.group-regular-minutes').val())\n minutes = parseInt(this.$('input.group-regular-minutes').val());\n\n regularHours = (hours * 60) + minutes;\n\n hours = 0, minutes = 0;\n\n if (this.$('input.group-overtime-hours').val())\n hours = parseInt(this.$('input.group-overtime-hours').val());\n\n if (this.$('input.group-overtime-minutes').val())\n minutes = parseInt(this.$('input.group-overtime-minutes').val());\n\n overtimeHours = (hours * 60) + minutes;\n\n hours = 0, minutes = 0;\n\n if (this.$('input.group-doubletime-hours').val())\n hours = parseInt(this.$('input.group-doubletime-hours').val());\n\n if (this.$('input.group-doubletime-minutes').val())\n minutes = parseInt(this.$('input.group-doubletime-minutes').val());\n\n doubletimeHours = (hours * 60) + minutes;\n\n return {\n regularHours: regularHours,\n overtimeHours: overtimeHours,\n doubletimeHours: doubletimeHours\n };\n },\n deleteGroup: function () {\n new PJQ.views.modals.YesNo({\n header: \"Delete Trade\",\n body: \"Do you want delete time for \" + this.options.model.get('group').groupName + \"?\",\n onYes: _.bind(function () {\n this.options.model.set('deletedOn', new Date());\n\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(this.options.model);\n }\n }, this)\n });\n }\n});","PJQ.models.timecards = {};\n\nPJQ.models.timecards.TimeCard = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'timeCardId',\n endpoint: function () {\n let params = [];\n if (this.options.context)\n params.push({\n parameter: 'context',\n value: this.options.context\n });\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards',\n value: this.get('timeCardId')\n }\n ], params);\n },\n parse: function(model) {\n if (!model)\n return;\n\n if (model.date)\n model.date = PJQ.helpers.dateHelpers.parseDateString(model.date, false);\n\n if (model.groups)\n model.groups = new PJQ.collections.timecards.TimeCardGroups(model.groups.models ? model.groups.models : model.groups);\n\n this.lineItems = new PJQ.collections.timecards.TimeCardLineItems(model.lineItems);\n\n return model;\n },\n getTotalTime: function() {\n return this.get('regularHours')+this.get('doubletimeHours')+this.get('overtimeHours');\n },\n beforeSave: function () {\n this.set({\n lineItems: this.lineItems.toJSON()\n });\n },\n});\n\nPJQ.models.timecards.TimeCardCategory = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards',\n },\n {\n endpoint: 'settings'\n },\n {\n endpoint: 'categories',\n value: this.get('timeCardCategoryId')\n }\n ]);\n },\n idAttribute: 'timeCardCategoryId'\n});\n\nPJQ.models.timecards.TimeCardGroup = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'timeCardGroupId'\n});\n\nPJQ.models.timecards.TimeCardLineItem = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'id'\n});\n\n// Settings\nPJQ.models.timecards.TimeCardUserSettings = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n endpoint: function () {\n let params = [];\n if (this.options.forCompany) {\n params.push({\n parameter: 'forCompany',\n value: true\n });\n }\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'settings'\n },\n {\n endpoint: 'user'\n }\n ], params);\n },\n getSettings: function (view) {\n return _.find(this.attributes.viewSettings, _.bind(function (setting) {\n return setting.view === view;\n }, this));\n }\n});\n\nPJQ.models.timecards.TimeCardSettings = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n endpoint: function () {\n let params = [\n {\n parameter: 'contactId',\n value: this.options.contact ? this.options.contact.get('contactId') : 0\n },\n {\n parameter: 'projectId',\n value: this.options.project ? this.options.project.get('projectId') : 0\n }\n ];\n\n if(this.options.project){\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'settings'\n }\n ], params);\n }\n else {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'settings'\n }\n ], params);\n }\n }\n});\n\nPJQ.collections.timecards = {};\n\nPJQ.collections.timecards.TimeCardCategories = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.timecards.TimeCardCategory,\n endpoint: function () {\n let params = [];\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'settings'\n },\n {\n endpoint: 'categories'\n }\n ], params);\n }\n});\n\nPJQ.collections.timecards.TimeCards = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.timecards.TimeCard,\n endpoint: function () {\n let params = [];\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards'\n }\n ], params);\n },\n parse: function (data) {\n if (this.options.isExport) {\n this.exportURL = data.url;\n }\n else {\n this.totalRows = 0;\n if (data) {\n this.totalRows = data.totalRows;\n return data.rows;\n }\n }\n return null;\n },\n getTimeCard: function(id, date) {\n let result = null;\n\n _.each(this.models, function(model) {\n if (model.get('id') === id && PJQ.helpers.dateHelpers.getDateString(model.get('date'), PJQ.helpers.dateHelpers.dateFormats.DATE_YMD) === PJQ.helpers.dateHelpers.getDateString(date, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD) && !model.get('deletedOn'))\n result = model;\n });\n\n return result;\n }\n});\n\nPJQ.collections.timecards.TimeCardGroups = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.timecards.TimeCardGroup\n});\n\nPJQ.collections.timecards.TimeCardLineItems = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.timecards.TimeCardLineItem\n});\n\nPJQ.collections.timecards.TimeCardContextProjects = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n endpoint: function () {\n let params = [\n {\n parameter: 'startDate',\n value: this.options.startDate\n },\n {\n parameter: 'endDate',\n value: this.options.endDate\n }\n ];\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'context',\n value: this.options.id\n },\n {\n endpoint: 'projects'\n }\n ], params);\n }\n});\n\nPJQ.collections.timecards.TimeCardProjects = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n endpoint: function () {\n let params = [];\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'projects'\n }\n ], params);\n },\n parse: function (data) {\n if (this.options.isExport) {\n this.exportURL = data.url;\n }\n else {\n this.totalRows = 0;\n if (data) {\n this.totalRows = data.totalRows;\n return data.rows;\n }\n }\n return null;\n }\n});\n\nPJQ.collections.timecards.TimeCardContacts = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n endpoint: function () {\n let params = [];\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'contacts'\n }\n ], params);\n },\n parse: function (data) {\n if (this.options.isExport) {\n this.exportURL = data.url;\n }\n else {\n this.totalRows = 0;\n if (data) {\n this.totalRows = data.totalRows;\n return data.rows;\n }\n }\n return null;\n }\n});","PJQ.views.timecards.TimeCardSettingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'modal-timecard-settings'),\n width: '400px'\n },\n events: {\n 'change .select-column': 'columnSelected',\n 'click button.settings-save': 'onSave',\n 'click .btn-geofence': 'manageProjectGeofence'\n },\n beforeModalCreated: function () {\n this.model = this.options.timecardsView.userSettings;\n },\n beforeRender: function () {\n // copy settings for our UI; we only update global settings object on save.\n this.options.settings = [];\n this.options.defaultView = this.model.get('defaultView');\n this.options.defaultDateRange = this.model.get('defaultDateRange');\n _.each(this.model.attributes.viewSettings, _.bind(function (setting) {\n if (setting.view === PJQ.constants.timecards.view.BY_CONTACT_PROJECT_TIMECARD ||\n setting.view === PJQ.constants.timecards.view.BY_PROJECT_CONTACT_TIMECARD)\n return;\n\n let columns = this.options.timecardsView.getDataTableInstance({\n view: setting.view,\n timeCardSettings: this.options.timecardsView.settings,\n settings: this.model.getSettings(setting.view)\n }).getColumns(true)\n\n columns = _.filter(columns, (col) => {\n return col.visible !== false;\n })\n\n let selectedColumns = (_.size(setting.columns) > 0) ? setting.columns : setting.columnsDefault;\n _.each(columns, _.bind(function (column) {\n column.visible = selectedColumns.indexOf(column.columnData) !== -1\n }, this));\n\n this.options.settings.push({\n view: setting.view,\n rowsPerPage: setting.rowsPerPage,\n columns: columns\n });\n }, this));\n },\n renderData: function () {\n return {\n model: this.model,\n project: this.options.timecardsView.options.project\n }\n },\n afterRender: function () {\n new PJQ.inputs.Selectpicker({\n el: this.$('select.select-view-default'),\n defaultValue: this.options.defaultView,\n onChange: _.bind(function (value) {\n this.options.defaultView = value;\n }, this)\n\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('select.select-date-range-default'),\n defaultValue: this.options.defaultDateRange,\n isIntChoices: true,\n onChange: _.bind(function (value) {\n this.options.defaultDateRange = value;\n }, this)\n\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('select.select-view'),\n defaultValue: this.options.timecardsView.dataTable.options.view,\n onChange: _.bind(function (value) {\n this.selectView(value);\n }, this)\n });\n\n this.rowsPerPage = new PJQ.inputs.Selectpicker({\n el: this.$('select.rows-per-page'),\n isIntChoices: true,\n onChange: _.bind(function (value) {\n this.currentView.rowsPerPage = value;\n }, this)\n });\n\n this.selectView(this.options.timecardsView.dataTable.options.view);\n },\n manageProjectGeofence: function () {\n new PJQ.views.timecards.TimeCardGeofenceModal({});\n },\n selectView: function (view) {\n this.currentView = _.find(this.options.settings, _.bind(function (setting) {\n return setting.view === view;\n }, this));\n\n if (view.indexOf('-') === -1) {\n this.$('div.rows-per-page').show();\n this.rowsPerPage.setValue(this.currentView.rowsPerPage);\n } else\n this.$('div.rows-per-page').hide();\n\n if (this.dataTable) {\n this.dataTable.undelegateEvents();\n $(this.dataTable.el).empty();\n }\n\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('div.select-columns-datatable'),\n data: this.currentView.columns,\n isHideSearch: true,\n order: [],\n pageLength: 5,\n columns: [\n {\"data\": \"title\", \"title\": \"Column\", \"orderable\": false},\n {\n \"data\": \"visible\",\n \"title\": \"Show\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('
');\n }, this),\n \"width\": '10%'\n }\n ],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n },\n columnSelected: function (sender) {\n this.dataTable.dataTable.row($(sender.currentTarget).closest('tr')).data().visible = $(sender.currentTarget).prop('checked');\n },\n onSave: function () {\n let fnOnSave = _.bind(function () {\n if (typeof this.options.onSave === 'function')\n this.options.onSave();\n this.removeModal();\n }, this);\n\n this.model.set('defaultView', this.options.defaultView);\n this.model.set('defaultDateRange', this.options.defaultDateRange);\n\n _.each(this.options.settings, _.bind(function (settingTemp) {\n _.each(this.model.get('viewSettings'), _.bind(function (setting) {\n if (settingTemp.view === setting.view) {\n setting.rowsPerPage = settingTemp.rowsPerPage;\n\n let columns = _.size(setting.columns) > 0 ? setting.columns.slice() : setting.columnsDefault.slice();\n\n // update columns\n _.each(settingTemp.columns, _.bind(function (column) {\n if (column.visible) {\n if (columns.indexOf(column.columnData) === -1)\n columns.push(column.columnData);\n } else {\n if (columns.indexOf(column.columnData) !== -1)\n columns = _.filter(columns, _.bind(function (columnTemp) {\n return columnTemp != column.columnData;\n }, this));\n }\n }, this));\n\n setting.columns = columns;\n }\n }, this));\n }, this));\n\n //save settings to database\n this.model.save(null, {\n success: _.bind(function () {\n this.model.set('defaultView', this.options.defaultView);\n fnOnSave();\n }, this)\n });\n }\n});\n\nPJQ.views.timecards.TimeCardGeofenceModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'modal-timecard-geofence'),\n minWidth: '700px'\n },\n events: {\n 'keyup .input-longitude, .input-latitude, .input-radius': 'positionChanged',\n 'click .btn-save': 'save',\n 'click .cb-enable-geofence': 'toggleStatus'\n },\n beforeModalCreated: function () {\n this.settings = new PJQ.models.timecards.TimeCardSettings(null, {\n project: PJQ.app.session.project\n });\n\n this.geofenceEnabled = false;\n\n if (!this.settings.isFetched) {\n this.settings.fetch({\n success: _.bind(function () {\n if (this.settings.get('geofence')) {\n this.geofence = this.settings.get('geofence');\n this.geofenceEnabled = this.geofence.latitude && this.geofence.longitude;\n } else {\n let defaultLat = PJQ.app.session.project.get('latitude'),\n defaultLong = PJQ.app.session.project.get('longitude');\n this.geofence = {\n radius: 1000,\n longitude: defaultLong !== 0 ? defaultLong : null,\n latitude: defaultLat !== 0 ? defaultLat : null\n };\n }\n\n this.isFetched = true;\n this.render();\n }, this)\n })\n } else {\n this.isFetched = true;\n this.render();\n }\n },\n renderData: function () {\n return {\n geofence: this.geofence,\n geofenceEnabled: this.geofenceEnabled\n }\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n if (this.settings && this.settings.isFetched) {\n this.renderMap();\n }\n },\n toggleStatus: function () {\n this.geofenceEnabled = !this.geofenceEnabled;\n },\n renderMap: function () {\n this.geofenceMap = new PJQ.maps.GoogleMap(this.$('.geofence-map'));\n if (this.geofence.latitude && this.geofence.longitude) {\n this.refreshMarkers();\n }\n\n // Listen for clicks on the map to set/move the marker and radius circle\n this.geofenceMap.map.addListener('click', _.bind((data) => {\n // Reduce the lat/long to 7 decimal places\n this.geofence.latitude = Math.round(data.latLng.lat() * 10000000) / 10000000;\n this.geofence.longitude = Math.round(data.latLng.lng() * 10000000) / 10000000;\n this.geofenceEnabled = true;\n\n this.$('.cb-enable-geofence').prop('checked', true);\n this.$('.input-latitude').val(this.geofence.latitude);\n this.$('.input-longitude').val(this.geofence.longitude);\n\n this.refreshMarkers();\n }, this));\n },\n positionChanged: function (e) {\n let $target = $(e.currentTarget),\n valueType = $target.data('type'),\n value = $target.val();\n\n // Radius should always have a value\n if (valueType.toLowerCase() === 'radius') {\n value = parseInt(value);\n if (isNaN(value) || value < 0) {\n value = 0;\n }\n this.$('.input-radius').val(value);\n }\n\n this.geofence[valueType] = value;\n\n if (this.geofence.latitude && this.geofence.longitude) {\n this.refreshMarkers();\n }\n },\n refreshMarkers: function () {\n let positionObject = new google.maps.LatLng(this.geofence.latitude, this.geofence.longitude);\n\n if (this.geofence.radius == null) {\n this.geofence.radius = 1000;\n this.$('.input-radius').val(this.geofence.radius);\n }\n\n // if no marker and circle exist, create them\n if (!this.marker && !this.circle) {\n this.circle = new google.maps.Circle({\n map: this.geofenceMap.map,\n radius: this.geofence.radius ? this.geofence.radius : 1000,\n fillColor: '#41c1e1',\n fillOpacity: 0.35,\n strokeColor: '#148fb2',\n strokeOpacity: 0.8,\n strokeWeight: 1,\n center: positionObject,\n clickable: false\n });\n\n this.marker = new google.maps.Marker({\n position: positionObject,\n map: this.geofenceMap.map,\n title: 'Geofence Center',\n animation: google.maps.Animation.DROP\n });\n\n // Zoom and center map on marker when clicked\n this.marker.addListener('click', _.bind(function () {\n this.geofenceMap.setCenter(this.marker.getPosition());\n this.geofenceMap.setZoom(10);\n }, this));\n\n // Zoom and center map on marker on creation\n this.geofenceMap.setCenter(this.marker.getPosition());\n this.geofenceMap.setZoom(10);\n } else {\n this.marker.setPosition(positionObject);\n this.circle.setCenter(positionObject);\n this.circle.setRadius(this.geofence.radius);\n }\n },\n save: function () {\n if (!this.geofenceEnabled) {\n this.geofence.latitude = null;\n this.geofence.longitude = null;\n }\n\n this.settings.set('geofence', this.geofence);\n this.settings.save(null, {\n success: _.bind(function () {\n this.removeModal();\n }, this)\n })\n }\n});\n\nPJQ.views.timecards.TimeCardLocationMapModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'modal-timecard-location-map'),\n minWidth: '700px',\n coordinatesIn: null,\n coordinatesOut: null\n },\n afterRender: function () {\n this.renderMap();\n },\n renderMap: function () {\n this.map = new PJQ.maps.GoogleMap(this.$('.timecard-location-map'));\n this.renderMarkers();\n },\n renderMarkers: function () {\n let inMarker = null,\n outMarker = null\n if (this.model.get('latitudeIn') && this.model.get('longitudeIn')) {\n inMarker = new google.maps.Marker({\n position: new google.maps.LatLng(this.model.get('latitudeIn'), this.model.get('longitudeIn')),\n map: this.map.map,\n title: 'Clock In Location',\n animation: google.maps.Animation.DROP,\n icon: {\n url: \"http://maps.google.com/mapfiles/ms/icons/green-dot.png\"\n }\n });\n\n // Clock in info window\n let infoWindowContent = \"
Clocked In
\";\n\n if (this.model.get('timeIn')) {\n infoWindowContent += \"
\" + PJQ.helpers.dateHelpers.getDateString(this.model.get('timeIn'), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"
\";\n }\n infoWindowContent += \"
\"\n\n let infoWindow = new google.maps.InfoWindow({\n content: infoWindowContent\n });\n inMarker.addListener('click', function () {\n infoWindow.open(this.map, inMarker);\n });\n }\n\n if (this.model.get('latitudeOut') && this.model.get('longitudeOut')) {\n outMarker = new google.maps.Marker({\n position: new google.maps.LatLng(this.model.get('latitudeOut'), this.model.get('longitudeOut')),\n map: this.map.map,\n title: 'Clock Out Location',\n animation: google.maps.Animation.DROP,\n icon: {\n url: \"http://maps.google.com/mapfiles/ms/icons/red-dot.png\"\n }\n });\n\n // Clock out info window\n let infoWindowContent = \"
Clocked Out
\";\n\n if (this.model.get('timeOut')) {\n infoWindowContent += \"
\" + PJQ.helpers.dateHelpers.getDateString(this.model.get('timeOut'), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME) + \"
\";\n }\n infoWindowContent += \"
\"\n\n let infoWindow = new google.maps.InfoWindow({\n content: infoWindowContent\n });\n outMarker.addListener('click', function () {\n infoWindow.open(this.map, outMarker);\n });\n }\n\n if (inMarker || outMarker) {\n this.map.setCenter(inMarker ? inMarker.getPosition() : outMarker.getPosition());\n this.map.setZoom(10);\n }\n }\n});","PJQ.views.timecards.TimeCardMain = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.TIMECARDS, 'timecard'),\n isShowHeader: true,\n project: null,\n contact: null,\n useManualDateRange: false\n },\n events: {\n 'click .btn-settings': 'settings',\n 'keyup .input-search': 'searchChanged',\n 'click .search': 'search',\n 'click .clear-search': 'clearFilter',\n 'click .new-timecards': 'addTimeCards',\n 'click .approve-batch': 'approveBatchStart',\n 'click .unapprove-batch': 'approveBatchStart',\n 'click .approval-continue': 'approveBatchContinue',\n 'click .cancel-approval': 'approveBatchCancel',\n 'click .export': 'exportList',\n 'click .export-weekly': 'exportWeekly',\n 'click .btn-manual-range': 'manualDateRange',\n 'click .btn-auto-range': 'autoDateRange',\n 'click .btn-prev-date': 'prevDateRange',\n 'click .btn-next-date': 'nextDateRange'\n },\n beforeFirstRender: function () {\n this.selectedTimeCards = [];\n this.selectionMode = PJQ.constants.timecards.selectionMode.NONE;\n\n if (this.options.project != null) {\n this.options.permissions = PJQ.app.session.project.permissions;\n } else {\n this.options.permissions = PJQ.app.session.systemPermissions;\n }\n\n this.isFetched = false;\n this.userSettings = new PJQ.models.timecards.TimeCardUserSettings();\n this.userSettings.fetch({\n success: _.bind(function () {\n this.settings = new PJQ.models.timecards.TimeCardSettings(null, {\n contact: this.options.contact,\n project: this.options.project\n });\n this.settings.fetch({\n success: _.bind(function () {\n this.isFetched = true;\n this.currentView = this.userSettings.get('defaultView');\n this.render();\n }, this)\n });\n }, this)\n });\n },\n beforeRender: function () {\n if (this.isFetched) {\n this.options.canAdd = this.options.permissions.hasPermission('timeCards.canAdd');\n this.options.canApprove = this.options.permissions.hasPermission('timeCards.canApprove');\n this.options.canViewAll = this.options.permissions.hasPermission('timeCards.canViewAll');\n this.options.isAdmin = this.options.permissions.hasPermission('timeCards.isAdmin');\n }\n },\n renderData: function () {\n return {\n showHeader: this.options.isShowHeader,\n project: this.options.project,\n contact: this.options.contact,\n useManualDateRange: this.options.useManualDateRange,\n canAdd: this.options.canAdd,\n canApprove: this.options.canApprove,\n canViewAll: this.options.canViewAll,\n isAdmin: this.options.isAdmin,\n isFetched: this.options.isFetched\n };\n },\n afterRender: function () {\n if (!this.isFetched)\n return;\n\n this.viewSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.timecards-view'),\n isIntChoices: false,\n isMultiple: false,\n mustSelectValue: true,\n defaultValue: this.options.project ? PJQ.constants.timecards.view.PROJECTWALL_BY_TIMECARD : this.userSettings.get('defaultView'),\n onHide: _.bind(function () {\n if (this.currentView !== this.viewSelectPicker.getValue())\n this.renderView();\n }, this)\n });\n\n this.renderView();\n },\n manualDateRange: function () {\n this.options.useManualDateRange = true;\n this.render();\n },\n autoDateRange: function () {\n this.options.useManualDateRange = false;\n this.render();\n },\n renderDateRange: function () {\n let dateRange = this.userSettings.get('defaultDateRange');\n if (!this.options.useManualDateRange) {\n switch (dateRange) {\n case PJQ.constants.timecards.defaultDateRange.DAYS_30:\n if (this.startDate == null) {\n this.startDate = new Date();\n }\n this.endDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, 29);\n break;\n case PJQ.constants.timecards.defaultDateRange.WEEK_TO_DATE:\n if (this.startDate == null) {\n this.startDate = new Date();\n switch (this.settings.get('weekStart')) {\n case 0: // Su\n this.startDate.setDate(this.startDate.getDate() - (this.startDate.getDay()) % 7);\n break;\n default:\n this.startDate.setDate(this.startDate.getDate() - (this.startDate.getDay() + (7 - this.settings.get('weekStart'))) % 7);\n break;\n }\n\n this.endDate = new Date();\n } else {\n this.endDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, 6);\n }\n break;\n case PJQ.constants.timecards.defaultDateRange.MONTH_TO_DATE:\n if (this.startDate == null) {\n this.startDate = PJQ.helpers.dateHelpers.parseDateString(PJQ.helpers.dateHelpers.getCurrentYear() + '-' + PJQ.helpers.dateHelpers.getCurrentMonth() + '-01 00:00:00');\n this.endDate = new Date();\n } else {\n this.endDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, 29);\n }\n break;\n default:\n if (this.startDate == null) {\n this.startDate = new Date();\n switch (this.settings.get('weekStart')) {\n case 0: // Su\n this.startDate.setDate(this.startDate.getDate() - (this.startDate.getDay()) % 7);\n break;\n default:\n this.startDate.setDate(this.startDate.getDate() - (this.startDate.getDay() + (7 - this.settings.get('weekStart'))) % 7);\n break;\n }\n }\n\n this.endDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, dateRange - 1);\n break;\n }\n } else if (this.startDate == null) {\n this.startDate = new Date();\n this.endDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, dateRange - 1);\n }\n\n if (this.options.useManualDateRange) {\n if (this.startDatePicker) {\n this.startDatePicker.remove();\n }\n if (this.endDatePicker) {\n this.endDatePicker.remove();\n }\n\n this.startDatePicker = new PJQ.inputs.Datepicker({\n el: this.$('.start-date'),\n datepickerOptions: {\n defaultDate: this.startDate,\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n },\n onChange: _.bind(function (value) {\n this.selectedTimeCards = [];\n this.startDate = value;\n this.renderView();\n }, this)\n });\n\n this.endDatePicker = new PJQ.inputs.Datepicker({\n el: this.$('.end-date'),\n datepickerOptions: {\n defaultDate: this.endDate,\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n },\n onChange: _.bind(function (value) {\n this.selectedTimeCards = [];\n this.endDate = value;\n this.renderView();\n }, this)\n });\n } else {\n let startDateString = PJQ.helpers.dateHelpers.getDateString(this.startDate, PJQ.helpers.dateHelpers.dateFormats.DATE),\n endDateString = PJQ.helpers.dateHelpers.getDateString(this.endDate, PJQ.helpers.dateHelpers.dateFormats.DATE);\n this.$('.date-range-display').text(startDateString + ' - ' + endDateString);\n }\n },\n prevDateRange: function () {\n let dateRange = this.userSettings.get('defaultDateRange');\n switch (dateRange) {\n case PJQ.constants.timecards.defaultDateRange.WEEK_TO_DATE:\n this.startDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, -7);\n break;\n case PJQ.constants.timecards.defaultDateRange.MONTH_TO_DATE:\n this.startDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, -30);\n break;\n default:\n this.startDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, -dateRange);\n break;\n }\n this.renderView();\n },\n nextDateRange: function () {\n let dateRange = this.userSettings.get('defaultDateRange');\n switch (dateRange) {\n case PJQ.constants.timecards.defaultDateRange.WEEK_TO_DATE:\n this.startDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, 7);\n break;\n case PJQ.constants.timecards.defaultDateRange.MONTH_TO_DATE:\n this.startDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, 30);\n break;\n default:\n this.startDate = PJQ.helpers.dateHelpers.getNewDateAddDays(this.startDate, dateRange);\n break;\n }\n this.renderView();\n },\n renderView: function (view, options = {}) {\n this.currentView = view ? view : this.viewSelectPicker.getValue();\n\n this.renderDateRange();\n\n PJQ.helpers.inputHelpers.setInputError(this.$('.start-date, .end-date'), true);\n if (this.startDate > this.endDate) {\n PJQ.helpers.inputHelpers.setInputError(this.$('.start-date, .end-date'), false);\n return;\n }\n\n let page = null;\n if (options.stayOnPage && this.dataTable != null) {\n page = this.dataTable.dataTable.page();\n }\n\n\n if (this.dataTable) {\n this.dataTable.cleanup();\n this.dataTable.clearServerCache = true;\n this.dataTable.pageCache = [];\n this.dataTable.remove();\n this.dataTable = null;\n this.$('.timecards-data').empty();\n }\n\n let tableSettings = this.userSettings.getSettings(this.currentView),\n dataTableOptions = {\n el: this.$('.timecards-data'),\n language: {\n zeroRecords: 'No Results Available'\n },\n data: null,\n project: this.options.project,\n view: this.currentView,\n timecardsView: this,\n timeCardSettings: this.settings,\n settings: tableSettings,\n userSettings: this.userSettings,\n getPageCallback: _.bind(this.getViewData, this),\n displayStart: page != null ? page * tableSettings.rowsPerPage : null,\n deferRender: true,\n clearServerCache: true,\n showPageSelector: true,\n onApprove: (timecards, approve, callback) => {\n if (timecards == null) {\n return;\n }\n\n let ids;\n if (PJQ.helpers.objectHelpers.refinedType(timecards) === 'array') {\n ids = _.map(_.filter(timecards, (tc) => {\n return approve ? tc.get('approvedOn') == null : tc.get('approvedOn') != null;\n }), (tc) => {\n return tc.id;\n });\n } else if (timecards.id != null) {\n ids = [timecards.id];\n }\n\n let tcCount = _.size(ids);\n if (tcCount > 0) {\n this.approveTimeCards(ids, approve, (response) => {\n PJQ.notifications.notify.successNotify({\n message: tcCount.toString() + ' Time Cards successfully ' + (approve ? 'approved' : 'unapproved')\n });\n if (typeof callback === 'function') {\n callback(response);\n }\n });\n }\n },\n onTableDraw: (dataTable) => {\n this.$('.timecards-data').css('margin-top', -40);\n },\n colReorder: {\n fixedColumnsLeft: 1,\n fixedColumnsRight: (this.currentView === PJQ.constants.timecards.view.BY_TIMECARD || this.currentView === PJQ.constants.timecards.view.PROJECTWALL_BY_TIMECARD) ? 1 : 0,\n realtime: false\n }\n };\n\n this.dataTable = this.getDataTableInstance(dataTableOptions);\n },\n getViewData: function (pageNumber, pageSize, orderArr, callback) {\n let order = orderArr[0];\n this.data = null;\n\n switch (this.currentView) {\n case PJQ.constants.timecards.view.PROJECTWALL_BY_TIMECARD:\n case PJQ.constants.timecards.view.BY_TIMECARD:\n this.data = new PJQ.collections.timecards.TimeCards();\n break;\n case PJQ.constants.timecards.view.BY_PROJECT:\n this.data = new PJQ.collections.timecards.TimeCardProjects();\n break;\n case PJQ.constants.timecards.view.BY_CONTACT:\n this.data = new PJQ.collections.timecards.TimeCardContacts();\n break;\n }\n\n let idFilter = 0;\n if (this.options.contact)\n idFilter = this.options.contact.id;\n else {\n if ((PJQ.app.session.permissions == null || !PJQ.app.session.permissions.hasPermission('contacts.canView')) && (PJQ.app.session.project === null || this.options.permissions.hasPermission('canViewAll')))\n idFilter = -PJQ.app.session.user.id;\n }\n let dateNow = new Date(),\n parameters = {\n searchFor: this.$('.input-search').val(),\n startDate: PJQ.helpers.dateHelpers.getDateString(this.startDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n endDate: PJQ.helpers.dateHelpers.getDateString(this.endDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD),\n page: pageNumber,\n pageSize: pageSize,\n orderBy: order.name,\n orderDirection: order.direction,\n timeZoneOffset: dateNow.getTimezoneOffset(),\n projectId: this.options.project ? this.options.project.get('projectId') : 0,\n idFilter: idFilter\n };\n\n this.data.fetch({\n data: parameters,\n success: _.bind(function () {\n callback(this.data.models, this.data.totalRows);\n }, this),\n fail: _.bind(function () {\n callback();\n }, this)\n });\n },\n getDataTableInstance: function (options) {\n let dataTable = null;\n\n switch (options.view) {\n case PJQ.constants.timecards.view.PROJECTWALL_BY_TIMECARD:\n case PJQ.constants.timecards.view.BY_TIMECARD:\n dataTable = new PJQ.views.timecards.TimeCardDataTable(options);\n break;\n case PJQ.constants.timecards.view.BY_PROJECT:\n dataTable = new PJQ.views.timecards.ProjectDataTable(options);\n break;\n case PJQ.constants.timecards.view.BY_PROJECT_CONTACT:\n dataTable = new PJQ.views.timecards.ContactDataTable(options);\n break;\n case PJQ.constants.timecards.view.BY_PROJECT_CONTACT_TIMECARD:\n dataTable = new PJQ.views.timecards.TimeCardDataTable(options);\n break;\n case PJQ.constants.timecards.view.BY_CONTACT:\n dataTable = new PJQ.views.timecards.ContactDataTable(options);\n break;\n case PJQ.constants.timecards.view.BY_CONTACT_PROJECT:\n dataTable = new PJQ.views.timecards.ProjectDataTable(options);\n break;\n case PJQ.constants.timecards.view.BY_CONTACT_PROJECT_TIMECARD:\n dataTable = new PJQ.views.timecards.TimeCardDataTable(options);\n break;\n }\n return dataTable;\n },\n searchChanged: function (e) {\n if (e.keyCode === 13) {\n this.selectedTimeCards = [];\n this.search();\n }\n },\n search: function () {\n this.renderView();\n },\n clearFilter: function () {\n this.$('.input-search').val('');\n this.renderView();\n },\n settings: function () {\n new PJQ.views.timecards.TimeCardSettingsModal({\n timecardsView: this,\n onSave: _.bind(function () {\n this.startDate = null;\n this.endDate = null;\n this.renderView();\n PJQ.notifications.notify.successNotify({\n message: 'Settings updated successfully'\n });\n }, this)\n });\n },\n addTimeCards: function () {\n if (!this.options.canAdd) {\n return;\n }\n\n if (this.settings.get('enableLineItems') || this.settings.get('enableClockIn')) {\n new PJQ.views.timecards.AddTimeCardsModal({\n project: this.options.project,\n settings: this.settings,\n onSave: () => {\n this.renderView(this.currentView, {stayOnPage: true});\n }\n });\n } else {\n new PJQ.views.timecards.ManageTimeCardsByWeekModal({\n timecardsView: this,\n settings: this.settings,\n project: this.options.project,\n contact: this.options.contact,\n onSave: () => {\n this.renderView(this.currentView, {stayOnPage: true});\n }\n });\n }\n },\n approveBatchStart: function (e) {\n this.selectionMode = $(e.currentTarget).hasClass('approve-batch') ? PJQ.constants.timecards.selectionMode.APPROVE : PJQ.constants.timecards.selectionMode.UNAPPROVE;\n this.$('.approval-continue').prop('disabled', _.size(this.selectedTimeCards) === 0);\n switch (this.currentView) {\n case PJQ.constants.timecards.view.PROJECTWALL_BY_TIMECARD:\n case PJQ.constants.timecards.view.BY_TIMECARD:\n this.renderView(null, {stayOnPage: true});\n break;\n case PJQ.constants.timecards.view.BY_PROJECT:\n case PJQ.constants.timecards.view.BY_CONTACT:\n _.each(this.dataTable.options.childDataTables, _.bind(function (childDT) {\n _.each(childDT.options.childDataTables, _.bind(function (grandChildDT) {\n childDT.renderChildRow(childDT.getRow(grandChildDT.$el.closest('tr').prev()), grandChildDT.options.parentId);\n }, this));\n }, this));\n break;\n }\n\n this.showNotification('Select 1 or more Time Cards and click \"' + (this.selectionMode === PJQ.constants.timecards.selectionMode.APPROVE ? 'Approve' : 'Un-Approve') + ' Checked\" to continue.', 'info');\n this.$('.approval-continue').text((this.selectionMode === PJQ.constants.timecards.selectionMode.APPROVE ? 'Approve' : 'Un-Approve') + ' Checked');\n this.$('.new-timecards, .other-actions').prop('disabled', true);\n this.$('.approval-continue, .cancel-approval').show();\n },\n approveBatchCancel: function () {\n this.selectionMode = PJQ.constants.timecards.selectionMode.NONE;\n this.selectedTimeCards = [];\n\n switch (this.currentView) {\n case PJQ.constants.timecards.view.PROJECTWALL_BY_TIMECARD:\n case PJQ.constants.timecards.view.BY_TIMECARD:\n this.renderView(null, {stayOnPage: true});\n break;\n case PJQ.constants.timecards.view.BY_PROJECT:\n case PJQ.constants.timecards.view.BY_CONTACT:\n _.each(this.dataTable.options.childDataTables, _.bind(function (childDT) {\n _.each(childDT.options.childDataTables, _.bind(function (grandChildDT) {\n childDT.renderChildRow(childDT.getRow(grandChildDT.$el.closest('tr').prev()), grandChildDT.options.parentId);\n }, this));\n }, this));\n break;\n }\n\n this.$('.new-timecards, .other-actions').prop('disabled', false);\n this.$('.approval-continue, .cancel-approval').hide();\n this.hideNotification();\n },\n approveBatchContinue: function () {\n let isApproved = (this.selectionMode === PJQ.constants.timecards.selectionMode.APPROVE);\n new PJQ.views.modals.YesNo({\n header: \"Confirm \" + (isApproved ? 'Approval' : 'Un-Approval'),\n body: \"Are you sure you want to \" + (isApproved ? 'approve' : 'un-approve') + \" \" + _.size(this.selectedTimeCards) + \" Time Card\" + (_.size(this.selectedTimeCards) > 1 ? \"s\" : \"\") + \"?\",\n onYes: _.bind(function () {\n this.approveTimeCards(this.selectedTimeCards, isApproved, _.bind(function () {\n let plural = _.size(this.selectedTimeCards) > 0 ? 's' : '';\n this.approveBatchCancel();\n PJQ.notifications.notify.successNotify({\n message: 'Time Card' + plural + ' ' + (isApproved ? 'approved' : 'unapproved')\n });\n }, this));\n }, this)\n });\n },\n approveTimeCards: function (timeCardIds, isApproved, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'timecards',\n },\n {\n endpoint: 'batch',\n },\n {\n endpoint: 'approve'\n }\n ]),\n data: {\n timeCardIds: timeCardIds,\n isApproved: isApproved\n },\n isAPIv2: true\n }).post().done(_.bind(function (response) {\n if (typeof callback === 'function') {\n callback(response);\n }\n }, this));\n },\n addSelectedTimeCards: function (timeCardIds) {\n this.selectedTimeCards = _.uniq(_.union(timeCardIds, this.selectedTimeCards));\n\n if (this.selectionMode === PJQ.constants.timecards.selectionMode.APPROVE || this.selectionMode === PJQ.constants.timecards.selectionMode.UNAPPROVE)\n this.$('.approval-continue').prop('disabled', _.size(this.selectedTimeCards) === 0);\n },\n removeSelectedTimeCards: function (timeCardIds) {\n this.selectedTimeCards = _.without(this.selectedTimeCards, ...timeCardIds);\n\n if (this.selectionMode === PJQ.constants.timecards.selectionMode.APPROVE || this.selectionMode === PJQ.constants.timecards.selectionMode.UNAPPROVE)\n this.$('.approval-continue').prop('disabled', _.size(this.selectedTimeCards) === 0);\n },\n hideNotification: function () {\n this.$('.timecard-notifications').hide();\n },\n showNotification: function (content, type) {\n this.$('.timecard-notifications').removeClass('alert-primary').removeClass('alert-secondary').removeClass('alert-info').removeClass('alert-success').removeClass('alert-warning').removeClass('alert-danger');\n this.$('.timecard-notifications').addClass('alert-' + type);\n\n let icon = '';\n switch (type) {\n case 'info':\n icon = '';\n break;\n }\n\n this.$('.timecard-notifications').html(icon + (icon ? ' ' : '') + content);\n this.$('.timecard-notifications').show();\n },\n export: function (view) {\n let parameters = [\n {\n parameter: 'searchFor',\n value: this.$('.input-search').val()\n },\n {\n parameter: 'startDate',\n value: PJQ.helpers.dateHelpers.getDateString(this.startDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD)\n },\n {\n parameter: 'endDate',\n value: PJQ.helpers.dateHelpers.getDateString(this.endDate, PJQ.helpers.dateHelpers.dateFormats.DATE_YMD)\n },\n {\n parameter: 'timeZoneOffset',\n value: new Date().getTimezoneOffset()\n },\n {\n parameter: 'projectId',\n value: this.options.project ? this.options.project.get('projectId') : 0\n },\n {\n parameter: 'idFilter',\n value: this.options.contact ? this.options.contact.id : 0\n },\n {\n parameter: 'view',\n value: view\n }\n ];\n\n let downloadEndpoint = [\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'export'\n }\n ];\n\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint(downloadEndpoint, parameters), {isAPIv2: true});\n },\n exportList: function () {\n this.export('timecard-list');\n },\n exportWeekly: function () {\n let template = 'timecard-weekly';\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.TIMECARD_WEEKLY_EXPORT_TEMPLATE))\n template = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.TIMECARD_WEEKLY_EXPORT_TEMPLATE);\n this.export(template);\n }\n});"]}