Skip to content

reinaldocrespo/OpenERP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenERP

OpenERP is a wholesale distribution ERP inspired by Prophet 21 / Epicor P21. It targets companies that buy goods, warehouse them, and resell them: industrial supply, HVAC, electrical, plumbing, fasteners, flow parts, and similar B2B distributors.

Built on SAP ADS / SAP ACE (ADT format), PHP REST API, and Vue 3 + Vite frontend. Not affiliated with Odoo or the historical OpenERP product.


Project Status

Phase 1-6 complete. The system handles a full B2B distribution workflow end-to-end: procurement through receiving, sales through invoicing, multi-warehouse inventory with FIFO costing, bank reconciliation, multi-currency, US sales tax, sales operations depth, and audit logging throughout.

Implemented

General Ledger

  • Chart of accounts with account types and subtypes
  • Fiscal years and periods; period close flag
  • Journal batches with balanced journal entries; batch posting
  • Subledger-to-GL auto-posting from every AR, AP, SO, inventory, and memo event
  • Trial Balance, Income Statement, Balance Sheet
  • GL account balances with cumulative YTD recomputation after out-of-order posting

Accounts Receivable

  • Customer master with credit limit, credit hold, and on-hold enforcement at SO entry
  • Customer classes
  • Customer contacts
  • Multiple ship-to addresses per customer
  • AR invoices with lines, subtotal, tax, total, balance
  • US sales tax engine: jurisdiction rates (city → county → state cascade), exemption certificates per customer, per-line jurisdiction override on invoices
  • Cash receipts and payment application to invoices
  • Credit memos with application to open invoices
  • Invoice write-off (bad debt GL posting)
  • Void controls for invoices and payments
  • AR aging report, customer statement view
  • Recurring invoice templates
  • Customer-specific price lists with per-item overrides and price lookup on SO entry
  • Customer contracts with fixed item pricing
  • Customer deposits / prepayments with invoice application and void workflow
  • Sales quotes (DRAFT/SENT/ACCEPTED/EXPIRED; convert to SO)
  • Credit hold enforcement: hard-block SO creation if on hold or over credit limit

Accounts Payable

  • Vendor master with tax ID, 1099 flag, and foreign currency support
  • AP bills with lines; vendor invoice number capture
  • Multi-currency bills: foreign amount + exchange rate; FX gain/loss computed on payment application
  • Payment entry and application to bills
  • Debit memos with application to open bills
  • Void controls for bills and payments
  • AP aging report
  • Purchase requisitions → PO approval workflow (DRAFT/PENDING/APPROVED/REJECTED/CONVERTED)
  • RFQ with vendor quote comparison; select winner; convert to PO
  • Vendor item catalog: vendor SKU, lead times, MOQ, packing qty, last cost, preferred flag
  • Vendor rebate agreements: accrue at PO receipt, settle to AP debit memo
  • 1099 vendor report: year-end payment summary by vendor with minimum amount filter

Items and Inventory

  • Item master: categories, UOM, UOM conversions, cost methods, list price, ABC class, reorder point/qty, min/max
  • Lot number tracking with received and expiry dates
  • Item cross-references (CUSTOMER, COMPETITOR, UPC, MPN)
  • Item substitutes with priority ranking
  • HTS codes, country of origin, tariff rates; TARIFF landed cost component auto-computed
  • Inventory transaction history (RECEIPT, SHIPMENT, ADJUSTMENT, TRANSFER_OUT/IN, RETURN_IN/OUT)
  • Manual inventory adjustments with GL posting
  • On-hand quantity computed from signed transaction sum

Multi-Warehouse

  • Warehouse master with bin/rack/shelf locations
  • Warehouse transfer orders (TRANSFER_OUT + TRANSFER_IN inventory transactions)
  • Per-warehouse inventory view
  • Bin assignment on inventory adjustments, SO shipments, and PO receipts

