var tribe_dropdowns = window.tribe_dropdowns || {}; ( function( $, obj, _ ) { 'use strict'; obj.selector = { dropdown: '.tribe-dropdown', created: '.tribe-dropdown-created', searchField: '.select2-search__field', }; // Setup a Dependent $.fn.tribe_dropdowns = function() { obj.dropdown( this, {} ); return this; }; obj.freefrom_create_search_choice = function( params ) { if ( 'string' !== typeof params.term ) { return null; } var term = params.term.trim(); if ( '' === term ) { return null; } var args = this.options.options; var $select = args.$select; if ( term.match( args.regexToken ) && ( ! $select.is( '[data-int]' ) || ( $select.is( '[data-int]' ) && term.match( /\d+/ ) ) ) ) { var choice = { id: term, text: term, new: true }; if ( $select.is( '[data-create-choice-template]' ) ) { choice.text = _.template( $select.data( 'createChoiceTemplate' ) )( { term: term } ); } return choice; } return null; }; /** * Better Search ID for Select2, compatible with WordPress ID from WP_Query * * @param {object|string} e Searched object or the actual ID * @return {string} ID of the object */ obj.search_id = function( e ) { var id = undefined; if ( 'undefined' !== typeof e.id ) { id = e.id; } else if ( 'undefined' !== typeof e.ID ) { id = e.ID; } else if ( 'undefined' !== typeof e.value ) { id = e.value; } return undefined === e ? undefined : id; }; /** * Better way of matching results * * @param {string} term Which term we are searching for * @param {string} text Search here * @return {boolean} */ obj.matcher = function( params, data ) { // If there are no search terms, return all of the data if ( 'string' !== typeof params.term || params.term.trim() === '') { return data; } // Do not display the item if there is no 'text' property if ( typeof data.text === 'undefined' ) { return null; } var term = params.term.trim(); var text = data.text; var $select = $( data.element ).closest( 'select' ); var args = $select.data( 'dropdown' ); var result = text.toUpperCase().indexOf( term.toUpperCase() ) !== -1; if ( ! result && 'undefined' !== typeof args.tags ){ var possible = _.where( args.tags, { text: text } ); if ( args.tags.length > 0 && _.isObject( possible ) ){ var test_value = obj.search_id( possible[0] ); result = test_value.toUpperCase().indexOf( term.toUpperCase() ) !== -1; } } return result; }; /** * If the element used as the basis of a dropdown specifies one or more numeric/text * identifiers in its val attribute, then use those to preselect the appropriate options. * * @param {object} $select * @param {function} make_selection */ obj.init_selection = function( $select, make_selection ) { var isMultiple = $select.is( '[multiple]' ); var options = $select.data( 'dropdown' ); var currentValues = $select.val().split( options.regexSplit ); var selectedItems = []; $( currentValues ).each( function( index, value ) { // eslint-disable-line no-unused-vars var searchFor = { id: this, text: this }; var data = options.ajax ? $select.data( 'options' ) : options.data; var locatedItem = find_item( searchFor, data ); if ( locatedItem && locatedItem.selected ) { selectedItems.push( locatedItem ); } } ); if ( selectedItems.length && isMultiple ) { make_selection( selectedItems ); } else if ( selectedItems.length ) { make_selection( selectedItems[ 0 ] ); } else { make_selection( false ); return; } }; /** * Searches array 'haystack' for objects that match 'description'. * * The 'description' object should take the form { id: number, text: string }. The first * object within the haystack that matches one of those two properties will be returned. * * If objects contain an array named 'children', then that array will also be searched. * * @param {Object} description * @param {Array} haystack * * @return {Object|boolean} */ function find_item( description, haystack ) { if ( ! _.isArray( haystack ) ) { return false; } for ( var index in haystack ) { var possible_match = haystack[ index ]; if ( possible_match.hasOwnProperty( 'id' ) && possible_match.id == description.id ) { // eslint-disable-line no-prototype-builtins,eqeqeq,max-len return possible_match; } if ( possible_match.hasOwnProperty( 'text' ) && possible_match.text == description.text ) { // eslint-disable-line no-prototype-builtins,eqeqeq,max-len return possible_match; } if ( possible_match.hasOwnProperty( 'children' ) && _.isArray( possible_match.children ) ) { // eslint-disable-line no-prototype-builtins,max-len var subsearch = find_item( description, possible_match.children ); if ( subsearch ) { return subsearch; } } } return false; } obj.getSelectClasses = function( $select ) { var classesToRemove = [ 'select2-hidden-accessible', 'hide-before-select2-init', ]; var originalClasses = $select.attr( 'class' ).split( /\s+/ ); return _.difference( originalClasses, classesToRemove ); }; obj.element = function( field, args ) { var $select = $( field ); var args = $.extend( {}, args ); // eslint-disable-line no-redeclare var carryOverData = [ // eslint-disable-line no-unused-vars 'depends', 'condition', 'conditionNot', 'condition-not', 'conditionNotEmpty', 'condition-not-empty', 'conditionEmpty', 'condition-empty', 'conditionIsNumeric', 'condition-is-numeric', 'conditionIsNotNumeric', 'condition-is-not-numeric', 'conditionChecked', 'condition-is-checked', ]; var $container; // Add a class for dropdown created $select.addClass( obj.selector.created.className() ); // args.debug = true; // For Reference we save the jQuery element as an Arg. args.$select = $select; // Auto define the Width of the Select2. args.dropdownAutoWidth = true; args.width = 'resolve'; // CSS for the container args.containerCss = {}; // Only apply visibility when it's a Visible Select2. if ( $select.is( ':visible' ) ) { args.containerCss.display = 'inline-block'; args.containerCss.position = 'relative'; } // CSS for the dropdown args.dropdownCss = {}; args.dropdownCss.width = 'auto'; // When we have this we replace the default with what's in the param. if ( $select.is( '[data-dropdown-css-width]' ) ) { args.dropdownCss.width = $select.data( 'dropdown-css-width' ); if ( ! args.dropdownCss.width || 'false' === args.dropdownCss.width ) { delete args.dropdownCss.width; delete args.containerCss; } } // By default we allow The field to be cleared args.allowClear = true; if ( $select.is( '[data-prevent-clear]' ) ) { args.allowClear = false; } // Pass the "Searching..." placeholder if specified if ( $select.is( '[data-searching-placeholder]' ) ) { args.formatSearching = $select.data( 'searching-placeholder' ); } // If we are dealing with a Input Hidden we need to set the Data for it to work if ( ! $select.is( '[data-placeholder]' ) && $select.is( '[placeholder]' ) ) { args.placeholder = $select.attr( 'placeholder' ); } // If we are dealing with a Input Hidden we need to set the Data for it to work. if ( $select.is( '[data-options]' ) ) { args.data = $select.data( 'options' ); } // With less then 10 args we wouldn't show the search. args.minimumResultsForSearch = 10; // Prevents the Search box to show if ( $select.is( '[data-hide-search]' ) ) { args.minimumResultsForSearch = Infinity; } // Makes sure search shows up. if ( $select.is( '[data-force-search]' ) ) { delete args.minimumResultsForSearch; } // Allows freeform entry if ( $select.is( '[data-freeform]' ) ) { args.createTag = obj.freefrom_create_search_choice; args.tags = true; $select.data( 'tags', true ); } if ( $select.is( '[multiple]' ) ) { args.multiple = true; // Set the max select items, if defined if ( $select.is( '[data-maximum-selection-size]' ) ) { args.maximumSelectionSize = $select.data( 'maximum-selection-size' ); } // If you don't have separator, add one (comma) if ( ! $select.is( 'data-separator' ) ) { $select.data( 'separator', ',' ); } if ( ! _.isArray( $select.data( 'separator' ) ) ) { args.tokenSeparators = [ $select.data( 'separator' ) ]; } else { args.tokenSeparators = $select.data( 'separator' ); } args.separator = $select.data( 'separator' ); // Define the regular Exp based on args.regexSeparatorElements = [ '^(' ]; args.regexSplitElements = [ '(?:' ]; $.each( args.tokenSeparators, function ( i, token ) { args.regexSeparatorElements.push( '[^' + token + ']+' ); args.regexSplitElements.push( '[' + token + ']' ); } ); args.regexSeparatorElements.push( ')$' ); args.regexSplitElements.push( ')' ); args.regexSeparatorString = args.regexSeparatorElements.join( '' ); args.regexSplitString = args.regexSplitElements.join( '' ); args.regexToken = new RegExp( args.regexSeparatorString, 'ig' ); args.regexSplit = new RegExp( args.regexSplitString, 'ig' ); } // Select also allows Tags, so we go with that too if ( $select.is( '[data-tags]' ) ) { args.tags = $select.data( 'tags' ); args.createSearchChoice = function( term, data ) { // eslint-disable-line no-unused-vars if ( term.match( args.regexToken ) ) { return { id: term, text: term }; } }; if ( 0 === args.tags.length ) { args.formatNoMatches = function() { return $select.attr( 'placeholder' ); }; } } // When we have a source, we do an AJAX call if ( $select.is( '[data-source]' ) ) { var source = $select.data( 'source' ); // For AJAX we reset the data args.data = { results: [] }; // Format for Parents breadcrumbs args.formatResult = function ( item, container, query ) { // eslint-disable-line no-unused-vars,max-len if ( 'undefined' !== typeof item.breadcrumbs ) { return $.merge( item.breadcrumbs, [ item.text ] ).join( ' » ' ); } return item.text; }; // instead of writing the function to execute the request we use Select2's convenient helper. args.ajax = { dataType: 'json', type: 'POST', url: obj.ajaxurl(), // parse the results into the format expected by Select2. processResults: function ( response, page, query ) { // eslint-disable-line no-unused-vars if ( ! $.isPlainObject( response ) || 'undefined' === typeof response.success ) { console.error( 'We received a malformed Object, could not complete the Select2 Search.' ); // eslint-disable-line max-len return { results: [] }; } if ( ! $.isPlainObject( response.data ) || 'undefined' === typeof response.data.results ) { console.error( 'We received a malformed results array, could not complete the Select2 Search.' ); // eslint-disable-line max-len return { results: [] }; } if ( ! response.success ) { if ( 'string' === $.type( response.data.message ) ) { console.error( response.data.message ); } else { console.error( 'The Select2 search failed in some way... Verify the source.' ); } return { results: [] }; } return response.data; }, }; // By default only send the source args.ajax.data = function( search, page ) { return { action: 'tribe_dropdown', source: source, search: search, page: page, args: $select.data( 'source-args' ), }; }; } // Attach dropdown to container in DOM. if ( $select.is( '[data-attach-container]' ) ) { // If multiple, attach container without search. if ( $select.is( '[multiple]' ) ) { $.fn.select2.amd.define( 'AttachedDropdownAdapter', [ 'select2/utils', 'select2/dropdown', 'select2/dropdown/attachContainer', ], function( utils, dropdown, attachContainer ) { return utils.Decorate( dropdown, attachContainer ); } ); args.dropdownAdapter = $.fn.select2.amd.require( 'AttachedDropdownAdapter' ); // If not multiple, attach container with search. } else { $.fn.select2.amd.define( 'AttachedWithSearchDropdownAdapter', [ 'select2/utils', 'select2/dropdown', 'select2/dropdown/search', 'select2/dropdown/minimumResultsForSearch', 'select2/dropdown/attachContainer', ], function( utils, dropdown, search, minimumResultsForSearch, attachContainer ) { var adapter = utils.Decorate( dropdown, attachContainer ); adapter = utils.Decorate( adapter, search ); adapter = utils.Decorate( adapter, minimumResultsForSearch ); return adapter; } ); args.dropdownAdapter = $.fn.select2.amd.require( 'AttachedWithSearchDropdownAdapter' ); } } // Save data on Dropdown $select.data( 'dropdown', args ); $container = $select.select2TEC( args ); // Propagating original input classes to the select2 container. $container.data( 'select2' ).$container.addClass( obj.getSelectClasses( $select ).join( ' ' ) ); // Propagating original input classes to the select2 container. $container.data( 'select2' ).$container.removeClass( 'hide-before-select2-init' ); $container.on( 'select2:open', obj.action_select2_open ); /** * @todo @bordoni Investigate how and if we should be doing this. * if ( carryOverData.length > 0 ) { carryOverData.map( function( dataKey ) { var attr = 'data-' + dataKey; var val = $select.attr( attr ); if ( ! val ) { return; } this.attr( attr, val ); }, $container ); } */ }; obj.ajaxurl = function() { if ( 'undefined' !== typeof window.ajaxurl ) { return window.ajaxurl; } if ( 'undefined' !== typeof TEC && 'undefined' !== typeof TEC.ajaxurl ) { return TEC.ajaxurl; } console.error( 'Dropdowns framework cannot properly do an AJAX request without the WordPress `ajaxurl` variable setup.' ); // eslint-disable-line max-len }; obj.action_select2_open = function( event ) { // eslint-disable-line no-unused-vars var $select = $( this ); var select2Data = $select.data( 'select2' ); var $search = select2Data.$dropdown.find( obj.selector.searchField ); // eslint-disable-line es5/no-es6-methods,max-len select2Data.$dropdown.addClass( obj.selector.dropdown.className() ); // If we have a placeholder for search, apply it! if ( $select.is( '[data-search-placeholder]' ) ) { $search.attr( 'placeholder', $select.data( 'searchPlaceholder' ) ); } }; /** * Configure the Drop Down Fields * * @param {jQuery} $fields All the fields from the page * @param {array} args Allow extending the arguments * * @return {jQuery} Affected fields */ obj.dropdown = function( $fields, args ) { var $elements = $fields.not( '.select2-offscreen, .select2-container, ' + obj.selector.created.className() ); // eslint-disable-line max-len if ( 0 === $elements.length ) { return $elements; } // Default args to avoid Undefined if ( ! args ) { args = {}; } $elements .each( function( index, element ) { // Apply element to all given items and pass args obj.element( element, args ); } ); // return to be able to chain jQuery calls return $elements; }; $( function() { $( obj.selector.dropdown ).tribe_dropdowns(); } ); // Addresses some problems with Select2 inputs not being initialized when using a browser's "Back" button. $( window ).on( 'unload', function() { $( obj.selector.dropdown ).tribe_dropdowns(); }); } )( jQuery, tribe_dropdowns, window.underscore || window._ ); /*! elementor-pro - v3.5.1 - 10-11-2021 */ .elementor-cta,.elementor-widget-call-to-action .elementor-widget-container{overflow:hidden}.elementor-cta{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-cta--skin-classic .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--skin-classic .elementor-cta__bg-wrapper{position:relative;min-height:200px;width:100%}.elementor-cta--skin-classic .elementor-cta__content{-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s;width:100%;background-color:#f7f7f7}.elementor-cta--skin-classic .elementor-cta__content-item,.elementor-cta--skin-classic .elementor-cta__content-item .elementor-icon{color:#55595c;border-color:#55595c;fill:#55595c}.elementor-cta--skin-classic .elementor-cta__button.elementor-button{color:#55595c;border-color:#55595c}.elementor-cta--skin-cover .elementor-cta{display:block}.elementor-cta--skin-cover .elementor-cta__bg-wrapper{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s;width:100%}.elementor-cta--skin-cover .elementor-cta__content{min-height:280px}.elementor-cta--skin-cover .elementor-cta__button.elementor-button,.elementor-cta--skin-cover .elementor-cta__content-item,.elementor-cta--skin-cover .elementor-cta__content-item .elementor-icon{color:#fff;border-color:#fff}.elementor-cta--layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--layout-image-left .elementor-cta,.elementor-cta--layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--layout-image-left .elementor-cta__content,.elementor-cta--layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.elementor-cta__bg,.elementor-cta__bg-overlay{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s}.elementor-cta__bg-wrapper{z-index:1;overflow:hidden}.elementor-cta__bg{-webkit-background-size:cover;background-size:cover;background-position:50%;z-index:1}.elementor-cta__bg-overlay{z-index:2}.elementor-cta__button.elementor-button{cursor:pointer;-ms-flex-item-align:center;align-self:center;margin-left:auto;margin-right:auto;border:2px solid #fff;background:transparent}.elementor-cta__button.elementor-button:hover{background:transparent;text-decoration:none}.elementor-cta__title{font-size:23px}.elementor-cta__content{z-index:1;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;padding:35px;width:100%}.elementor-cta__content,.elementor-cta__content-item{position:relative;-webkit-transition:.5s;-o-transition:.5s;transition:.5s;color:#fff}.elementor-cta__content-item{width:100%;margin:0}.elementor-cta__content-item:not(:last-child){margin-bottom:15px}.elementor-cta__content-item .elementor-icon{color:#fff}.elementor-cta--valign-top .elementor-cta__content{-ms-flex-line-pack:start;align-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.elementor-cta--valign-middle .elementor-cta__content{-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.elementor-cta--valign-bottom .elementor-cta__content{-ms-flex-line-pack:end;align-content:flex-end;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.elementor-cta:hover .elementor-cta__bg-overlay{background-color:rgba(0,0,0,.3)}@media (max-device-width:1024px){.elementor-cta{cursor:pointer}}@media (min-width:-1px){.elementor-cta--widescreen-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--widescreen-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--widescreen-layout-image-left .elementor-cta,.elementor-cta--widescreen-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--widescreen-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--widescreen-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--widescreen-layout-image-left .elementor-cta__content,.elementor-cta--widescreen-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--widescreen-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--widescreen-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--laptop-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--laptop-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--laptop-layout-image-left .elementor-cta,.elementor-cta--laptop-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--laptop-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--laptop-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--laptop-layout-image-left .elementor-cta__content,.elementor-cta--laptop-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--laptop-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--laptop-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--tablet_extra-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--tablet_extra-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--tablet_extra-layout-image-left .elementor-cta,.elementor-cta--tablet_extra-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--tablet_extra-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--tablet_extra-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet_extra-layout-image-left .elementor-cta__content,.elementor-cta--tablet_extra-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--tablet_extra-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--tablet_extra-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:1024px){.elementor-cta--tablet-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--tablet-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--tablet-layout-image-left .elementor-cta,.elementor-cta--tablet-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--tablet-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--tablet-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet-layout-image-left .elementor-cta__content,.elementor-cta--tablet-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--tablet-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--tablet-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--mobile_extra-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--mobile_extra-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--mobile_extra-layout-image-left .elementor-cta,.elementor-cta--mobile_extra-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--mobile_extra-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--mobile_extra-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile_extra-layout-image-left .elementor-cta__content,.elementor-cta--mobile_extra-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--mobile_extra-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--mobile_extra-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:767px){.elementor-cta--mobile-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--mobile-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--mobile-layout-image-left .elementor-cta,.elementor-cta--mobile-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--mobile-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--mobile-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile-layout-image-left .elementor-cta__content,.elementor-cta--mobile-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--mobile-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--mobile-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.elementor-ribbon{position:absolute;z-index:1;top:0;left:0;right:auto;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);width:150px;overflow:hidden;height:150px}.elementor-ribbon-inner{text-align:center;left:0;width:200%;-webkit-transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);-ms-transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:#000;color:#fff}.elementor-ribbon.elementor-ribbon-left{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);left:0;right:auto}.elementor-ribbon.elementor-ribbon-right{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);left:auto;right:0}
Warning: Cannot modify header information - headers already sent by (output started at /home1/brighdbt/public_html/premills.com/wp-content/plugins/svg-support/functions/thumbnail-display.php:1) in /home1/brighdbt/public_html/premills.com/wp-includes/feed-rss2.php on line 8
Bookkeeping Archives - premier mills https://www.premills.com/category/bookkeeping/ Wed, 28 May 2025 16:08:12 +0000 en-US hourly 1 https://wordpress.org/?v=6.8.1 https://www.premills.com/wp-content/uploads/2021/08/PM_No.1_Favicon-01.png Bookkeeping Archives - premier mills https://www.premills.com/category/bookkeeping/ 32 32 Suspense account definition https://www.premills.com/suspense-account-definition/ https://www.premills.com/suspense-account-definition/#respond Wed, 03 Apr 2024 15:37:12 +0000 https://www.premills.com/?p=3539 For example, sender sends payment from US ACH account to a BB mobile number in Japan. The customer receives an alert on their mobile to withdraw this money from a BB agent. Until they withdraw, the remittance stays in a suspense account, earning the financial institute or the BB enabler float/interest on that money. When […]

The post Suspense account definition appeared first on premier mills.

]]>
suspense account definition

