# Company Data Reset Scripts

These scripts allow you to completely reset a company's transactional data for testing purposes while preserving lookup tables and the company structure.

## Files

- **`PreviewCompanyDataReset.sql`** - Shows what would be deleted without making changes (safe to run)
- **`ResetCompanyData.sql`** - Actually deletes the data (use with caution!)

## What Gets Deleted

The scripts remove ALL transactional data for the specified company:

- ✓ Jobs, Job Items, Job Notes, Job Photos
- ✓ Quotes and Quote Items
- ✓ Customers
- ✓ Inventory Items and Inventory Transactions
- ✓ Equipment and Maintenance Records
- ✓ Catalog Categories and Catalog Items
- ✓ Suppliers
- ✓ Appointments
- ✓ Pricing Tiers
- ✓ Company Operating Costs
- ✓ Company Preferences

## What Gets Preserved

The scripts preserve all lookup tables and structure:

- ✓ The Company record itself
- ✓ Users associated with the company
- ✓ Job Status Lookups
- ✓ Job Priority Lookups
- ✓ Quote Status Lookups
- ✓ Inventory Category Lookups
- ✓ Appointment Status Lookups
- ✓ Appointment Type Lookups

## Usage

### Step 1: Preview (Recommended)

First, run the preview script to see what will be deleted:

1. Open `PreviewCompanyDataReset.sql` in SQL Server Management Studio (SSMS) or Azure Data Studio
2. Set the company identifier at the top of the script:
   ```sql
   -- Option 1: Use company code
   DECLARE @CompanyCode NVARCHAR(50) = 'DEMO';

   -- Option 2: OR use company ID (comment out the line above)
   -- DECLARE @CompanyId INT = 1;
   ```
3. Execute the script
4. Review the output showing:
   - Count of records to be deleted per table
   - Total records to be deleted
   - Sample data from each table
   - What will be preserved

### Step 2: Reset (Actual Deletion)

After reviewing the preview, run the reset script:

1. Open `ResetCompanyData.sql`
2. Set the same company identifier:
   ```sql
   DECLARE @CompanyCode NVARCHAR(50) = 'DEMO';
   ```
3. **IMPORTANT:** Make a database backup if needed
4. Execute the script
5. Review the output showing:
   - Deleted record counts per table
   - Total deleted records
   - Preserved data

### Step 3: Re-seed (Optional)

After resetting, you can re-populate the company with fresh demo data:

1. Log in to the application as a SuperAdmin
2. Navigate to: **Platform Management** > **Seed Data**
3. Click "Seed Data" for the company you just reset
4. Review the seeding results and any warnings

## Safety Features

### Transaction Rollback
Both scripts use transactions. If any error occurs during deletion, ALL changes are rolled back automatically.

### Validation
- Scripts validate that the company exists before attempting deletion
- Clear error messages if company is not found

### Detailed Logging
- Each deletion step is logged with record counts
- Final summary shows exactly what was deleted
- Preserved data is clearly listed

## Examples

### Reset the Demo Company
```sql
DECLARE @CompanyCode NVARCHAR(50) = 'DEMO';
```

### Reset a Specific Company by ID
```sql
-- DECLARE @CompanyCode NVARCHAR(50) = 'DEMO';  -- Comment this out
DECLARE @CompanyId INT = 5;
```

### Reset Multiple Companies
To reset multiple companies, execute the script once for each company (change the company code/ID between runs).

## Common Scenarios

### Testing Fresh Import
```
1. Run ResetCompanyData.sql for company "ABC"
2. Import CSV data for company ABC
3. Test the import results
```

### Testing Seed Data Changes
```
1. Modify seed data routines in code
2. Run ResetCompanyData.sql for "DEMO"
3. Re-seed via UI to test new seed data
4. Verify results
```

### Clean Slate for Demo
```
1. Preview what will be deleted
2. Run ResetCompanyData.sql
3. Re-seed with fresh demo data
4. Demo is ready with clean data
```

## Warnings

⚠️ **IMPORTANT:** These scripts permanently delete data!

- Always run the **preview script first**
- Make a **database backup** before running reset on production data
- Cannot be undone (unless you restore from backup)
- Users are NOT deleted (they will exist but have no data)
- Company configuration is NOT deleted

## Database Permissions

To run these scripts, you need:
- `db_datawriter` role (to delete data)
- `db_datareader` role (to read company info)
- Execute permissions on the database

## Troubleshooting

### Foreign Key Constraint Error
If you get a foreign key violation, the script may need updating for new tables. Check the error message for the table name and add it to the script in the correct order.

### Company Not Found
```
Company not found! Please check @CompanyId or @CompanyCode
```
**Solution:** Verify the company code or ID is correct:
```sql
SELECT Id, CompanyCode, CompanyName FROM Companies;
```

### Transaction Rollback
If the script fails and rolls back:
1. Check the error message in the output
2. Fix the issue (usually a missing table or new FK constraint)
3. Re-run the script

## Support

For questions or issues with these scripts:
1. Check the script comments for usage details
2. Review the CLAUDE.md file for database structure
3. Contact the development team

---

**Last Updated:** 2026-02-16
