Skip to content

Feature/ospos customizations - #4641

Open
techtonz wants to merge 17 commits into
opensourcepos:masterfrom
techtonz:feature/ospos-customizations
Open

Feature/ospos customizations#4641
techtonz wants to merge 17 commits into
opensourcepos:masterfrom
techtonz:feature/ospos-customizations

Conversation

@techtonz

Copy link
Copy Markdown

No description provided.

Insert any missing work-order/quote/invoice config keys (INSERT IGNORE) and
enable work order support so the register offers Receipt/Quote/Work
Order/Invoice modes. Safe on fresh and existing databases.
New pivot report showing stock quantity per product per location with a
total, wired into the Reports page inventory section.
- OSPOSRules: resolve theme dir from FCPATH
- Config postSaveLocale: sanitize payment reference code min/max
- locale_helper: safe defaults for missing config values
- initial_schema rollback: keep the framework migrations history table
- header/login: restore injected CSS/JS resource includes
- tabular_details: drop unused init_dialog block
- Refresh cart stock figures and re-point lines at the new source when the
  source location is changed, so the register always reflects current stock.
- Add confirmation dialogs to the Finish and Cancel buttons using the
  existing confirm_finish_transfer / confirm_cancel_transfer language keys.
- Add RMA (Return Merchandise Authorization) module: rmas/rma_items tables,
  controller, model, library, register/detail views, per-item issue and
  serial number fields, and a Detailed RMA report.
- Add requisitions workflow: two-step approval (PENDING -> SOURCE_APPROVED
  -> APPROVED) with stock moved via transfers, reject support, per-location
  permissions and a Detailed RMA/Requisitions reporting integration.
- Add Rmas.php and Requisitions.php language files for all locales.
- Add workflow tests for both modules.
- Add brand varchar column via new migration and expose it on the item
  form (before Item Name), bulk edit, manage table column and CSV import.
- Make brand a required field on the item form and add localized
  brand/brand_required messages to all languages.
- Render remarks/comments in detailed sales/receivings reports (and
  specific customer/employee/discount reports) as links that open the
  corresponding receipt in a new tab.
- Turn POS/RECV inventory comments in the Inventory Count Details view
  into clickable receipt links.
- Add brand, brand_required, all_branches, open_receipt and RMA/requisition
  report keys to all language files.
- Track all session customizations in CHANGELOG.
- Add RMA and requisitions modules to the reports listing and date input.
- Auto-create permissions/grants for new stock locations (requisitions/rmas).
- Add RMA/requisition links in the menu header and report data columns.
@coderabbitai

coderabbitai Bot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 394 files, which is 94 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 95672461-d880-4fcb-8140-cc7de2a68c13

📥 Commits

Reviewing files that changed from the base of the PR and between 0e8fc09 and fadf2f3.