For example, sender sends payment from US ACH account to a BB mobile number in Japan. The customer receives an alert on their mobile to withdraw this money from a BB agent. Until they withdraw, the remittance stays in a suspense account, earning the financial institute or the BB enabler float/interest on that money. When customer withdrawal is completed, the money moves from the suspense account to the account of the agent who facilitated the cash withdrawal. The most important point to understand is that transactions are recorded in the suspense account only temporarily and need to be relocated to their correct permanent accounts as soon as possible. These potentially incorrect financial transactions are either initially recorded in the suspense account, or moved from the general ledger into the suspense account.

suspense account definition

Transaction Matching

  • It is used to temporarily store transactions that are uncertain or incomplete until they can be properly classified and recorded in the general ledger.
  • They also contribute to the overall transparency of accounting processes by allowing for proper investigation and reconciliation of problematic items.
  • A mortgage suspense account is a specific type of suspense account used in the world of home loans and mortgages.
  • A company’s general ledger needs to show all of your organisation’s financial accounts, including your suspense account.
  • The use of a mortgage suspense account helps ensure that payments are not misapplied or remain unaccounted for while processing.
  • At times, all the required details for a particular transaction are not available but it still needs to be recorded in order to keep the accounting books updated.

Therefore, transactions in the suspense account should be cleared regularly and as soon as possible. The suspense account provides a place for accountants to temporarily log and track incomplete transactions until more information is obtained. Investing and brokerage suspense accounts temporarily hold investors’ funds until the money is allocated towards the purchase of new investments. Suspense accounts are commonly used when there is no paper trail for the transaction or the nature of it hasn’t been informed yet. Nevertheless, the size of these accounts should be fairly small since most transactions are easily categorized in a regular business operation. A company receives a payment paid into their bank account, but the transaction doesn’t have any reference details to be able to identify what the payment is for.

