Add comprehensive README documentation
- Feature overview - Installation instructions - Usage guide - Technical architecture details - Troubleshooting section - Customization examples 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
256
README.md
Normal file
256
README.md
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
# Shopkeeper Order Items Custom
|
||||||
|
|
||||||
|
A Magento 2 module that customizes the order item columns in the Magento admin panel. This module removes tax columns, adds a cost column, and makes product names and SKUs clickable for quick product editing.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Remove Tax Columns**: Hides tax amount and tax percent columns from order item view
|
||||||
|
- **Add Cost Column**: Displays product cost alongside price for profitability analysis
|
||||||
|
- **Clickable Product Links**: Product names and SKUs link directly to product edit page
|
||||||
|
- **Clean Admin Interface**: Streamlined order view focusing on essential information
|
||||||
|
- **Security**: Properly escapes HTML output to prevent XSS vulnerabilities
|
||||||
|
|
||||||
|
## What It Does
|
||||||
|
|
||||||
|
### Column Modifications
|
||||||
|
|
||||||
|
**Removed Columns:**
|
||||||
|
- Tax Amount
|
||||||
|
- Tax Percent
|
||||||
|
|
||||||
|
**Added Columns:**
|
||||||
|
- **Cost** - Displays the product's cost attribute (positioned after price column)
|
||||||
|
|
||||||
|
### Interactive Features
|
||||||
|
|
||||||
|
- **Product Name**: Clickable link to product edit page (opens in new tab)
|
||||||
|
- **SKU**: Clickable link to product edit page (opens in new tab)
|
||||||
|
- Both links show "Edit Product" tooltip on hover
|
||||||
|
|
||||||
|
### Cost Display
|
||||||
|
|
||||||
|
- Fetches product cost from catalog
|
||||||
|
- Formats currency using order's currency settings
|
||||||
|
- Displays "N/A" if:
|
||||||
|
- Cost attribute is not set
|
||||||
|
- Product no longer exists
|
||||||
|
- Cost data is unavailable
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Via Composer
|
||||||
|
|
||||||
|
Add the repository to your Magento project's `composer.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"repositories": {
|
||||||
|
"module-order-items-custom": {
|
||||||
|
"type": "vcs",
|
||||||
|
"url": "https://code.shopkeeper.dev/McQueen/module-order-items-custom.git"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then install:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer require shopkeeper/module-order-items-custom:dev-main
|
||||||
|
php bin/magento module:enable Shopkeeper_OrderItemsCustom
|
||||||
|
php bin/magento setup:upgrade
|
||||||
|
php bin/magento setup:di:compile
|
||||||
|
php bin/magento cache:flush
|
||||||
|
```
|
||||||
|
|
||||||
|
### Manual Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# From your Magento root directory
|
||||||
|
mkdir -p app/code/Shopkeeper/OrderItemsCustom
|
||||||
|
# Upload all module files to app/code/Shopkeeper/OrderItemsCustom/
|
||||||
|
|
||||||
|
php bin/magento module:enable Shopkeeper_OrderItemsCustom
|
||||||
|
php bin/magento setup:upgrade
|
||||||
|
php bin/magento setup:di:compile
|
||||||
|
php bin/magento cache:flush
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
After installation, the changes are automatically applied to all order views in the admin panel.
|
||||||
|
|
||||||
|
### Viewing Orders
|
||||||
|
|
||||||
|
1. Go to **Sales > Orders**
|
||||||
|
2. Open any order
|
||||||
|
3. Scroll to the **Items Ordered** section
|
||||||
|
|
||||||
|
You'll see:
|
||||||
|
- No tax columns
|
||||||
|
- A new "Cost" column showing product costs
|
||||||
|
- Clickable product names and SKUs that open the product edit page
|
||||||
|
|
||||||
|
### Analyzing Profitability
|
||||||
|
|
||||||
|
With both Price and Cost visible side-by-side, you can quickly:
|
||||||
|
- Calculate profit margins
|
||||||
|
- Identify high-margin products
|
||||||
|
- Review cost accuracy for ordered items
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Magento 2.4.x (or 2.3.x with compatible framework versions)
|
||||||
|
- PHP 7.4, 8.1, 8.2, or 8.3
|
||||||
|
- Product cost attribute configured in Magento
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
|
||||||
|
### Plugin Architecture
|
||||||
|
|
||||||
|
The module uses Magento's plugin system (interceptors) to modify:
|
||||||
|
|
||||||
|
1. **Magento\Sales\Block\Adminhtml\Order\View\Items**
|
||||||
|
- Plugin: `ItemsColumns`
|
||||||
|
- Removes tax columns
|
||||||
|
- Adds cost column definition
|
||||||
|
|
||||||
|
2. **Magento\Sales\Block\Adminhtml\Order\View\Items\Renderer\DefaultRenderer**
|
||||||
|
- Plugin: `DefaultRenderer`
|
||||||
|
- Renders cost column with formatted values
|
||||||
|
- Adds clickable links to product names and SKUs
|
||||||
|
- Handles missing products gracefully
|
||||||
|
|
||||||
|
### Module Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
Shopkeeper/OrderItemsCustom/
|
||||||
|
├── Plugin/
|
||||||
|
│ └── Order/
|
||||||
|
│ └── View/
|
||||||
|
│ ├── ItemsColumns.php
|
||||||
|
│ └── Items/
|
||||||
|
│ └── Renderer/
|
||||||
|
│ └── DefaultRenderer.php
|
||||||
|
├── etc/
|
||||||
|
│ ├── di.xml
|
||||||
|
│ └── module.xml
|
||||||
|
├── composer.json
|
||||||
|
└── registration.php
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cost Attribute
|
||||||
|
|
||||||
|
The module expects a product attribute with code `cost`. To configure:
|
||||||
|
|
||||||
|
1. Go to **Stores > Attributes > Product**
|
||||||
|
2. Ensure "cost" attribute exists
|
||||||
|
3. Set costs for your products via:
|
||||||
|
- Bulk import
|
||||||
|
- Individual product edit pages
|
||||||
|
- API updates
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Cost shows "N/A" for all products
|
||||||
|
|
||||||
|
**Possible causes:**
|
||||||
|
1. Cost attribute not configured
|
||||||
|
2. Cost values not set for products
|
||||||
|
3. Permissions issue accessing product data
|
||||||
|
|
||||||
|
**Solutions:**
|
||||||
|
```bash
|
||||||
|
# Verify cost attribute exists
|
||||||
|
php bin/magento catalog:product:attributes:list | grep cost
|
||||||
|
|
||||||
|
# Reindex if needed
|
||||||
|
php bin/magento indexer:reindex
|
||||||
|
|
||||||
|
# Check product has cost value
|
||||||
|
# Go to Catalog > Products > Edit Product > Advanced Pricing
|
||||||
|
```
|
||||||
|
|
||||||
|
### Links not working
|
||||||
|
|
||||||
|
1. **Clear cache:**
|
||||||
|
```bash
|
||||||
|
php bin/magento cache:flush
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Check admin permissions:**
|
||||||
|
- Ensure your admin role has access to edit products
|
||||||
|
|
||||||
|
3. **Verify module is enabled:**
|
||||||
|
```bash
|
||||||
|
php bin/magento module:status Shopkeeper_OrderItemsCustom
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tax columns still showing
|
||||||
|
|
||||||
|
1. **Clear generated code:**
|
||||||
|
```bash
|
||||||
|
rm -rf generated/code/*
|
||||||
|
php bin/magento setup:di:compile
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Clear cache:**
|
||||||
|
```bash
|
||||||
|
php bin/magento cache:flush
|
||||||
|
```
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
### Removing Different Columns
|
||||||
|
|
||||||
|
To remove other columns, edit `Plugin/Order/View/ItemsColumns.php`:
|
||||||
|
|
||||||
|
```php
|
||||||
|
// Add to the $excludedColumns array
|
||||||
|
$excludedColumns = [
|
||||||
|
'tax-amount',
|
||||||
|
'tax-percent',
|
||||||
|
'discount-amount', // Add this line to remove discount column
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adding Different Columns
|
||||||
|
|
||||||
|
To add more columns, modify the same file:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$columns = $result->setData([
|
||||||
|
// ... existing columns ...
|
||||||
|
'your-column-name' => [
|
||||||
|
'label' => __('Your Column Label'),
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
```
|
||||||
|
|
||||||
|
Then implement rendering in `Plugin/Order/View/Items/Renderer/DefaultRenderer.php`.
|
||||||
|
|
||||||
|
## Compatibility
|
||||||
|
|
||||||
|
- Magento Open Source 2.3.x, 2.4.x
|
||||||
|
- Magento Commerce 2.3.x, 2.4.x
|
||||||
|
- PHP 7.4, 8.1, 8.2, 8.3
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
For issues or questions:
|
||||||
|
1. Check Magento logs: `var/log/system.log`
|
||||||
|
2. Verify module status: `php bin/magento module:status`
|
||||||
|
3. Ensure cost attribute is configured
|
||||||
|
4. Clear cache and recompile
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
OSL-3.0, AFL-3.0
|
||||||
|
|
||||||
|
## Version
|
||||||
|
|
||||||
|
1.0.0
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
Shopkeeper (taber@shopkeeper.dev)
|
||||||
Reference in New Issue
Block a user