FIFO Cost Layers and Landed Cost

  • FIFO cost layers: PO receipts push layers; SO shipments consume oldest-first
  • Landed cost allocation to PO receipt FIFO layers (ocean freight, customs duty, brokerage, insurance, tariff)
  • Tariff component auto-computed from item HTS tariff rates
  • Inventory valuation report (FIFO layers by item and warehouse)

Inventory Planning and Counting

  • Physical inventory count with snapshot, variance entry, variance approval, and GL posting
  • Cycle count scheduling by item, warehouse, and ABC class
  • Reorder point / min-max; reorder suggestions report
  • Inbound container/shipment register: vessel, voyage, ports, ETA/ATA, customs status, linked POs

Sales Orders

  • SO header + lines with customer, item, qty, price, tax, discount
  • FIFO cost consumption for COGS on shipment
  • Open/partial/shipped/invoiced/cancelled status flow
  • SO → AR invoice action
  • Back-order creation from partially shipped orders
  • Available-to-promise (ATP) display on SO lines
  • Promise dates per SO line
  • Quantity price breaks in price lookup
  • Matrix pricing by customer class and item category
  • Blanket orders with release-to-SO workflow
  • Counter sales: ship, invoice, receive payment, and post GL in one flow
  • RMA workflow: receive returns, create RETURN_IN inventory transactions, and approve credits
  • Will call / dock slip workflow
  • Sales rep assignment and commission reporting
  • Carrier and freight fields
  • Drop shipment: SO line flagged drop-ship; linked PO created with customer ship-to address; PO receive marks SO line SHIPPED
  • Credit hold + credit limit enforcement at SO entry; live credit status banner
  • Print view for sales orders

Carriers and Shipping

  • Carrier master
  • Ship method master
  • Carrier assignment on SO and PO headers
  • Freight amount on sales orders
  • Dock slip print view for will-call/customer pickup

Purchase Orders

  • PO header + lines with vendor, item, qty, unit cost
  • Receiving against open PO lines; receipt records and receipt lines
  • FIFO layer push on receipt; drop-ship POs skip inventory and link directly to SO lines
  • PO → AP bill action; po_line_id stored on bill lines for three-way matching
  • Three-way matching report (PO qty vs received qty vs billed qty; exception filter)
  • Print view for purchase orders

Procurement Workflow

  • Purchase requisitions: create → submit → approve/reject → convert to PO
  • RFQ: send to multiple vendors → vendors respond with quote lines → select winner → convert to PO
  • Vendor rebates: PERCENT or FIXED_PER_UNIT rates; accrue on PO receipts by date range; settle to AP debit memo

Multi-Currency

  • Currencies table with base currency flag; exchange rates by currency and date
  • AP vendors and bills support foreign currency: foreign_amount + exchange_rate stored
  • FX gain/loss computed on AP payment application (proportion of foreign amount × payment-date rate vs booked amount)
  • GL: FX gain/loss posted to configured gl_fx_gain_loss_account

Bank Reconciliation

  • Bank account master linked to GL cash account
  • Statement lines (manual entry); positive = deposit, negative = payment
  • Match/unmatch each statement line to an AR or AP payment
  • Reconciliation view: summary tiles + all statement lines + unmatched book payments side panel

Security and Admin

  • JWT authentication; RBAC groups and permissions; route-level permission guards
  • User and group administration screens
  • Audit log on all data-changing routes (35 call sites)
  • ADS-level DD security: openerp_app (full R/W) / openerp_ro (read-only) per-table grants
  • Company configuration key-value store; GL account defaults for auto-posting

Infrastructure

  • Pagination and search on all list endpoints
  • Frontend + backend input validation (useValidation.js / Validator.php)
  • Error boundary wrapping router-view
  • Shared Pagination.vue component across all list pages
  • Dashboard KPIs: cash, AR, AP, overdue, open SO/PO count and value

Not yet implemented (Phase 7+)