suspense account definition

What is a suspense balance mortgage?

suspense account definition

This documentation is essential for validating the transaction’s legitimacy and for satisfying the requirements of a thorough audit trail. When sufficient information becomes available, the entry is reclassified to the appropriate ledger account. For instance, an unidentified payment identified as a customer invoice settlement is moved from the suspense account to accounts receivable.

  • The suspense account is situated on the general ledger and is used to temporarily store specific transaction amounts.
  • Students should know that the problem will not be solved by just making the trial balance agree with the help of a suspense account.
  • While other trial balance errors do exist (e.g., error of omission, commission, principle, original entry, reversal of entries), they do not affect the suspense account.
  • Suspense accounts help to prevent errors in final financial statements and ensures that transactions are accurately recorded.
  • The unreconciled differences are placed in suspense accounts until the underlying causes are investigated and resolved, at which point the balances can be adjusted to reconcile the accounts accurately.
  • When a business receives a payment that cannot be immediately matched to an outstanding invoice or customer account, a suspense account can be used to hold the payment until the reconciliation can be made.

Credit Risk Management

suspense account definition

The IDC report highlights HighRadius’ integration of machine learning across its AR products, enhancing payment matching, credit management, and cash forecasting capabilities. In this blog, we will demystify what suspense accounts are, explore different types, and dive into examples that bring these concepts to life. You will also understand the potential suspense account definition challenges of using a suspense account and how you can combat those challenges. CAs, experts and businesses can get GST ready with Clear GST software & certification course. Our GST Software helps CAs, tax experts & business to manage returns & invoices in an easy manner.

