Autosave: 20260220-124258
This commit is contained in:
parent
deddf67d73
commit
e9db807320
BIN
assets/pasted-20260220-114014-3aea48e0.png
Normal file
BIN
assets/pasted-20260220-114014-3aea48e0.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
14
check_schema.php
Normal file
14
check_schema.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
require 'db/config.php';
|
||||
$tables = ['invoices', 'invoice_items', 'pos_transactions', 'pos_items', 'payments', 'pos_payments'];
|
||||
foreach ($tables as $t) {
|
||||
echo "Table: $t\n";
|
||||
try {
|
||||
$res = db()->query("DESCRIBE $t");
|
||||
while ($r = $res->fetch(PDO::FETCH_ASSOC)) {
|
||||
echo " {$r['Field']} ({$r['Type']})\n";
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
echo " Error: " . $e->getMessage() . "\n";
|
||||
}
|
||||
}
|
||||
23
db/migrations/20260220_unify_pos_sales.php
Normal file
23
db/migrations/20260220_unify_pos_sales.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
require 'db/config.php';
|
||||
$db = db();
|
||||
|
||||
$queries = [
|
||||
"ALTER TABLE invoices ADD COLUMN IF NOT EXISTS transaction_no VARCHAR(50) DEFAULT NULL AFTER id",
|
||||
"ALTER TABLE invoices ADD COLUMN IF NOT EXISTS is_pos TINYINT(1) DEFAULT 0",
|
||||
"ALTER TABLE invoices ADD COLUMN IF NOT EXISTS discount_amount DECIMAL(15,3) DEFAULT 0",
|
||||
"ALTER TABLE invoices ADD COLUMN IF NOT EXISTS loyalty_points_earned DECIMAL(15,3) DEFAULT 0",
|
||||
"ALTER TABLE invoices ADD COLUMN IF NOT EXISTS loyalty_points_redeemed DECIMAL(15,3) DEFAULT 0",
|
||||
"ALTER TABLE invoices ADD COLUMN IF NOT EXISTS created_by INT(11) DEFAULT NULL",
|
||||
"ALTER TABLE payments ADD COLUMN IF NOT EXISTS transaction_id INT(11) DEFAULT NULL", // To keep link if needed
|
||||
"ALTER TABLE invoices MODIFY COLUMN status ENUM('paid','unpaid','partially_paid','refunded','cancelled') DEFAULT 'unpaid'"
|
||||
];
|
||||
|
||||
foreach ($queries as $q) {
|
||||
try {
|
||||
$db->exec($q);
|
||||
echo "Executed: $q\n";
|
||||
} catch (Exception $e) {
|
||||
echo "Error executing $q: " . $e->getMessage() . "\n";
|
||||
}
|
||||
}
|
||||
13
db/migrations/20260220_unify_pos_sales.sql
Normal file
13
db/migrations/20260220_unify_pos_sales.sql
Normal file
@ -0,0 +1,13 @@
|
||||
-- Unify POS and Sales Invoices
|
||||
-- Date: 2026-02-20
|
||||
|
||||
ALTER TABLE invoices ADD COLUMN IF NOT EXISTS transaction_no VARCHAR(50) DEFAULT NULL AFTER id;
|
||||
ALTER TABLE invoices ADD COLUMN IF NOT EXISTS is_pos TINYINT(1) DEFAULT 0;
|
||||
ALTER TABLE invoices ADD COLUMN IF NOT EXISTS discount_amount DECIMAL(15,3) DEFAULT 0;
|
||||
ALTER TABLE invoices ADD COLUMN IF NOT EXISTS loyalty_points_earned DECIMAL(15,3) DEFAULT 0;
|
||||
ALTER TABLE invoices ADD COLUMN IF NOT EXISTS loyalty_points_redeemed DECIMAL(15,3) DEFAULT 0;
|
||||
ALTER TABLE invoices ADD COLUMN IF NOT EXISTS created_by INT(11) DEFAULT NULL;
|
||||
|
||||
ALTER TABLE payments ADD COLUMN IF NOT EXISTS transaction_id INT(11) DEFAULT NULL;
|
||||
|
||||
ALTER TABLE invoices MODIFY COLUMN status ENUM('paid','unpaid','partially_paid','refunded','cancelled') DEFAULT 'unpaid';
|
||||
2
db/migrations/fix_lpo_foreign_key.sql
Normal file
2
db/migrations/fix_lpo_foreign_key.sql
Normal file
@ -0,0 +1,2 @@
|
||||
ALTER TABLE lpos DROP FOREIGN KEY lpos_ibfk_1;
|
||||
ALTER TABLE lpos ADD CONSTRAINT lpos_ibfk_1 FOREIGN KEY (supplier_id) REFERENCES suppliers(id);
|
||||
13
describe_tables.php
Normal file
13
describe_tables.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
require 'db/config.php';
|
||||
foreach(['pos_transactions', 'invoices', 'pos_items', 'invoice_items'] as $t) {
|
||||
echo "Table: $t\n";
|
||||
try {
|
||||
$res = db()->query("DESCRIBE $t");
|
||||
while($r = $res->fetch(PDO::FETCH_ASSOC)) {
|
||||
echo " {$r['Field']} ({$r['Type']})\n";
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
echo " Error: " . $e->getMessage() . "\n";
|
||||
}
|
||||
}
|
||||
@ -14,6 +14,7 @@ $translations = [
|
||||
'sales_returns' => 'Sales Returns',
|
||||
'purchases' => 'Purchases',
|
||||
'purchase_returns' => 'Purchase Returns',
|
||||
'lpos' => 'Local Purchase Orders (LPO)',
|
||||
'quotations' => 'Quotations',
|
||||
'expenses' => 'Expenses',
|
||||
'expense_categories' => 'Expense Categories',
|
||||
@ -107,6 +108,7 @@ $translations = [
|
||||
'sales_returns' => 'مرتجعات المبيعات',
|
||||
'purchases' => 'المشتريات',
|
||||
'purchase_returns' => 'مرتجعات المشتريات',
|
||||
'lpos' => 'أوامر الشراء المحلية (LPO)',
|
||||
'quotations' => 'عروض الأسعار',
|
||||
'expenses' => 'المصاريف',
|
||||
'expense_categories' => 'فئات المصاريف',
|
||||
|
||||
@ -133,3 +133,35 @@
|
||||
2026-02-20 07:30:15 - POST: {"type":"purchase","customer_id":"7","invoice_date":"2026-02-20","due_date":"","payment_type":"cash","status":"paid","paid_amount":"0.000","item_ids":["1"],"quantities":["150"],"prices":["0.400"],"add_invoice":""}
|
||||
2026-02-20 09:27:36 - POST: {"invoice_id":"7","return_date":"2026-02-20","quantities":["5"],"item_ids":["1"],"prices":["0.400"],"notes":"","add_purchase_return":""}
|
||||
2026-02-20 09:28:59 - POST: {"invoice_id":"7","return_date":"2026-02-20","quantities":["3"],"item_ids":["1"],"prices":["0.400"],"notes":"","add_purchase_return":""}
|
||||
2026-02-20 09:31:35 - POST: {"invoice_id":"31","return_date":"2026-02-20","quantities":["1"],"item_ids":["1"],"prices":["0.450"],"notes":"","add_sales_return":""}
|
||||
2026-02-20 09:50:43 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"2026-02-22","terms_conditions":"","add_lpo":""}
|
||||
2026-02-20 09:50:46 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"2026-02-22","terms_conditions":"","add_lpo":""}
|
||||
2026-02-20 09:53:21 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"2026-02-22","terms_conditions":"","add_lpo":""}
|
||||
2026-02-20 10:00:29 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"2026-02-22","terms_conditions":"","add_lpo":""}
|
||||
2026-02-20 10:00:33 - POST: {"delete_lpo":"","id":"1"}
|
||||
2026-02-20 10:10:17 - POST: {"lpo_id":"4","supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"2026-02-22","status":"pending","terms_conditions":"","item_ids":["1"],"quantities":["100"],"prices":["0.400"],"edit_lpo":""}
|
||||
2026-02-20 10:21:07 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.95}]","total_amount":"0.95","tax_amount":"0.011904761904761904","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.45,\"vat_rate\":0,\"vat_amount\":0},{\"id\":3,\"qty\":1,\"price\":0.25,\"vat_rate\":0,\"vat_amount\":0},{\"id\":2,\"qty\":1,\"price\":0.25,\"vat_rate\":5,\"vat_amount\":0.011904761904761904}]"}
|
||||
2026-02-20 10:22:29 - POST: {"lpo_id":"4","supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"2026-02-22","status":"pending","terms_conditions":"","item_ids":["1"],"quantities":["10"],"prices":["0.400"],"edit_lpo":""}
|
||||
2026-02-20 11:13:39 - POST: {"lpo_id":"4","supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"2026-02-22","status":"pending","terms_conditions":"","item_ids":["1"],"quantities":["10"],"prices":["0.400"],"edit_lpo":""}
|
||||
2026-02-20 11:14:12 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.95}]","total_amount":"0.95","tax_amount":"0.011904761904761904","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.45,\"vat_rate\":0,\"vat_amount\":0},{\"id\":3,\"qty\":1,\"price\":0.25,\"vat_rate\":0,\"vat_amount\":0},{\"id\":2,\"qty\":1,\"price\":0.25,\"vat_rate\":5,\"vat_amount\":0.011904761904761904}]"}
|
||||
2026-02-20 11:15:52 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":6.3}]","total_amount":"6.3","tax_amount":"0","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":14,\"price\":0.45,\"vat_rate\":0,\"vat_amount\":0}]"}
|
||||
2026-02-20 11:21:57 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["1"],"quantities":["112"],"prices":["0.400"],"add_lpo":""}
|
||||
2026-02-20 11:22:28 - POST: {"delete_lpo":"","id":"2"}
|
||||
2026-02-20 11:22:40 - POST: {"delete_lpo":"","id":"3"}
|
||||
2026-02-20 11:22:48 - POST: {"delete_lpo":"","id":"4"}
|
||||
2026-02-20 11:27:45 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:28:37 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:32:03 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:32:32 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:33:08 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:34:18 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:34:41 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:37:33 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:39:11 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:45:55 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:46:07 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 11:49:24 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 12:39:16 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 12:39:30 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 12:40:43 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
2026-02-20 12:40:54 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
|
||||
|
||||
@ -2,3 +2,13 @@
|
||||
2026-02-19 14:55:24 - search_items call: q=to
|
||||
2026-02-20 07:29:03 - search_items call: q=to
|
||||
2026-02-20 07:30:08 - search_items call: q=to
|
||||
2026-02-20 10:08:31 - search_items call: q=a
|
||||
2026-02-20 10:09:42 - search_items call: q=to
|
||||
2026-02-20 10:22:22 - search_items call: q=to
|
||||
2026-02-20 11:21:36 - search_items call: q=to
|
||||
2026-02-20 11:27:38 - search_items call: q=on
|
||||
2026-02-20 11:28:26 - search_items call: q=ob
|
||||
2026-02-20 11:28:28 - search_items call: q=oni
|
||||
2026-02-20 11:34:38 - search_items call: q=on
|
||||
2026-02-20 12:40:40 - search_items call: q=on
|
||||
2026-02-20 12:40:40 - search_items call: q=oni
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user