feat: Move customer registration to site-level setting

Moved 'Register as site member' from order-level to site-level setting

Frontend Changes:
1. Customer Settings - Added new General section
   - Auto-register customers as site members toggle
   - Clear description of functionality
   - Saved to backend via existing API

2. OrderForm - Removed checkbox
   - Removed registerAsMember state
   - Removed checkbox UI
   - Removed register_as_member from payload
   - Backend now uses site setting

Backend Changes:
1. CustomerSettingsProvider.php
   - Added auto_register_members setting
   - Default: false (no)
   - Stored as woonoow_auto_register_members option
   - Included in get_settings()
   - Handled in update_settings()

2. OrdersController.php
   - Removed register_as_member parameter
   - Now reads from CustomerSettingsProvider
   - Site-level setting applies to all orders
   - Consistent behavior across all order creation

Benefits:
 Site-level control (not per-order)
 Consistent customer experience
 Easier to manage (one setting)
 No UI clutter in order form
 Setting persists across all orders

Migration:
- Old orders with checkbox: No impact
- New orders: Use site setting
- Default: Disabled (safe default)

Result:
Admins can now control customer registration site-wide from Customer Settings instead of per-order checkbox
This commit is contained in:
dwindown
2025-11-20 20:40:43 +07:00
parent e8ca3ceeb2
commit c8bba9a91b
4 changed files with 28 additions and 26 deletions

View File

@@ -181,7 +181,6 @@ export default function OrderForm({
const [paymentMethod, setPaymentMethod] = React.useState(initial?.payment_method_id || initial?.payment_method || '');
const [shippingMethod, setShippingMethod] = React.useState(initial?.shipping_method_id || initial?.shipping_method || '');
const [note, setNote] = React.useState(initial?.customer_note || '');
const [registerAsMember, setRegisterAsMember] = React.useState(false);
const [selectedCustomerId, setSelectedCustomerId] = React.useState<number | null>(null);
const [submitting, setSubmitting] = React.useState(false);
@@ -452,7 +451,6 @@ export default function OrderForm({
payment_method: paymentMethod || undefined,
shipping_method: shippingMethod || undefined,
customer_note: note || undefined,
register_as_member: registerAsMember,
items: itemsEditable ? items : undefined,
coupons: showCoupons ? validatedCoupons.map(c => c.code) : undefined,
};
@@ -1047,9 +1045,8 @@ export default function OrderForm({
}
}
// Mark customer as selected (hide register checkbox)
// Mark customer as selected
setSelectedCustomerId(data.user_id);
setRegisterAsMember(false);
}
} catch (e) {
console.error('Customer autofill error:', e);
@@ -1287,27 +1284,6 @@ export default function OrderForm({
<Textarea value={note} onChange={e=>setNote(e.target.value)} placeholder={__('Write a note for this order…')} />
</div>
{/* Register as member checkbox (only for new orders and when no existing customer selected) */}
{mode === 'create' && !selectedCustomerId && (
<div className="rounded border p-4">
<div className="flex items-start gap-2">
<Checkbox
id="register_member"
checked={registerAsMember}
onCheckedChange={(v) => setRegisterAsMember(Boolean(v))}
/>
<div className="flex-1">
<Label htmlFor="register_member" className="cursor-pointer">
{__('Register customer as site member')}
</Label>
<p className="text-xs text-muted-foreground mt-1">
{__('Customer will receive login credentials via email and can track their orders.')}
</p>
</div>
</div>
</div>
)}
{!hideSubmitButton && (
<Button type="submit" disabled={submitting} className="w-full">
{submitting ? (mode === 'edit' ? __('Saving…') : __('Creating…')) : (mode === 'edit' ? __('Save changes') : __('Create order'))}