suspense account definition

  • Identifying an amount shouldn’t be an impossible task (if so, it may suggest fraud).
  • The process of resolving entries in a suspense account is methodical, requiring diligent examination of each transaction to determine its rightful place in the financial records.
  • Let’s suppose you have been alerted that a remittance someone sent you from abroad is ready for withdrawal.
  • In situations involving complex financial transactions or unique circumstances, it can be challenging to determine the appropriate accounts to record the entries promptly.

Regular and timely reconciliation activities can minimize the need for suspense accounts by ensuring the accuracy and completeness of financial records. Accounting for Technology Companies Students should know that the problem will not be solved by just making the trial balance agree with the help of a suspense account. This is a forced agreement, and the errors still exist in the books of accounts. A suspense account is created only to avoid the further delay in the preparation of final accounts. In the next period, the books of accounts will be thoroughly checked, errors will be detected and rectified, and the profit for the previous period will be adjusted accordingly.

  • This is a forced agreement, and the errors still exist in the books of accounts.
  • Suspense accounts serve as temporary holding areas for transactions that cannot be immediately classified.
  • A suspension account is an account used for any expenditure or balance that can not be established temporarily.
  • There are times when the company receives money even before they make a contract or a policy.
  • The amount of money held in suspense account is referred to as the “suspense balance.”