See todo.md for the full prioritized backlog. Key gaps:

  • Item supersession (permanent replacement, different from substitutes)
  • Serial number tracking
  • Item kits / light assembly (BOM)
  • Packaging configuration (inner/master/pallet qty)
  • Freight class, weight, and dimensions on items
  • Item stocking analysis (turns, EOQ, safety stock)
  • Auto-replenishment (nightly job: below reorder point → draft PO)
  • Year-end close workflow
  • GL budgeting and budget-vs-actual report
  • Fixed assets and depreciation
  • Cash application batch
  • Check printing and positive pay file
  • ACH/EFT payment file export
  • Vendor scorecard (on-time delivery %, fill rate)
  • PDF generation (invoices, POs, packing lists, statements)
  • CSV/Excel export across all lists
  • EDI (850/856/810) and e-commerce order import
  • Multi-branch / multi-entity

Phase Summary

Phase Theme Status
1 GL, AR, AP, Items core Complete
2 Auth, SO/PO, inventory quantity, audit Complete
3 Multi-warehouse, FIFO, landed cost, lot tracking, cycle counts Complete
4 Procurement depth, sales quotes, multi-currency, sales tax, credit hold, drop ship Complete
5 Bank reconciliation, 1099 reporting Complete
6 Sales operations depth: backorders, ship-to, reps, ATP, pricing depth, blankets, RMA, counter sales, will call, deposits, carriers Complete
7 Item and inventory depth: supersession, serial tracking, kitting, consignment, auto-replenishment Planned
8 Financial completeness: year-end close, budgets, fixed assets, check printing, ACH, positive pay Planned
9 Documents and communication: PDF generation, email, EDI setup Planned
10 Automation and integration: EDI, e-commerce, scheduled reports, vendor scorecard Planned
11 Enterprise: CRM, portals, multi-branch, BI, 2FA, CPQ Long-term

Distribution Data Flow

The intended core flow is:

  1. Create vendors, items, customers, warehouses, bins, tax settings, terms, and GL defaults.
  2. Enter purchase requisitions or RFQs when buying needs appear.
  3. Convert approved procurement demand into purchase orders.
  4. Receive purchase orders into warehouses and bins.
  5. Push received quantities into FIFO cost layers and inventory transactions.
  6. Allocate landed costs and tariffs onto receipt layers when applicable.
  7. Enter sales quotes, blanket releases, counter sales, or sales orders.
  8. Price sales lines through contract pricing, customer price lists, matrix pricing, quantity breaks, and list price fallback.
  9. Check credit holds, credit limits, ATP, promised dates, ship-to address, carrier, and will-call handling at order entry.
  10. Ship sales orders, consume FIFO layers, create SHIPMENT transactions, and post COGS.
  11. Invoice shipped orders into AR.
  12. Apply customer payments, deposits, credit memos, or write-offs.
  13. Match AP bills to POs and receipts; pay vendors.
  14. Reconcile bank statement lines against AR and AP payments.
  15. Review GL, inventory valuation, three-way matching, AR/AP aging, commissions, 1099, and operational reports.

Screenshots To Add

Recommended README screenshots once the UI stabilizes:

  • Dashboard KPI view
  • Sales order entry with ATP, promise dates, ship-to, carrier, and pricing
  • Purchase order receiving with FIFO/warehouse/bin fields
  • Inventory item detail with lots, substitutes, xrefs, and valuation
  • GL reports: Trial Balance, Income Statement, Balance Sheet
  • Bank reconciliation screen
  • RMA and counter sales screens
  • Admin users/groups and ADS security overview

Repository Layout

