def save_close(self):
        '''
        Method to save the study_site_table as it is seen
        by the user (matching sites that were accepted by user 
        are removed from the saved table because it will be pushed)
        '''
        self.updated_from_query_matches = False

        # Retrieve study_site_table data from user view
        self.save_data = self.sitetablemodel.data(None, QtCore.Qt.UserRole)

        # If there are no site because they are already
        # in the database then create an empty dataframe
        if len(self.save_data) == 0:
            self.save_data = self.save_data.append(
                DataFrame(
                    {
                        'study_site_key': 'NULL',
                        'lat_study_site': 'nan',
                        'lng_study_site': 'nan',
                        'descript': 'NULL'
                    },
                    index=[0]))
        else:
            pass

        # Append dataframe with current LTER
        lterid_df = hlp.produce_null_df(1, ['lter_table_fkey'],
                                        len(self.save_data), self.lter)
        print(lterid_df)
        self.save_data = concat([self.save_data, lterid_df],
                                axis=1).reset_index(drop=True)

        #Convert types and strip stings
        numeric_cols = ['lat_study_site', 'lng_study_site']
        self.save_data[self.save_data.columns.difference(
            numeric_cols)] = self.save_data[self.save_data.columns.difference(
                numeric_cols)].applymap(str)
        self.save_data[self.save_data.columns.difference(
            numeric_cols)] = self.save_data[self.save_data.columns.difference(
                numeric_cols)].applymap(lambda x: x.strip())
        self.save_data[numeric_cols] = to_numeric(self.save_data[numeric_cols],
                                                  errors='coerce')

        print('Pushed dataset: ', self.save_data)
        self.facade.push_tables['study_site_table'] = self.save_data

        # Helpers to keep track of user changes to site names
        hlp.write_column_to_log(self.sitelned, self._log, 'sitetable_c')
        oldsitetable = hlp.produce_null_df(
            len(self.save_data.columns),
            self.save_data.columns.values.tolist(), len(self.save_data), 'nan')
        hlp.updated_df_values(oldsitetable, self.save_data, self._log,
                              'sitetable')

        # Signal to confim this form has been completed and
        # user can move on to other tables
        self.site_unlocks.emit(self.facade._data)
        self._log.debug('facade site levels' +
                        ' '.join(self.facade._valueregister['sitelevels']))
        self._log.debug(
            'sitelevels (Save Block): ' +
            ' '.join(self.save_data['study_site_key'].values.tolist()))
        self.close()
        def save_close(self):
            self.update_data()
            session = orm.Session()
            sitecheck = session.query(
                orm.Sitetable.siteid).order_by(
                    orm.Sitetable.siteid)
            session.close()
            sitecheckdf = read_sql(
                sitecheck.statement, sitecheck.session.bind)
            changed_df = self.sitetablemodel.data(
                None, QtCore.Qt.UserRole)
            changed_site_list = changed_df['siteid'].values.tolist()

            if sitecheckdf is not None:
                if len(sitecheckdf) == 0:
                   checker = True
                else:
                    records_entered = sitecheckdf[
                        'siteid'].values.tolist()
                    check = [
                        x for x in
                        list(set(records_entered)) if
                        x in changed_site_list]
                    checker = (len(check) == 0)
            else:
                checker = True

            if checker is True:
                pass
            else:
                self._log.debug('SiteId present under different LTER')
                self.error.showMessage(
                    'Site abbreviations already in database ' +
                    'from an different LTER. Please modify ' +
                    'site abbreviations.')
                raise AttributeError(
                    'SiteID already present under different LTER')

            self.save_data = self.sitetablemodel.data(
                None, QtCore.Qt.UserRole)

            # Updating  site levels
            self.facade.register_site_levels(
                self.facade._data[
                    self.siteloc[
                        'siteid']].drop_duplicates().values.tolist())

            if len(self.save_data) == 0:
                self.save_data= self.save_data.append(
                    DataFrame(
                        {
                            'siteid':'NULL',
                            'lat': 'nan',
                            'lng': 'nan',
                            'descript': 'NULL'
                        }, index=[0])
                )
            else:
                pass

            lterid_df = hlp.produce_null_df(
                1, ['lterid'], len(self.save_data), self.lter)
            print(lterid_df)

            self.save_data = concat(
                [self.save_data, lterid_df]
                , axis=1).reset_index(drop=True)
            print(self.save_data)
            self.facade.push_tables['sitetable'] = self.save_data

            hlp.write_column_to_log(
                self.sitelned, self._log, 'sitetable_c')

            oldsitetable = hlp.produce_null_df(
                len(self.save_data.columns),
                self.save_data.columns.values.tolist(),
                len(self.save_data),
                'nan'
            )
            hlp.updated_df_values(
                oldsitetable, self.save_data, self._log, 'sitetable'
            )

            self.climatesite_unlocks.emit(self.facade._data)
            self._log.debug(
                'facade site levels' +
                ' '.join(self.facade._valueregister['sitelevels']))
            self.submit_change()
            self.close()
    def save_close(self):
        self.update_data()
        session = orm.Session()
        sitecheck = session.query(orm.Sitetable.siteid).order_by(
            orm.Sitetable.siteid)
        session.close()
        sitecheckdf = read_sql(sitecheck.statement, sitecheck.session.bind)
        changed_df = self.sitetablemodel.data(None, QtCore.Qt.UserRole)
        changed_site_list = changed_df['siteid'].values.tolist()

        if sitecheckdf is not None:
            if len(sitecheckdf) == 0:
                checker = True
            else:
                records_entered = sitecheckdf['siteid'].values.tolist()
                check = [
                    x for x in list(set(records_entered))
                    if x in changed_site_list
                ]
                checker = (len(check) == 0)
        else:
            checker = True

        if checker is True:
            pass
        else:
            self._log.debug('SiteId present under different LTER')
            self.error.showMessage('Site abbreviations already in database ' +
                                   'from an different LTER. Please modify ' +
                                   'site abbreviations.')
            raise AttributeError('SiteID already present under different LTER')

        self.save_data = self.sitetablemodel.data(None, QtCore.Qt.UserRole)

        # Updating  site levels
        self.facade.register_site_levels(self.facade._data[
            self.siteloc['siteid']].drop_duplicates().values.tolist())

        if len(self.save_data) == 0:
            self.save_data = self.save_data.append(
                DataFrame(
                    {
                        'siteid': 'NULL',
                        'lat': 'nan',
                        'lng': 'nan',
                        'descript': 'NULL'
                    },
                    index=[0]))
        else:
            pass

        lterid_df = hlp.produce_null_df(1, ['lterid'], len(self.save_data),
                                        self.lter)
        print(lterid_df)

        self.save_data = concat([self.save_data, lterid_df],
                                axis=1).reset_index(drop=True)
        print(self.save_data)
        self.facade.push_tables['sitetable'] = self.save_data

        hlp.write_column_to_log(self.sitelned, self._log, 'sitetable_c')

        oldsitetable = hlp.produce_null_df(
            len(self.save_data.columns),
            self.save_data.columns.values.tolist(), len(self.save_data), 'nan')
        hlp.updated_df_values(oldsitetable, self.save_data, self._log,
                              'sitetable')

        self.climatesite_unlocks.emit(self.facade._data)
        self._log.debug('facade site levels' +
                        ' '.join(self.facade._valueregister['sitelevels']))
        self.submit_change()
        self.close()
    def save_close(self):
        '''
        Method to save the study_site_table as it is seen
        by the user (matching sites that were accepted by user 
        are removed from the saved table because it will be pushed)
        '''
        update_message = QtGui.QMessageBox.question(
            self,'Message', 'Did you update records?',
            QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
        if update_message == QtGui.QMessageBox.No:
            return
        else:
            pass

        # Retrieve study_site_table data from user view
        save_data = self.sitetablemodel.data(
            None, QtCore.Qt.UserRole)
        self.save_data = save_data.drop_duplicates()
        print('saved data (initial): ', self.save_data)
        self.facade.register_site_levels(
            self.facade._data[
                self.siteloc[
                    'study_site_key']].drop_duplicates().values.tolist())

        # If there are no site because they are already
        # in the database then create an empty dataframe
        if len(self.save_data) == 0:
            self.save_data= self.save_data.append(
                DataFrame(
                    {
                        'study_site_key':'NULL',
                        'lat_study_site': 'nan',
                        'lng_study_site': 'nan',
                        'descript': 'NULL'
                    }, index=[0])
            )
        else:
            pass

        # Append dataframe with current LTER 
        lterid_df = hlp.produce_null_df(
            1, ['lter_table_fkey'], len(self.save_data), self.lter)
        print(lterid_df)
        self.save_data = concat(
            [self.save_data, lterid_df]
            , axis=1).reset_index(drop=True)
        #Convert types and strip stings
        numeric_cols = ['lat_study_site', 'lng_study_site']
        self.save_data[
            self.save_data.columns.difference(numeric_cols)] = self.save_data[
                self.save_data.columns.difference(numeric_cols)].applymap(str)
        self.save_data[
            self.save_data.columns.difference(numeric_cols)] = self.save_data[
                self.save_data.columns.difference(numeric_cols)].applymap(
                    lambda x: x.strip())
        self.save_data[numeric_cols] = to_numeric(
            self.save_data[numeric_cols], errors='coerce')


        print('Pushed dataset: ', self.save_data)
        self.facade.push_tables['study_site_table'] = self.save_data

        # Helpers to keep track of user changes to site names
        hlp.write_column_to_log(
            self.sitelned, self._log, 'sitetable_c')
        oldsitetable = hlp.produce_null_df(
            len(self.save_data.columns),
            self.save_data.columns.values.tolist(),
            len(self.save_data),
            'nan'
        )
        hlp.updated_df_values(
            oldsitetable, self.save_data, self._log, 'sitetable'
        )

        # Signal to confim this form has been completed and
        # user can move on to other tables
        self.site_unlocks.emit('study_site_mod')
        site_unsorted = self.facade._data[
            self.siteloc[
                'study_site_key']].drop_duplicates().values.tolist()
        site_unsorted.sort()
        self.sitelevels = site_unsorted
        self._log.debug(
            'facade site levels' +
            ' '.join(self.facade._valueregister['sitelevels']))
        self._log.debug(
            'sitelevels (Save Block): ' +
            ' '.join(self.sitelevels))

        self.saved.append(1)
        self.close()