feat: add invoice and alternative_componen management functionality

This commit is contained in:
Tran Anh Tuan
2026-05-12 11:57:11 +07:00
parent c39b010e5e
commit e81a248a61
23 changed files with 3325 additions and 2 deletions

View File

@@ -0,0 +1,35 @@
-- name: GetAlternativeComponentByID :one
SELECT * FROM alternative_components
WHERE id = sqlc.arg(id);
-- name: ListAlternativeComponents :many
SELECT * FROM alternative_components;
-- name: CreateAlternativeComponent :one
INSERT INTO alternative_components (invoice_config_item_id, alternative_component_id, conversion_ratio, priority, note, metadata)
VALUES (
sqlc.arg(invoice_config_item_id),
sqlc.arg(alternative_component_id),
sqlc.arg(conversion_ratio),
sqlc.arg(priority),
sqlc.arg(note),
sqlc.arg(metadata)
)
RETURNING *;
-- name: UpdateAlternativeComponent :one
UPDATE alternative_components
SET invoice_config_item_id = coalesce(sqlc.arg(invoice_config_item_id), invoice_config_item_id),
alternative_component_id = coalesce(sqlc.arg(alternative_component_id), alternative_component_id),
conversion_ratio = coalesce(sqlc.arg(conversion_ratio), conversion_ratio),
priority = coalesce(sqlc.arg(priority), priority),
note = coalesce(sqlc.arg(note), note),
metadata = coalesce(sqlc.arg(metadata), metadata)
WHERE id = sqlc.arg(id)
RETURNING *;
-- name: DeleteAlternativeComponent :execrows
DELETE FROM alternative_components
WHERE id = sqlc.arg(id);

40
db/queries/invoice.sql Normal file
View File

@@ -0,0 +1,40 @@
-- name: GetInvoiceByID :one
SELECT * FROM invoices
WHERE id = sqlc.arg(id);
-- name: ListInvoices :many
SELECT * FROM invoices
ORDER BY created_at DESC;
-- name: CreateInvoice :one
INSERT INTO invoices (type, status, invoice_config_id, total_items, note, created_by, approved_by, created_at, metadata)
VALUES (
sqlc.arg(type),
sqlc.arg(status),
sqlc.arg(invoice_config_id),
sqlc.arg(total_items),
sqlc.arg(note),
sqlc.arg(created_by),
sqlc.arg(approved_by),
sqlc.arg(created_at),
sqlc.arg(metadata)
)
RETURNING *;
-- name: UpdateInvoice :one
UPDATE invoices
SET type = coalesce(sqlc.arg(type), type),
status = coalesce(sqlc.arg(status), status),
invoice_config_id = coalesce(sqlc.arg(invoice_config_id), invoice_config_id),
total_items = coalesce(sqlc.arg(total_items), total_items),
note = coalesce(sqlc.arg(note), note),
metadata = coalesce(sqlc.arg(metadata), metadata),
updated_at = sqlc.arg(updated_at)
WHERE id = sqlc.arg(id)
RETURNING *;
-- name: DeleteInvoice :execrows
DELETE FROM invoices
WHERE id = sqlc.arg(id);

View File

@@ -0,0 +1,38 @@
-- name: GetInvoiceItemByID :one
SELECT * FROM invoice_items
WHERE id = sqlc.arg(id);
-- name: ListInvoiceItems :many
SELECT * FROM invoice_items;
-- name: CreateInvoiceItem :one
INSERT INTO invoice_items (invoice_id,component_id,original_component_id, required_quantity,actual_quantity, is_substituted, is_short, shortage_quantity, note, metadata)
VALUES (
sqlc.arg(invoice_id),
sqlc.arg(component_id),
sqlc.arg(original_component_id),
sqlc.arg(required_quantity),
sqlc.arg(actual_quantity),
sqlc.arg(is_substituted),
sqlc.arg(is_short),
sqlc.arg(shortage_quantity),
sqlc.arg(note),
sqlc.arg(metadata)
)
RETURNING *;
-- name: UpdateInvoiceItem :one
UPDATE invoice_items
SET required_quantity = coalesce(sqlc.arg(required_quantity), required_quantity),
actual_quantity = coalesce(sqlc.arg(actual_quantity), actual_quantity),
is_substituted = coalesce(sqlc.arg(is_substituted), is_substituted),
is_short = coalesce(sqlc.arg(is_short), is_short),
shortage_quantity = coalesce(sqlc.arg(shortage_quantity), shortage_quantity),
note = coalesce(sqlc.arg(note), note),
metadata = coalesce(sqlc.arg(metadata), metadata)
WHERE id = sqlc.arg(id)
RETURNING *;
-- name: DeleteInvoiceItem :execrows
DELETE FROM invoice_items
WHERE id = sqlc.arg(id);