backend/php/
  api/                   REST front controller (index.php) and module route files
    auth/                Login, JWT issue
    gl/                  General Ledger
    ar/                  Accounts Receivable
    ap/                  Accounts Payable
    items/               Item master, categories, UOM, lots, xrefs, substitutes
    so/                  Sales Orders + drop-ship
    po/                  Purchase Orders + receiving + three-way match
    pricelists/          Price lists and customer assignment
    reports/             Trial Balance, Income Statement, Balance Sheet, orders, 1099
    admin/               Company config, audit log, users, groups, permissions
    recurring/           Recurring AR invoice templates
    warehouses/          Warehouse master, bins, per-warehouse inventory
    transfers/           Warehouse transfer orders
    landed-costs/        Landed cost shipments and allocations
    counts/              Physical inventory counts
    cycle-counts/        Cycle count scheduling
    vendor-items/        Vendor item catalog
    inbound-shipments/   Inbound container/shipment register
    requisitions/        Purchase requisitions + approval workflow
    rebates/             Vendor rebate agreements and accruals
    rfq/                 RFQ and vendor quote comparison
    sq/                  Sales quotes
    currencies/          Currencies and exchange rates
    sales-tax/           US sales tax jurisdictions and exemptions
    bank-recon/          Bank accounts and statement reconciliation
    dashboard/           Dashboard KPI endpoint
  config/                database.php default development config; keep real credentials local
  lib/                   Connection.php  Response.php  Router.php  Auth.php
                         Validator.php  GlPost.php  Inventory.php

frontend/
  src/
    pages/               Vue page components by module
    services/            api.js (Axios client with all API namespaces)
    router/              index.js (route definitions with perm guards)
    store/               Pinia stores (auth)
    components/          Pagination.vue, ErrorBoundary.vue
    composables/         useValidation.js
  package.json           Vite/Vue dependency definitions

schema/
  01_shared.sql          Sequences, payment_terms, tax_codes
  02_gl.sql              GL accounts, fiscal years, periods, batches, entries, balances
  03_ar.sql              AR customers, invoices, invoice lines, payments, payment apps
  04_ap.sql              AP vendors, bills, bill lines, payments, payment apps
  05_items.sql           Item master, categories, UOM
  06_newseqkey.sql       Reference — NewSeqKey function SQL (installed by create_dd.php)
  07_auth.sql            user_groups, permissions, group_permissions, users
  08_company.sql         company_config key-value store
  09_inventory.sql       inventory_transactions
  10_so.sql              so_headers, so_lines
  11_po.sql              po_headers, po_lines, po_receipts, po_receipt_lines
  12_price_lists.sql     price_lists, price_list_items, customer_price_lists
  13_audit.sql           audit_log
  14_recurring.sql       recurring_templates, recurring_lines
  15_memos.sql           ar_credit_memos, ar_cm_apps, ar_write_offs, ap_debit_memos, ap_dm_apps
  16_warehouses.sql      warehouses, bin_locations (+ ALTERs on inventory_transactions, items)
  17_transfers.sql       wh_transfers, wh_transfer_lines
  18_fifo.sql            inv_cost_layers (FIFO)
  19_landed_cost.sql     lc_shipments, lc_allocations
  20_counts.sql          pi_headers, pi_lines, cycle_counts (+ reorder/min/max/abc on items)
  21_lots.sql            lot_numbers (+ ALTER inventory_transactions ADD lot_id)
  22_xrefs.sql           xref_items, item_substitutes
  23_hts.sql             ALTER items ADD hts_code, country_of_origin, tariff_rate
  24_vendor_items.sql    vendor_items
  25_threeway.sql        ALTER ap_bill_lines ADD po_line_id
  26_containers.sql      inbound_shipments, shipment_pos
  27_requisitions.sql    pr_headers, pr_lines
  28_rebates.sql         rebate_agreements, rebate_accruals
  29_rfq.sql             rfq_headers, rfq_lines, rfq_quotes, rfq_quote_lines
  30_sales_quotes.sql    sq_headers, sq_lines
  31_currencies.sql      currencies, exchange_rates (+ ALTER ap_vendors, ap_bills)
  32_sales_tax.sql       sales_tax_jurisdictions, tax_exemptions (+ ALTER ar_invoice_lines)
  33_credit_limits.sql   ALTER ar_customers ADD on_credit_hold
  34_drop_ship.sql       ALTER so_lines, po_headers, po_lines for drop-ship fields
  35_bank_recon.sql      bank_accounts, bank_statement_lines
  36_shipto.sql          customer_shipto and SO ship-to fields
  37_backorders.sql      back-order source link and backorder reporting
  38_price_breaks.sql    quantity price breaks
  39_sales_reps.sql      sales reps, customer defaults, commissions
  40_promise_dates.sql   promised ship dates on SO lines
  41_customer_classes.sql customer class master and customer FK
  42_contacts.sql        customer contacts
  43_contracts.sql       customer contract pricing
  44_matrix_pricing.sql  customer-class/category matrix pricing
  45_rma.sql             RMA headers, lines, and return reasons
  46_counter_sales.sql   counter-sale flags and payment links
  47_blanket_orders.sql  blanket order headers and lines
  48_will_call.sql       will-call flag and dock slip support
  49_deposits.sql        customer deposits / prepayments
  50_carriers.sql        carriers and ship methods