Treasury Management

However, all transactions require complete and accurate information before they can be entered into the financial records. Another instance in which having a suspense account comes in handy is when a trial balance is out of balance, meaning the debit and credit columns do not match. When an accounting error is identified, such as a misclassification of expenses, the incorrect entry would be moved to a suspense account while the error net sales is investigated and then ultimately corrected.

The post Suspense account definition appeared first on premier mills.

]]>
https://www.premills.com/suspense-account-definition/feed/ 0
What Is FICA Tax? How To Calculate It in 2025 https://www.premills.com/what-is-fica-tax-how-to-calculate-it-in-2025/ https://www.premills.com/what-is-fica-tax-how-to-calculate-it-in-2025/#respond Fri, 02 Sep 2022 09:35:04 +0000 https://www.premills.com/?p=7240 Unlike Social Security tax, Medicare tax applies to all earned income without a cap. The FICA tax applies to earned income only and is not imposed on investment income such as rental income, interest, or dividends. The Federal Insurance Contributions Act (FICA /ˈfaɪkə/) is a United States federal payroll (or employment) tax payable by both […]

The post What Is FICA Tax? How To Calculate It in 2025 appeared first on premier mills.

]]>
federal insurance contributions act (fica) taxes include

Unlike Social Security tax, Medicare tax applies to all earned income without a cap. The FICA tax applies to earned income only and is not imposed on investment income such as rental income, interest, or dividends. The Federal Insurance Contributions Act (FICA /ˈfaɪkə/) is a United States federal payroll (or employment) tax payable by both employees and employers to fund Social Security and Medicare1—federal programs that provide benefits for retirees, people with disabilities, and children of deceased workers. The Federal Unemployment Tax Act (FUTA) generates money for national unemployment programs through taxes imposed on nearly any business fica meaning with more than one worker.

federal insurance contributions act (fica) taxes include

Effective Date of 1997 Amendment

federal insurance contributions act (fica) taxes include

FICA combines Social Security and Medicare taxes for a total rate of 15.3%, but the cost is split between each party. FICA refers to the 1935 U.S. law and later the 1965 law that mandated that payroll taxes be paid by workers and employers to fund the nation’s Social Security and Medicare programs. FICA taxes are mandatory. Self-employed individuals, including freelancers and independent contractors, pay both the employee and employer portions Accounting Security of FICA taxes. This results in a combined rate of 15.3%—12.4% for Social Security and 2.9% for Medicare—applied to net earnings. Workers have FICA taxes automatically deducted from their paychecks.

  • (3) and substituted therein “4.6” for “4.4”, and substituted “5.0” for “4.85” in par.
  • (b)(7)(C).
  • In the case of an employer, there shall be allowed as a credit against applicable employment taxes for each calendar quarter an amount equal to 100 percent of the qualified family leave wages paid by such employer with respect to such calendar quarter.
  • FUTA taxes fall on employers, not their staff.
  • 92–603, §135(b)(3), substituted “1985, the rate shall be 1.45 percent” for “1992, the rate shall be 1.2 percent”.
  • By understanding and utilizing these options, you can potentially reduce the amount you owe and increase your refund.
  • 92–336 applicable only with respect to remuneration paid after December 31, 1972, see section 204(c) of Pub.

Federal Legislative Branch Employees; Exclusion of Certain Retirement Contributions for Purposes of Subsection (b)( (G)

(a)(8)(B). 836, §201(h)(1), included within definition of wages cash remuneration of $150 or more, and cash remuneration computed on a time basis where the employee performs agricultural labor for the employer on 20 days or more during the calendar year. (k)(1)(A). 86–778, §105(a)(1), (2), struck out “and that at least two-thirds of its employees concur in the filing of the certificate” after “extended to service performed by its employees”, and substituted “of each employee (if any) who concurs” for “of each employee who concurs”.

( Wages

  • 90–248, §403(i)(1), substituted “section 5351(2) of title 5, United States Code” for “section 2 of the Act of August 4, 1967” and struck out “; 5 U.S.C., sec. 1052” at end of parenthetical text.
  • For these individuals, there’s a 12.4% Social Security tax, plus a 2.9% Medicare tax.
  • 105–34, title IX, §968, Aug. 5, 1997, 111 Stat.
  • The OASI Trust Fund provides monthly payments to retired workers and their eligible dependents, while the DI Trust Fund supports individuals unable to work due to qualifying disabilities.
  • This is because he feared that politicians in the US would utilize the funds from federal revenue to fulfill personal purposes.
  • If you are looking to outsource Paychex can help you manage HR, payroll, benefits, and more from our industry leading all-in-one solution.

(b)(6)(C)(vi). 90–248, §403(i)(2), substituted “subchapter III of chapter 83 of title 5, United States Code,” for “the Civil Service Retirement Act”. (b)(6)(C)(iv).

federal insurance contributions act (fica) taxes include

federal insurance contributions act (fica) taxes include

Social Security retained earnings limits the amount of income subject to taxation. For 2025’s earnings, that limit is $176,100. This amount is also referred to as the “wage base limit” or the “taxable maximum.” It changes every year depending on the national average wage index. However, this limit only applies to employees who pay Social Security taxes. There is no wage base limit for Medicare taxes.

The post What Is FICA Tax? How To Calculate It in 2025 appeared first on premier mills.

]]>
https://www.premills.com/what-is-fica-tax-how-to-calculate-it-in-2025/feed/ 0
Construction CPAs & Advisors James Moore & Co https://www.premills.com/construction-cpas-advisors-james-moore-co/ https://www.premills.com/construction-cpas-advisors-james-moore-co/#respond Wed, 18 May 2022 17:48:29 +0000 https://www.premills.com/?p=7180 Outsourcing from a national accounting and advisory services firm provides skilled professionals experienced in handling various contract types. This ensures correct accounting treatments, accurate government financial reporting, and optimized cost allocation. Consequently, businesses can focus on performance without worrying about contract-specific accounting complexities. We ensure that your government contract financial management aligns with federal regulations […]

The post Construction CPAs & Advisors James Moore & Co appeared first on premier mills.

]]>
contractor accounting services

Outsourcing from a national accounting and advisory services firm provides skilled professionals experienced in handling various contract types. This ensures correct accounting treatments, accurate government financial reporting, and optimized cost allocation. Consequently, businesses can focus on performance without worrying about contract-specific accounting complexities. We ensure that your government contract financial management aligns with federal regulations such QuickBooks as the FAR (Federal Acquisition Regulation) and CAS (Cost Accounting Standards). For established firms generating $5M–$15M+ in annual revenue, Platinum offers a deeper layer of financial strategy.

contractor accounting services

Construction Accounting Experts

contractor accounting services

HM&M Group, LLC is a licensed independent CPA firm that provides attest services to its clients, and HM&M Advisory, LLC and its subsidiary entities provide tax, advisory, and business consulting services to their clients. HM&M Advisory, LLC and its subsidiary entities are not licensed CPA firms. The entities falling under the HM&M brand are independently owned and are not liable for the services provided by any other entity providing services under the HM&M brand.

Billing Services Contract

contractor accounting services

We recognize this, which is why your independent contractor accounting services will be customized to fit your specific needs and goals. Accounting services is the process of recording financial transactions that pertain to a business. The accounting process includes summarising, analysing and eventually reporting all of the transactions to the UK tax and reporting authorities. If you are a contractor, a good starting point is to choose accountants with a specialist knowledge in the contracting area that you are unlikely to find in an accountant on the high street. With strong industry partnerships in place, we can connect you with experts who can provide enhanced value to your organization.

  • Depending on your company’s needs, we can grow or shrink the scope of our services to provide the targeted solutions you’re looking for.
  • Get in touch with Porte Brown to learn more about the benefits of employing professional construction accountants.
  • And you have multiple construction jobs running simultaneously, with each job requiring you to monitor its budget, cash flow, job progress, expenditures… It’s almost like running several businesses at once.
  • Is a licensed independent CPA firm that provides attest services to its clients.
  • You’ll then transfer these funds, along with your own contributions, via the Electronic Federal Tax Payment System (EFTPS).
  • Accounting and financial reporting can become overwhelming in the construction industry.
  • Come to think of it, neither does wrestling with wage and hours issues, or wishing you had better tools to interpret your WIP and real-time project profitability.

Comprehensive Accounting for Contractors

Finally, there’s the AIA progress billing, named after the American Institute of Architects. It’s a method that charges the client for a certain percentage of work done for a given billing period. The unique needs of the construction Accounting for Technology Companies industry mean that construction accounting services adhere to principles different from standard accounting. The Advanced plan adds the ability to create accurate estimates and provide full financial transparency.

  • We are members of the Construction Financial Management Association and participate in the American Institute of Certified Public Accountants Construction & Real Estate training annually.
  • Construction accounting services are the cornerstone of a thriving construction business, focused on specific needs like job costing, compliance with tax laws, and strategic financial planning.
  • We address this by carefully tracking project progress and evaluating both direct and indirect costs to ensure precise job costing.
  • This is a powerful option for high-growth construction entrepreneurs looking to refine processes and accelerate the performance of their construction business.
  • The payroll module uses Davis Bacon wage rates and includes union fringe and state tax rates.
  • The whole system has bank integration so that you don’t have to waste time with time-consuming reconciliations.

Best for Client Portal

We Pick up our phones, work pro-actively, and exclusively work with businesses like yours. For every business decision you face, Grassi’s Construction advisors have the solutions you need to proceed confidently in the right direction. Download the 2024 Construction and Architecture & Engineering Industry Survey Report to access one of the industry’s most comprehensive benchmarking studies. Learn how a 3PL company improved efficiency by partnering with Invensis and minimizing errors in AP and AR invoice processing.

contractor accounting services

  • Therefore, many UK contractors who are VAT registered must maintain their company’s records on a digital system.
  • See if you’re on track with the report designer that allows you to customize construction reports and financial statements.
  • Audit expertise in WIP schedules, revenue recognition, and industry disclosures.
  • Inaccuracies can lead to audits or disputes, making it more complex than standard bookkeeping.
  • We ensure compliance, accuracy, and efficiency in managing government project finances, helping your organization navigate complex regulations while focusing on growth and seamless operations.

They have always provided us with a comprehensive and top-rated service, allowing us to meet deadlines internally and externally. Precision accounting for residential or commercial land development companies, weekly comprehensive financial reports via email, and monthly Zoom® financial reports review meetings with your team. Precision real estate portfolio accounting for residential, commercial, or mixed real estate portfolios, weekly comprehensive financial reports via email, and monthly Zoom® financial reports review meetings with your team.

Tax Planning

The timely performance of the Services will depend on the timely receipt of complete Client data. With us as your partner, you can choose from a body of professional consultants to meet your accounting needs and beyond. Whether you need an outsourced CFO or controller, contracts and procurement manager, information technology expert or human resource advisor, our team can be your best ally.

Service Area for Outsourced & Onsite Contractor Bookkeeping Services

Struggling to get timely financial statements so you can increase bonding? Come to think of it, neither does wrestling with wage and hours issues, or wishing you had better tools to interpret your WIP and real-time project profitability. As you’ve probably learned by now, taxes are an inevitable part of doing business in the United States.

Milwaukee’s Best Value in Construction Accounting

It aligns with the project completion ratio and most lenders or guarantors require this. contractor accounting services Companies that had client tracking, software integrations and mobile apps performed better than those that didn’t. Regarding accounting, Safe 300 breaks tasks down into assignments and work orders.