📒 Files selected for processing (394)
  • .dockerignore
  • .gitignore
  • CHANGELOG.md
  • Dockerfile
  • app/Commands/LotTrackingSmokeTest.php
  • app/Config/Routes.php
  • app/Config/Validation/OSPOSRules.php
  • app/Controllers/Config.php
  • app/Controllers/Items.php
  • app/Controllers/Reports.php
  • app/Controllers/Requisitions.php
  • app/Controllers/Rmas.php
  • app/Controllers/Sales.php
  • app/Controllers/Transfers.php
  • app/Database/Migrations/20170501000000_initial_schema.php
  • app/Database/Migrations/20260810000000_AddSupplierLotTracking.php
  • app/Database/Migrations/20260811000000_AddSuspendedSaleReservations.php
  • app/Database/Migrations/20260813000000_AddTransfers.php
  • app/Database/Migrations/20260814000000_EnableServicesWorkflow.php
  • app/Database/Migrations/20260815000000_AddRequisitions.php
  • app/Database/Migrations/20260816000000_AddRMAs.php
  • app/Database/Migrations/20260817000000_AddRmaItemIssueSerial.php
  • app/Database/Migrations/20260818000000_AddBrandToItems.php
  • app/Helpers/importfile_helper.php
  • app/Helpers/locale_helper.php
  • app/Helpers/tabular_helper.php
  • app/Language/ar-EG/Items.php
  • app/Language/ar-EG/Module.php
  • app/Language/ar-EG/Reports.php
  • app/Language/ar-EG/Requisitions.php
  • app/Language/ar-EG/Rmas.php
  • app/Language/ar-EG/Sales.php
  • app/Language/ar-EG/Transfers.php
  • app/Language/ar-LB/Items.php
  • app/Language/ar-LB/Module.php
  • app/Language/ar-LB/Reports.php
  • app/Language/ar-LB/Requisitions.php
  • app/Language/ar-LB/Rmas.php
  • app/Language/ar-LB/Sales.php
  • app/Language/ar-LB/Transfers.php
  • app/Language/az/Items.php
  • app/Language/az/Module.php
  • app/Language/az/Reports.php
  • app/Language/az/Requisitions.php
  • app/Language/az/Rmas.php
  • app/Language/az/Sales.php
  • app/Language/az/Transfers.php
  • app/Language/bg/Items.php
  • app/Language/bg/Module.php
  • app/Language/bg/Reports.php
  • app/Language/bg/Requisitions.php
  • app/Language/bg/Rmas.php
  • app/Language/bg/Sales.php
  • app/Language/bg/Transfers.php
  • app/Language/bs/Items.php
  • app/Language/bs/Module.php
  • app/Language/bs/Reports.php
  • app/Language/bs/Requisitions.php
  • app/Language/bs/Rmas.php
  • app/Language/bs/Sales.php
  • app/Language/bs/Transfers.php
  • app/Language/ckb/Items.php
  • app/Language/ckb/Module.php
  • app/Language/ckb/Reports.php
  • app/Language/ckb/Requisitions.php
  • app/Language/ckb/Rmas.php
  • app/Language/ckb/Sales.php
  • app/Language/ckb/Transfers.php
  • app/Language/cs/Items.php
  • app/Language/cs/Module.php
  • app/Language/cs/Reports.php
  • app/Language/cs/Requisitions.php
  • app/Language/cs/Rmas.php
  • app/Language/cs/Sales.php
  • app/Language/cs/Transfers.php
  • app/Language/da/Items.php
  • app/Language/da/Module.php
  • app/Language/da/Reports.php
  • app/Language/da/Requisitions.php
  • app/Language/da/Rmas.php
  • app/Language/da/Sales.php
  • app/Language/da/Transfers.php
  • app/Language/de-CH/Items.php
  • app/Language/de-CH/Module.php
  • app/Language/de-CH/Reports.php
  • app/Language/de-CH/Requisitions.php
  • app/Language/de-CH/Rmas.php
  • app/Language/de-CH/Sales.php
  • app/Language/de-CH/Transfers.php
  • app/Language/de-DE/Items.php
  • app/Language/de-DE/Module.php
  • app/Language/de-DE/Reports.php
  • app/Language/de-DE/Requisitions.php
  • app/Language/de-DE/Rmas.php
  • app/Language/de-DE/Sales.php
  • app/Language/de-DE/Transfers.php
  • app/Language/el/Items.php
  • app/Language/el/Module.php
  • app/Language/el/Reports.php
  • app/Language/el/Requisitions.php
  • app/Language/el/Rmas.php
  • app/Language/el/Sales.php
  • app/Language/el/Transfers.php
  • app/Language/en-GB/Items.php
  • app/Language/en-GB/Module.php
  • app/Language/en-GB/Reports.php
  • app/Language/en-GB/Requisitions.php
  • app/Language/en-GB/Rmas.php
  • app/Language/en-GB/Sales.php
  • app/Language/en-GB/Transfers.php
  • app/Language/en/Items.php
  • app/Language/en/Module.php
  • app/Language/en/Reports.php
  • app/Language/en/Requisitions.php
  • app/Language/en/Rmas.php
  • app/Language/en/Sales.php
  • app/Language/en/Transfers.php
  • app/Language/es-ES/Items.php
  • app/Language/es-ES/Module.php
  • app/Language/es-ES/Reports.php
  • app/Language/es-ES/Requisitions.php
  • app/Language/es-ES/Rmas.php
  • app/Language/es-ES/Sales.php
  • app/Language/es-ES/Transfers.php
  • app/Language/es-MX/Items.php
  • app/Language/es-MX/Module.php
  • app/Language/es-MX/Reports.php
  • app/Language/es-MX/Requisitions.php
  • app/Language/es-MX/Rmas.php
  • app/Language/es-MX/Sales.php
  • app/Language/es-MX/Transfers.php
  • app/Language/fa/Items.php
  • app/Language/fa/Module.php
  • app/Language/fa/Reports.php
  • app/Language/fa/Requisitions.php
  • app/Language/fa/Rmas.php
  • app/Language/fa/Sales.php
  • app/Language/fa/Transfers.php
  • app/Language/fr/Items.php
  • app/Language/fr/Module.php
  • app/Language/fr/Reports.php
  • app/Language/fr/Requisitions.php
  • app/Language/fr/Rmas.php
  • app/Language/fr/Sales.php
  • app/Language/fr/Transfers.php
  • app/Language/he/Items.php
  • app/Language/he/Module.php
  • app/Language/he/Reports.php
  • app/Language/he/Requisitions.php
  • app/Language/he/Rmas.php
  • app/Language/he/Sales.php
  • app/Language/he/Transfers.php
  • app/Language/hr-HR/Items.php
  • app/Language/hr-HR/Module.php
  • app/Language/hr-HR/Reports.php
  • app/Language/hr-HR/Requisitions.php
  • app/Language/hr-HR/Rmas.php
  • app/Language/hr-HR/Sales.php
  • app/Language/hr-HR/Transfers.php
  • app/Language/hu/Items.php
  • app/Language/hu/Module.php
  • app/Language/hu/Reports.php
  • app/Language/hu/Requisitions.php
  • app/Language/hu/Rmas.php
  • app/Language/hu/Sales.php
  • app/Language/hu/Transfers.php
  • app/Language/hy/Items.php
  • app/Language/hy/Module.php
  • app/Language/hy/Reports.php
  • app/Language/hy/Requisitions.php
  • app/Language/hy/Rmas.php
  • app/Language/hy/Sales.php
  • app/Language/hy/Transfers.php
  • app/Language/id/Items.php
  • app/Language/id/Module.php
  • app/Language/id/Reports.php
  • app/Language/id/Requisitions.php
  • app/Language/id/Rmas.php
  • app/Language/id/Sales.php
  • app/Language/id/Transfers.php
  • app/Language/it/Items.php
  • app/Language/it/Module.php
  • app/Language/it/Reports.php
  • app/Language/it/Requisitions.php
  • app/Language/it/Rmas.php
  • app/Language/it/Sales.php
  • app/Language/it/Transfers.php
  • app/Language/ka/Requisitions.php
  • app/Language/ka/Rmas.php
  • app/Language/ka/Sales.php
  • app/Language/ka/Transfers.php
  • app/Language/km/Items.php
  • app/Language/km/Module.php
  • app/Language/km/Reports.php
  • app/Language/km/Requisitions.php
  • app/Language/km/Rmas.php
  • app/Language/km/Sales.php
  • app/Language/km/Transfers.php
  • app/Language/lo/Items.php
  • app/Language/lo/Module.php
  • app/Language/lo/Reports.php
  • app/Language/lo/Requisitions.php
  • app/Language/lo/Rmas.php
  • app/Language/lo/Sales.php
  • app/Language/lo/Transfers.php
  • app/Language/ml/Items.php
  • app/Language/ml/Module.php
  • app/Language/ml/Reports.php
  • app/Language/ml/Requisitions.php
  • app/Language/ml/Rmas.php
  • app/Language/ml/Sales.php
  • app/Language/ml/Transfers.php
  • app/Language/nb/Items.php
  • app/Language/nb/Module.php
  • app/Language/nb/Reports.php
  • app/Language/nb/Requisitions.php
  • app/Language/nb/Rmas.php
  • app/Language/nb/Sales.php
  • app/Language/nb/Transfers.php
  • app/Language/nl-BE/Items.php
  • app/Language/nl-BE/Module.php
  • app/Language/nl-BE/Reports.php
  • app/Language/nl-BE/Requisitions.php
  • app/Language/nl-BE/Rmas.php
  • app/Language/nl-BE/Sales.php
  • app/Language/nl-BE/Transfers.php
  • app/Language/nl-NL/Items.php
  • app/Language/nl-NL/Module.php
  • app/Language/nl-NL/Reports.php
  • app/Language/nl-NL/Requisitions.php
  • app/Language/nl-NL/Rmas.php
  • app/Language/nl-NL/Sales.php
  • app/Language/nl-NL/Transfers.php
  • app/Language/pl/Items.php
  • app/Language/pl/Module.php
  • app/Language/pl/Reports.php
  • app/Language/pl/Requisitions.php
  • app/Language/pl/Rmas.php
  • app/Language/pl/Sales.php
  • app/Language/pl/Transfers.php
  • app/Language/pt-BR/Items.php
  • app/Language/pt-BR/Module.php
  • app/Language/pt-BR/Reports.php
  • app/Language/pt-BR/Requisitions.php
  • app/Language/pt-BR/Rmas.php
  • app/Language/pt-BR/Sales.php
  • app/Language/pt-BR/Transfers.php
  • app/Language/ro/Items.php
  • app/Language/ro/Module.php
  • app/Language/ro/Reports.php
  • app/Language/ro/Requisitions.php
  • app/Language/ro/Rmas.php
  • app/Language/ro/Sales.php
  • app/Language/ro/Transfers.php
  • app/Language/ru/Items.php
  • app/Language/ru/Module.php
  • app/Language/ru/Reports.php
  • app/Language/ru/Requisitions.php
  • app/Language/ru/Rmas.php
  • app/Language/ru/Sales.php
  • app/Language/ru/Transfers.php
  • app/Language/sv/Items.php
  • app/Language/sv/Module.php
  • app/Language/sv/Reports.php
  • app/Language/sv/Requisitions.php
  • app/Language/sv/Rmas.php
  • app/Language/sv/Sales.php
  • app/Language/sv/Transfers.php
  • app/Language/sw-KE/Items.php
  • app/Language/sw-KE/Module.php
  • app/Language/sw-KE/Reports.php
  • app/Language/sw-KE/Requisitions.php
  • app/Language/sw-KE/Rmas.php
  • app/Language/sw-KE/Sales.php
  • app/Language/sw-KE/Transfers.php
  • app/Language/sw-TZ/Items.php
  • app/Language/sw-TZ/Module.php
  • app/Language/sw-TZ/Reports.php
  • app/Language/sw-TZ/Requisitions.php
  • app/Language/sw-TZ/Rmas.php
  • app/Language/sw-TZ/Sales.php
  • app/Language/sw-TZ/Transfers.php
  • app/Language/ta/Items.php
  • app/Language/ta/Module.php
  • app/Language/ta/Reports.php
  • app/Language/ta/Requisitions.php
  • app/Language/ta/Rmas.php
  • app/Language/ta/Sales.php
  • app/Language/ta/Transfers.php
  • app/Language/th/Items.php
  • app/Language/th/Module.php
  • app/Language/th/Reports.php
  • app/Language/th/Requisitions.php
  • app/Language/th/Rmas.php
  • app/Language/th/Sales.php
  • app/Language/th/Transfers.php
  • app/Language/tl/Items.php
  • app/Language/tl/Module.php
  • app/Language/tl/Reports.php
  • app/Language/tl/Requisitions.php
  • app/Language/tl/Rmas.php
  • app/Language/tl/Sales.php
  • app/Language/tl/Transfers.php
  • app/Language/tr/Items.php
  • app/Language/tr/Module.php
  • app/Language/tr/Reports.php
  • app/Language/tr/Requisitions.php
  • app/Language/tr/Rmas.php
  • app/Language/tr/Sales.php
  • app/Language/tr/Transfers.php
  • app/Language/uk/Items.php
  • app/Language/uk/Module.php
  • app/Language/uk/Reports.php
  • app/Language/uk/Requisitions.php
  • app/Language/uk/Rmas.php
  • app/Language/uk/Sales.php
  • app/Language/uk/Transfers.php
  • app/Language/ur/Items.php
  • app/Language/ur/Module.php
  • app/Language/ur/Reports.php
  • app/Language/ur/Requisitions.php
  • app/Language/ur/Rmas.php
  • app/Language/ur/Sales.php
  • app/Language/ur/Transfers.php
  • app/Language/vi/Items.php
  • app/Language/vi/Module.php
  • app/Language/vi/Reports.php
  • app/Language/vi/Requisitions.php
  • app/Language/vi/Rmas.php
  • app/Language/vi/Sales.php
  • app/Language/vi/Transfers.php
  • app/Language/zh-Hans/Items.php
  • app/Language/zh-Hans/Module.php
  • app/Language/zh-Hans/Reports.php
  • app/Language/zh-Hans/Requisitions.php
  • app/Language/zh-Hans/Rmas.php
  • app/Language/zh-Hans/Sales.php
  • app/Language/zh-Hans/Transfers.php
  • app/Language/zh-Hant/Items.php
  • app/Language/zh-Hant/Module.php
  • app/Language/zh-Hant/Reports.php
  • app/Language/zh-Hant/Requisitions.php
  • app/Language/zh-Hant/Rmas.php
  • app/Language/zh-Hant/Sales.php
  • app/Language/zh-Hant/Transfers.php
  • app/Libraries/Item_lib.php
  • app/Libraries/Requisition_lib.php
  • app/Libraries/Rma_lib.php
  • app/Libraries/Transfer_lib.php
  • app/Models/Item.php
  • app/Models/Item_lot.php
  • app/Models/Receiving.php
  • app/Models/Reports/Detailed_receivings.php
  • app/Models/Reports/Detailed_rmas.php
  • app/Models/Reports/Detailed_sales.php
  • app/Models/Reports/Detailed_transfers.php
  • app/Models/Reports/Inventory_by_location.php
  • app/Models/Requisition.php
  • app/Models/Rma.php
  • app/Models/Sale.php
  • app/Models/Stock_location.php
  • app/Models/Transfer.php
  • app/Views/items/form.php
  • app/Views/items/form_bulk.php
  • app/Views/items/form_count_details.php
  • app/Views/items/manage.php
  • app/Views/login.php
  • app/Views/partial/header.php
  • app/Views/reports/date_input.php
  • app/Views/reports/inventory_by_location.php
  • app/Views/reports/listing.php
  • app/Views/reports/tabular_details.php
  • app/Views/reports/tabular_details_rmas.php
  • app/Views/reports/tabular_details_transfers.php
  • app/Views/requisitions/manage.php
  • app/Views/requisitions/register.php
  • app/Views/requisitions/view.php
  • app/Views/rmas/manage.php
  • app/Views/rmas/register.php
  • app/Views/rmas/view.php
  • app/Views/sales/suspended.php
  • app/Views/transfers/receipt.php
  • app/Views/transfers/register.php
  • docker-compose.override.yml
  • public/css/register.css
  • tests/Controllers/ConfigTest.php
  • tests/Controllers/CustomersCsvImportTest.php
  • tests/Controllers/EmployeesControllerTest.php
  • tests/Controllers/HomeTest.php
  • tests/Controllers/SalesControllerTest.php
  • tests/Models/RequisitionWorkflowTest.php
  • tests/Models/RmaWorkflowTest.php
  • tests/Models/TransferReversalTest.php
  • tests/run-tests.sh

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@objecttothis

Copy link
Copy Markdown
Member

If you want this review to be considered, you need to fill in some information in the PR description. It's also likely far too large for one PR. Unless there's good reason, you should submit one bugfix or feature change per Pull Request. This makes the Pull Requests more manageable and regressions easier to spot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants