diff --git a/odex30_base/ctp_database_clean_up/models/ctp_database_clean_up.py b/odex30_base/ctp_database_clean_up/models/ctp_database_clean_up.py index 0986287..c557dee 100644 --- a/odex30_base/ctp_database_clean_up/models/ctp_database_clean_up.py +++ b/odex30_base/ctp_database_clean_up/models/ctp_database_clean_up.py @@ -18,12 +18,12 @@ class CtpDatabaseCleanUp(models.TransientModel): _logger.warning('Model %s not found, skipping.', line) continue - if self.env[line]._abstract: - _logger.warning('Model %s is abstract, skipping as it has no table.', line) + if hasattr(self.env[line], '_abstract') and self.env[line]._abstract: + _logger.warning('Model %s is abstract, skipping.', line) continue table_name = self.env[line]._table - _logger.info('Attempting to TRUNCATE table for model: %s (table: %s)', line, table_name) + _logger.info('Attempting to DELETE from table: %s', table_name) safe_table_name = table_name.replace('"', '""') sql = 'DELETE FROM "%s"' % safe_table_name @@ -42,7 +42,6 @@ class CtpDatabaseCleanUp(models.TransientModel): _logger.info('Reset sequence for %s', seq_code) except Exception as e: _logger.warning('Failed to reset sequence for %s: %s', seq_code, e) - return True def remove_sales(self): @@ -320,22 +319,25 @@ class CtpDatabaseCleanUp(models.TransientModel): def remove_all(self): _logger.info("--- Starting Full Database Cleanup ---") - self.remove_pos() - self.remove_expense() - self.remove_mrp() - self.remove_sales() - self.remove_purchase() - self.remove_inventory() - self.remove_project() - self.remove_account() - self.remove_account_chart() - self.remove_website() - self.remove_message() - self.remove_quality() - self.remove_quality_setting() - self.remove_mrp_bom() - self.remove_product_attribute() - self.remove_product() + + cleanup_steps = [ + self.remove_pos, self.remove_expense, self.remove_mrp, + self.remove_sales, self.remove_purchase, self.remove_inventory, + self.remove_project, self.remove_website, self.remove_message, + self.remove_account_chart, self.remove_account, + self.remove_quality, self.remove_quality_setting, + self.remove_mrp_bom, self.remove_product_attribute, self.remove_product + ] + + for step in cleanup_steps: + try: + step() + self._cr.commit() + _logger.info("Successfully executed cleanup step: %s", step.__name__) + except Exception as e: + _logger.error("--- A major step FAILED: %s. Error: %s. Continuing to next step. ---", step.__name__, e) + self._cr.rollback() + _logger.info("--- Full Database Cleanup Finished ---") return True