feat(121+122): smsplanet conversation, notifications, default footer
Phase 121 — SMSPLANET Conversation + Notifications:
- migration 20260512_000110 adds smsplanet conversation + notifications tables
- src/Modules/Sms (SmsConversationService, SmsMessageRepository, SmsplanetWebhookController)
- src/Modules/Notifications (Repository, Controller, ApiController)
- order SMS tab, notification center, sender mode, inbound webhook
- public notifications.js + layouts/app.php integration
Phase 122 — SMSPLANET Default SMS Footer:
- migration 20260512_000111 adds smsplanet_integration_settings.default_footer
- footer appended to test SMS and order SMS, validated against 918 char limit
- settings textarea + compact order SMS note when footer configured
Bundled (could not split per-phase without hunk staging):
- routes/web.php (also carries Phase 118 fakturownia redirects)
- DOCS/{ARCHITECTURE,DB_SCHEMA,TECH_CHANGELOG}.md (118 + 121 + 122 entries)
- .paul/codebase/{architecture,db_schema,tech_changelog}.md (118 + 121 + 122)
- .paul/STATE.md, ROADMAP.md, changelog/2026-05-12.md (UNIFY closure)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -2126,6 +2126,137 @@ details[open] > .order-statuses-side__title .order-statuses-side__arrow {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.order-sms-head,
|
||||
.notifications-page__head {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.order-sms-thread {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.order-sms-bubble {
|
||||
background: #f8fafc;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 8px;
|
||||
max-width: 76%;
|
||||
padding: 8px 10px;
|
||||
}
|
||||
|
||||
.order-sms-bubble--outbound {
|
||||
align-self: flex-end;
|
||||
background: #ecfdf5;
|
||||
border-color: #bbf7d0;
|
||||
}
|
||||
|
||||
.order-sms-bubble--inbound {
|
||||
align-self: flex-start;
|
||||
}
|
||||
|
||||
.order-sms-bubble__meta {
|
||||
color: #64748b;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
font-size: 12px;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.order-sms-bubble__body {
|
||||
color: #0f172a;
|
||||
font-size: 14px;
|
||||
line-height: 1.35;
|
||||
margin: 4px 0;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.order-sms-form {
|
||||
display: grid;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.topbar-notifications {
|
||||
align-items: center;
|
||||
border: 1px solid #dbe4ef;
|
||||
border-radius: 8px;
|
||||
color: #334155;
|
||||
display: inline-flex;
|
||||
height: 34px;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
width: 38px;
|
||||
}
|
||||
|
||||
.topbar-notifications:hover {
|
||||
background: #f8fafc;
|
||||
color: #0f172a;
|
||||
}
|
||||
|
||||
.topbar-notifications__badge {
|
||||
align-items: center;
|
||||
background: #dc2626;
|
||||
border-radius: 999px;
|
||||
color: #fff;
|
||||
display: inline-flex;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
height: 18px;
|
||||
justify-content: center;
|
||||
min-width: 18px;
|
||||
padding: 0 5px;
|
||||
position: absolute;
|
||||
right: -6px;
|
||||
top: -6px;
|
||||
}
|
||||
|
||||
.notifications-list {
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.notification-row {
|
||||
align-items: center;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
justify-content: space-between;
|
||||
padding: 10px 12px;
|
||||
}
|
||||
|
||||
.notification-row--unread {
|
||||
background: #f8fafc;
|
||||
border-color: #93c5fd;
|
||||
}
|
||||
|
||||
.notification-row__title {
|
||||
color: #0f172a;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.notification-row__body {
|
||||
color: #334155;
|
||||
margin-top: 3px;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.notification-row__meta {
|
||||
color: #64748b;
|
||||
font-size: 12px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.notification-row__actions {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.manual-tracking-form {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
@@ -2753,6 +2884,26 @@ details[open] > .order-statuses-side__title .order-statuses-side__arrow {
|
||||
accent-color: var(--c-action-primary);
|
||||
}
|
||||
|
||||
.smsplanet-sender-phone-field {
|
||||
grid-column: 2;
|
||||
}
|
||||
|
||||
.smsplanet-default-footer-field {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.smsplanet-default-footer-field textarea {
|
||||
min-height: 78px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.order-sms-footer-note {
|
||||
color: #64748b;
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
// Hamburger button (hidden on desktop)
|
||||
.topbar__hamburger {
|
||||
display: none;
|
||||
@@ -2934,6 +3085,14 @@ body.no-scroll {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.smsplanet-sender-phone-field {
|
||||
grid-column: 1;
|
||||
}
|
||||
|
||||
.smsplanet-default-footer-field {
|
||||
grid-column: 1;
|
||||
}
|
||||
|
||||
.card {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user