feat: rework admin portal with pricing breakdown and document management
- Added pricing snapshot columns to the leads table: daily_subtotal, weekend_subtotal, subtotal_eur, vat_eur, total_eur, deposit_eur, total_days, weekday_count, weekend_day_count. - Updated create_lead RPC to accept and store new pricing parameters. - Enhanced frontend app.js to compute and send pricing details during lead creation. - Introduced new UI elements in admin.html for displaying pricing and documents in a tabbed dialog. - Updated i18n.js with new translation keys for pricing and document management. - Improved styles in styles.css for new dialog components and pricing cards. - Added migration script 06-admin-pricing-documents.sql for database schema changes.
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
-- =============================================================================
|
||||
-- MC Cars - Admin portal rework: pricing snapshot columns on leads,
|
||||
-- updated create_lead RPC to accept pricing params.
|
||||
-- Idempotent.
|
||||
-- =============================================================================
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 1. Add pricing snapshot columns to leads
|
||||
-- -----------------------------------------------------------------------------
|
||||
alter table public.leads add column if not exists daily_subtotal integer not null default 0;
|
||||
alter table public.leads add column if not exists weekend_subtotal integer not null default 0;
|
||||
alter table public.leads add column if not exists subtotal_eur integer not null default 0;
|
||||
alter table public.leads add column if not exists vat_eur integer not null default 0;
|
||||
alter table public.leads add column if not exists total_eur integer not null default 0;
|
||||
alter table public.leads add column if not exists deposit_eur integer not null default 0;
|
||||
alter table public.leads add column if not exists total_days integer not null default 0;
|
||||
alter table public.leads add column if not exists weekday_count integer not null default 0;
|
||||
alter table public.leads add column if not exists weekend_day_count integer not null default 0;
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- 2. Update create_lead RPC to accept and store pricing snapshot
|
||||
-- -----------------------------------------------------------------------------
|
||||
create or replace function public.create_lead(
|
||||
p_name text,
|
||||
p_email text,
|
||||
p_phone text default '',
|
||||
p_vehicle_id uuid default null,
|
||||
p_vehicle_label text default '',
|
||||
p_date_from date default null,
|
||||
p_date_to date default null,
|
||||
p_message text default '',
|
||||
p_source text default 'website',
|
||||
p_daily_subtotal integer default 0,
|
||||
p_weekend_subtotal integer default 0,
|
||||
p_subtotal_eur integer default 0,
|
||||
p_vat_eur integer default 0,
|
||||
p_total_eur integer default 0,
|
||||
p_deposit_eur integer default 0,
|
||||
p_total_days integer default 0,
|
||||
p_weekday_count integer default 0,
|
||||
p_weekend_day_count integer default 0
|
||||
)
|
||||
returns uuid
|
||||
language plpgsql
|
||||
security definer
|
||||
set search_path = public
|
||||
as $$
|
||||
declare
|
||||
v_id uuid;
|
||||
begin
|
||||
insert into public.leads (
|
||||
name,
|
||||
email,
|
||||
phone,
|
||||
vehicle_id,
|
||||
vehicle_label,
|
||||
date_from,
|
||||
date_to,
|
||||
message,
|
||||
source,
|
||||
daily_subtotal,
|
||||
weekend_subtotal,
|
||||
subtotal_eur,
|
||||
vat_eur,
|
||||
total_eur,
|
||||
deposit_eur,
|
||||
total_days,
|
||||
weekday_count,
|
||||
weekend_day_count
|
||||
)
|
||||
values (
|
||||
p_name,
|
||||
p_email,
|
||||
coalesce(p_phone, ''),
|
||||
p_vehicle_id,
|
||||
coalesce(p_vehicle_label, ''),
|
||||
p_date_from,
|
||||
p_date_to,
|
||||
coalesce(p_message, ''),
|
||||
coalesce(p_source, 'website'),
|
||||
coalesce(p_daily_subtotal, 0),
|
||||
coalesce(p_weekend_subtotal, 0),
|
||||
coalesce(p_subtotal_eur, 0),
|
||||
coalesce(p_vat_eur, 0),
|
||||
coalesce(p_total_eur, 0),
|
||||
coalesce(p_deposit_eur, 0),
|
||||
coalesce(p_total_days, 0),
|
||||
coalesce(p_weekday_count, 0),
|
||||
coalesce(p_weekend_day_count, 0)
|
||||
)
|
||||
returning id into v_id;
|
||||
|
||||
return v_id;
|
||||
end;
|
||||
$$;
|
||||
|
||||
revoke all on function public.create_lead(
|
||||
text, text, text, uuid, text, date, date, text, text,
|
||||
integer, integer, integer, integer, integer, integer, integer, integer, integer
|
||||
) from public;
|
||||
grant execute on function public.create_lead(
|
||||
text, text, text, uuid, text, date, date, text, text,
|
||||
integer, integer, integer, integer, integer, integer, integer, integer, integer
|
||||
) to anon, authenticated, service_role;
|
||||
|
||||
notify pgrst, 'reload schema';
|
||||
Reference in New Issue
Block a user