The post Construction CPAs & Advisors James Moore & Co appeared first on premier mills.

]]>
https://www.premills.com/construction-cpas-advisors-james-moore-co/feed/ 0
How do you clean up an accounting mess? https://www.premills.com/how-do-you-clean-up-an-accounting-mess/ https://www.premills.com/how-do-you-clean-up-an-accounting-mess/#respond Wed, 18 Nov 2020 17:16:31 +0000 https://www.premills.com/?p=3534 When you outsource your bookkeeping you not only save time, but get accurate financial insights so you can make informed decisions for your business. The duration AI in Accounting of Clean-Up and Catch-Up Bookkeeping can vary depending on factors such as the complexity of the records, the extent of neglect, and the availability of documentation. […]

The post How do you clean up an accounting mess? appeared first on premier mills.

]]>
bookkeeping cleanup

When you outsource your bookkeeping you not only save time, but get accurate financial insights so you can make informed decisions for your business. The duration AI in Accounting of Clean-Up and Catch-Up Bookkeeping can vary depending on factors such as the complexity of the records, the extent of neglect, and the availability of documentation. While some cases may require a few weeks to update records, others may take several months, especially if there are significant discrepancies or a backlog of transactions. Allocating sufficient time and resources to ensure thoroughness and accuracy in the process is essential.

  • You might need to contact clients or vendors to retrieve missing information, which can add time and complexity to the project.
  • This comprehensive accounting glossary defines essential accounting terms.
  • I have 1 employee and am paid by clients via fixed monthly retainers.
  • Sort through invoices, credit card statements, receipts, bank statements, and other necessary financial data.

Signs you need to clean up your books

bookkeeping cleanup

Pramod has over 11 years of experience relating to finance and accounts in diversified industries. He is an expert in resource and process optimization resulting in greater operational efficiencies. It is imperative to ensure that the documentation bookkeeping cleanup is comprehensive.

  • Maintaining accurate records of fixed assets and inventory improves financial transparency and ensures compliance with reporting requirements.
  • Financial Cents offers a workflow dashboard with a centralized hub for all work-related information.
  • Still, every business is unique, and some may require more than one bookkeeping clean up, depending on their specific needs.
  • The first step is receiving client information (which can often be the most challenging step in the process).
  • Questions and answers about starting, owning, and growing a small business only.

Step 3: Develop month-close procedures and documents.

bookkeeping cleanup

Software like QuickBooks Online will automatically reconcile accounts if you’ve given the software access to automatic feeds. However, the reconciliation should still be reviewed for accuracy and compared to bank statements. The process should be reviewed regularly to look for software solutions that can save you time and hassle. Modern software can scan invoices and import accounts payable information directly into various software. Financial institutions allow access to bank feeds which allow you to import most transactions directly.

  • The chart of accounts shows a company’s historical trends and forms the basis of a company’s forecast.
  • Just like scheduling a recurring meeting, block out time specifically for bookkeeping.
  • By organizing and cleaning up your expenses, you’ll have a clearer picture of your spending and can make more informed financial decisions in the future.
  • If they don’t, adjust your records to match your bank or credit card statement to your accounting entries.

Services

bookkeeping cleanup

Whether you’re preparing for your annual tax return or filing quarterly taxes, accurate and organized bookkeeping is critical. So, let’s get down to business and get that accounting in order with catch up bookkeeping. It’s fair to say that bookkeeping cleanup is at the very core of an organized financial system, as it enables businesses to navigate their growth journey with confidence. This is why having cleanups at least once a year, either by an in-house accountant or an outsourced professional are necessary for any company aiming to thrive.

bookkeeping cleanup

Tools to Organize Your Documents

bookkeeping cleanup

Our Bookkeeping Cleanup Service is more than just tidying up; it’s about setting a new standard for your business’s financial practices. Say goodbye to the anxiety of messy books and embrace a future of financial clarity and control. We take monthly bookkeeping off your plate and deliver you your financial statements by the 15th or 20th of each month.

  • First, align your bank and credit card statements with your bookkeeping records or accounting software.
  • Beyond accounting software, think about other areas you can automate.
  • It’s rare for freelancers or bookkeeping firms to offer exclusive pricing for cleanup only.
  • Review all expenses to confirm they are properly classified according to your chart of accounts.
  • Set up a regular review schedule to maintain clean books and catch discrepancies before they become major issues.
  • Payroll errors can lead to tax penalties, compliance issues, and unhappy employees, making reviewing payroll records during a cleanup crucial.

However, they must understand how your company operates to build a chart of accounts structured specifically for your business. Cleaning up your books isn’t a one-time project, but there are things you can income summary do to get back on track. That said, we recommend working with an experienced professional for optimal results! Below we offer a bookkeeping cleanup checklist for startups and small business owners that aren’t sure where to begin. Yes, you can, especially if you have a good understanding of accounting principles and your business’s financial records are relatively straightforward. Accurate transaction categorization, eliminating negative numbers, and a balanced balance sheet are vital for avoiding penalties and preparing for tax season (QuickBooks).

The post How do you clean up an accounting mess? appeared first on premier mills.

]]>
https://www.premills.com/how-do-you-clean-up-an-accounting-mess/feed/ 0