tools/
  create_dd.php          Create/update SAP ADS data dictionary and schema (run to bootstrap)
  setup_users.php        One-time ADS user/permissions bootstrap (run after create_dd.php)
  seed.php               Seed payment terms, tax codes, chart of accounts
  seed_auth.php          Seed permissions, groups, and default admin user
  diag_*.php             Local-only SAP ADS diagnostics (not committed)

Generated ADS data files (data/), frontend build output (frontend/dist), and node_modules are intentionally excluded from version control.


Technology Stack

Database

SAP ADS / SAP ACE:

File type Extension
Data dictionary .add
Tables .adt
Indexes .adi
Memo fields .adm
PHP extension php_ads
SQL dialect ADS SQL

Primary keys are CHAR(13) generated by the NewSeqKey(cField) DD function:

AC26-00000001
^^  two-char entity mnemonic
  ^^ two-digit year
    ^^^^^^^^ zero-padded sequence

Logical values use .T. / .F. (not TRUE/FALSE/1/0).

Backend

Plain PHP REST API:

  • api/index.php — front controller; loads all route files
  • api/*/routes.php — module route handlers registered on a shared Router instance
  • lib/Connection.php — ADS connection, esc(), fk_val(), bool_val(), db_new_key(), db_fetch_all(), db_execute(), db_audit(), db_exists(), db_count(), db_now(), pagination_sql()
  • lib/GlPost.phpgl_post_batch() for subledger-to-GL auto-posting
  • lib/Inventory.phpfifo_push(), fifo_consume(), fifo_avg_cost() for FIFO cost layers

All module routes require JWT authentication except POST /auth/login.

Frontend

Vue 3 SPA with Vite:

  • Vue 3 Composition API with <script setup>
  • Vue Router with per-route permission guards
  • Pinia for auth state
  • Axios with JWT interceptor
  • Sidebar nav with collapsible sections: Financials, Sales, Purchasing, Inventory, Admin
  • cv(obj, key) helper normalises SAP ACE uppercase field names to lowercase on all components

Running Locally

1. Create or Update the Data Dictionary

C:\php\php.exe -c C:\php\php_sapads.ini F:\OpenERP\tools\create_dd.php

Default dictionary path: E:\Development\OpenERP\data\openerp.add

Re-running is safe — existing tables and indexes are silently skipped.

2. Bootstrap ADS Users (once)

C:\php\php.exe -c C:\php\php_sapads.ini F:\OpenERP\tools\setup_users.php

Creates openerp_app (full R/W) and openerp_ro (read-only) database users, registers all tables in the DD catalog, grants per-table permissions, and enables anonymous-connection blocking. Idempotent.

3. Seed Starter Data

Run seed scripts before setup_users.php enables anonymous-connection blocking, or update them to use openerp_app credentials first.

C:\php\php.exe -c C:\php\php_sapads.ini F:\OpenERP\tools\seed.php
C:\php\php.exe -c C:\php\php_sapads.ini F:\OpenERP\tools\seed_auth.php

Default login after seeding: admin / admin — change immediately.

4. Start the PHP API

C:\php\php.exe -c C:\php\php_sapads.ini -S localhost:8081 -t F:\OpenERP\backend\php\api F:\OpenERP\backend\php\api\index.php

The trailing index.php is the router script and is required. Port: 8081.

5. Start the Frontend

cd E:\Development\OpenERP\frontend
node node_modules\vite\bin\vite.js

Use the real E:\ pathF:\OpenERP is a subst alias and breaks Vite's path-containment check, causing source files to be served untransformed (blank page). Port: 5173.

Verification Checklist

After a fresh bootstrap, verify the application with this smoke test:

  • Run create_dd.php with C:\php\php_sapads.ini.
  • Run seed.php and seed_auth.php.
  • Run setup_users.php if ADS DD security is being enabled.
  • Start the PHP API on port 8081.
  • Start Vite from E:\Development\OpenERP\frontend on port 5173.
  • Log in as the seeded admin user, then change the password.
  • Open the dashboard and confirm KPIs load.
  • Create or inspect a customer, vendor, item, warehouse, and GL account.
  • Create a purchase order, receive it, and confirm inventory on-hand changes.
  • Create a sales order, ship it, invoice it, and confirm AR/inventory/GL effects.
  • Run AR aging, AP aging, inventory valuation, three-way matching, and GL reports.
  • Create a bank statement line and match it to an AR or AP payment.
  • Confirm audit log entries appear for data-changing actions.

Configuration

backend/php/config/database.php defines:

  • SAP ADS DD path (use real E:\ path)
  • ADS username + password (openerp_app after setup)
  • Server type (ADS_REMOTE_SERVER)
  • JWT signing secret

The repository contains a default development database.php. Do not commit local edits that contain real ADS credentials or production JWT secrets. backend/php/config/database.local.php is reserved for local overrides and is gitignored.

Security and Secrets

  • Treat ADS usernames, ADS passwords, and JWT secrets as local secrets.
  • Keep production values out of Git history.
  • Rotate the seeded admin password immediately outside a throwaway local environment.
  • Use openerp_app for normal application access after setup_users.php provisions DD permissions.
  • Use openerp_ro only for read-only reporting or diagnostics.
  • Keep local diagnostic scripts and ADS security notes out of the public repository unless they are intentionally sanitized.

PHP INI Files

File Extension Used by
C:\php\php.ini php_ads + php_openads Default (avoid for OpenERP)
C:\php\php_sapads.ini php_ads only OpenERP — use this
C:\php\php_openads.ini php_openads only OpenADS standalone

Local Development Assumptions

This README reflects the current Windows development machine:

  • Project source is accessed as F:\OpenERP.
  • The real path is E:\Development\OpenERP.
  • Vite should be started from the real E:\ path.
  • PHP is installed under C:\php.
  • SAP ADS development uses C:\php\php_sapads.ini.
  • Backend development server uses port 8081.
  • Frontend Vite server uses port 5173.
  • Generated ADS files live under data/ and are not source files.

API Overview

Representative endpoints (not exhaustive — see route files for full list):

POST   /auth/login
GET    /auth/me

GET    /dashboard

GET    /gl/accounts
POST   /gl/accounts
GET    /gl/fiscal-years
POST   /gl/fiscal-years
GET    /gl/periods
POST   /gl/periods
POST   /gl/periods/{id}/close
GET    /gl/batches
POST   /gl/batches
POST   /gl/batches/{id}/entries
POST   /gl/batches/{id}/post
GET    /gl/reports/trial-balance
GET    /gl/reports/income-statement
GET    /gl/reports/balance-sheet

GET    /ar/customers
POST   /ar/customers
PUT    /ar/customers/{id}
GET    /ar/customers/{id}/credit-check
POST   /ar/customers/{id}/credit-hold
POST   /ar/customers/{id}/credit-release
GET    /ar/invoices
POST   /ar/invoices
POST   /ar/invoices/{id}/void
POST   /ar/invoices/{id}/write-off
GET    /ar/payments
POST   /ar/payments
POST   /ar/payments/{id}/apply
POST   /ar/payments/{id}/void
GET    /ar/credit-memos
POST   /ar/credit-memos
POST   /ar/credit-memos/{id}/apply
POST   /ar/credit-memos/{id}/void
GET    /ar/aging

GET    /ap/vendors
POST   /ap/vendors
PUT    /ap/vendors/{id}
GET    /ap/bills
POST   /ap/bills
POST   /ap/bills/{id}/void
GET    /ap/payments
POST   /ap/payments
POST   /ap/payments/{id}/apply
POST   /ap/payments/{id}/void
GET    /ap/debit-memos
POST   /ap/debit-memos
POST   /ap/debit-memos/{id}/apply
POST   /ap/debit-memos/{id}/void
GET    /ap/aging

GET    /items
POST   /items
PUT    /items/{id}
POST   /items/{id}/adjust
GET    /items/reorder-suggestions
GET    /items/{id}/lots
POST   /items/{id}/lots
GET    /items/{id}/xrefs
POST   /items/{id}/xrefs
DELETE /items/xrefs/{xref_id}
GET    /items/{id}/substitutes
POST   /items/{id}/substitutes
DELETE /items/substitutes/{sub_id}

GET    /warehouses
POST   /warehouses
PUT    /warehouses/{id}
GET    /warehouses/{id}/bins
POST   /warehouses/{id}/bins
GET    /warehouses/{id}/inventory

GET    /transfers
POST   /transfers
GET    /transfers/{id}
POST   /transfers/{id}/post
POST   /transfers/{id}/cancel

GET    /landed-costs
POST   /landed-costs
GET    /landed-costs/{id}
POST   /landed-costs/{id}/allocate
POST   /landed-costs/{id}/compute-tariff
POST   /landed-costs/{id}/post

GET    /physical-counts
POST   /physical-counts
GET    /physical-counts/{id}
PUT    /physical-counts/{id}/lines
POST   /physical-counts/{id}/post

GET    /cycle-counts
POST   /cycle-counts
PUT    /cycle-counts/{id}/count
POST   /cycle-counts/{id}/approve

GET    /so
POST   /so
PUT    /so/{id}
POST   /so/{id}/ship
POST   /so/{id}/invoice
POST   /so/{id}/drop-ship
POST   /so/{id}/cancel

GET    /po
POST   /po
PUT    /po/{id}
POST   /po/{id}/receive
POST   /po/{id}/bill
POST   /po/{id}/cancel

GET    /price-lists
POST   /price-lists
PUT    /price-lists/{id}
POST   /price-lists/{id}/items
DELETE /price-lists/{id}/items/{item_id}
GET    /price-lookup

GET    /reports/backorders
GET    /reports/commissions
GET    /items/{id}/atp

GET    /sales-reps
POST   /sales-reps
PUT    /sales-reps/{id}

GET    /customer-classes
POST   /customer-classes
PUT    /customer-classes/{id}

GET    /matrix-pricing
POST   /matrix-pricing
PUT    /matrix-pricing/{id}
DELETE /matrix-pricing/{id}

GET    /contracts
POST   /contracts
PUT    /contracts/{id}
DELETE /contracts/{id}

GET    /rma
POST   /rma
PUT    /rma/{id}
POST   /rma/{id}/receive
POST   /rma/{id}/approve
POST   /rma/{id}/cancel

GET    /blanket-orders
POST   /blanket-orders
PUT    /blanket-orders/{id}
POST   /blanket-orders/{id}/release
POST   /blanket-orders/{id}/cancel

GET    /ar/deposits
POST   /ar/deposits
POST   /ar/deposits/{id}/apply
POST   /ar/deposits/{id}/void

GET    /carriers
POST   /carriers
PUT    /carriers/{id}
GET    /ship-methods
POST   /ship-methods
PUT    /ship-methods/{id}

GET    /sq
POST   /sq
PUT    /sq/{id}
POST   /sq/{id}/send
POST   /sq/{id}/accept
POST   /sq/{id}/expire
POST   /sq/{id}/cancel

GET    /requisitions
POST   /requisitions
GET    /requisitions/{id}
PUT    /requisitions/{id}
POST   /requisitions/{id}/submit
POST   /requisitions/{id}/approve
POST   /requisitions/{id}/reject
POST   /requisitions/{id}/convert
POST   /requisitions/{id}/cancel

GET    /rfq
POST   /rfq
GET    /rfq/{id}
POST   /rfq/{id}/send
POST   /rfq/{id}/quotes
POST   /rfq/{id}/select/{quote_id}
POST   /rfq/{id}/convert
POST   /rfq/{id}/close

GET    /rebates
POST   /rebates
PUT    /rebates/{id}
GET    /rebates/{id}/accruals
POST   /rebates/{id}/compute
POST   /rebates/{id}/settle

GET    /vendor-items
POST   /vendor-items
GET    /vendor-items/{id}
PUT    /vendor-items/{id}
DELETE /vendor-items/{id}

GET    /inbound-shipments
POST   /inbound-shipments
GET    /inbound-shipments/{id}
PUT    /inbound-shipments/{id}
POST   /inbound-shipments/{id}/add-po
DELETE /inbound-shipments/{id}/pos/{po_id}

GET    /currencies
POST   /currencies
PUT    /currencies/{id}
GET    /exchange-rates
POST   /exchange-rates
GET    /exchange-rates/on/{currency_id}/{date}

GET    /sales-tax/jurisdictions
POST   /sales-tax/jurisdictions
GET    /sales-tax/customer-rate
GET    /sales-tax/exemptions
POST   /sales-tax/exemptions
PUT    /sales-tax/exemptions/{id}
DELETE /sales-tax/exemptions/{id}

GET    /bank-accounts
POST   /bank-accounts
GET    /bank-accounts/{id}
PUT    /bank-accounts/{id}
GET    /bank-accounts/{id}/statement-lines
POST   /bank-accounts/{id}/statement-lines
POST   /bank-accounts/{id}/statement-lines/{lid}/match
POST   /bank-accounts/{id}/statement-lines/{lid}/unmatch
GET    /bank-accounts/{id}/reconciliation

GET    /recurring
POST   /recurring
PUT    /recurring/{id}
POST   /recurring/{id}/run
POST   /recurring/{id}/deactivate

GET    /reports/inventory-valuation
GET    /reports/inventory-valuation/summary
GET    /reports/three-way-matching
GET    /reports/orders
GET    /reports/1099

GET    /admin/company
PUT    /admin/company
GET    /admin/audit-log
GET    /admin/users
POST   /admin/users
PUT    /admin/users/{id}
POST   /admin/users/{id}/change-password
GET    /admin/groups
POST   /admin/groups
PUT    /admin/groups/{id}
GET    /admin/permissions

Development Notes

  • Always use C:\php\php_sapads.ini — not php.ini — for this project.
  • Use the real E:\Development\OpenERP\frontend path for Vite, not the F: subst alias.
  • SAP ACE reads LOGICAL fields back as 1/0 integers. The frontend uses v == 1 || v === true || v === '.T.' everywhere.
  • Dates are stored as CHAR(8) (YYYYMMDD) in most tables. The frontend converts with fmtDate().
  • Do not commit real credential changes in backend/php/config/database.php, diag_*.php files, or ADS-Users-Groups-Permissions.md.
  • CLAUDE.md is intentionally local and should not be committed.
  • Keep generated ADS files (data/*.adt, data/*.adi, etc.) and frontend/node_modules out of Git.

About

Full ERP with GL, AP, AR, Inventory, SO, PO, audit log.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors