Abo-Angebote im Ticketsystem: Sammelliste, neues Angebot, Kunden-Reiter Abo & Angebote
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
109aef6805
commit
281c49d406
7 files changed
+321
-1
No files matched your search
@@ -17,6 +17,7 @@ import ChatThread from '../components/chat/ChatThread'
|
||||
import AboStatusCard from '../components/customer/AboStatusCard'
|
||||
import CustomerFunktionen from '../components/customer/CustomerFunktionen'
|
||||
import CreditsView from '../components/credits/CreditsView'
|
||||
import OffersView from '../components/offers/OffersView'
|
||||
import KundenansichtButton from '../components/customer/KundenansichtButton'
|
||||
import { getCustomerPortalStatus } from '../lib/teamApi'
|
||||
import { formatLastLogin } from '../lib/lastLogin'
|
||||
@@ -109,7 +110,12 @@ export default function CustomerDetailPage() {
|
||||
{activeTab === 'invoices' && <CustomerInvoices customer={customer} onShowOverview={() => setTab('overview')} />}
|
||||
{activeTab === 'projects' && <CustomerProjects customerId={customer.$id} />}
|
||||
{activeTab === 'chat' && <Card><ChatThread customerId={customer.$id} customerName={customer.name} /></Card>}
|
||||
{activeTab === 'abo' && <AboStatusCard customerId={customer.$id} />}
|
||||
{activeTab === 'abo' && (
|
||||
<>
|
||||
<AboStatusCard customerId={customer.$id} />
|
||||
<div style={{ marginTop: 16 }}><OffersView customerId={customer.$id} customerName={customer.name} /></div>
|
||||
</>
|
||||
)}
|
||||
{activeTab === 'gutschriften' && <CreditsView customerId={customer.$id} />}
|
||||
{activeTab === 'funktionen' && <CustomerFunktionen customerId={customer.$id} />}
|
||||
{activeTab === 'protokoll' && <CustomerViewLog customerId={customer.$id} />}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import { PageHeader } from '../components/ui'
|
||||
import OffersView from '../components/offers/OffersView'
|
||||
|
||||
// Kunden -> Abo-Angebote: individuelle Angebote aller Kunden (Stripe-Coupon je Angebot)
|
||||
export default function OffersPage() {
|
||||
return (
|
||||
<div className="page">
|
||||
<PageHeader title="Abo-Angebote" subtitle="Individuelle Angebote für das Wartungs- oder Hosting-Abo" />
|
||||
<OffersView />
|
||||
<p className="area-muted" style={{ marginTop: 12 }}>Ein Angebot legt sofort einen einmal einlösbaren Coupon in Stripe an. Ohne laufendes Abo wird er beim Abschluss angewendet (und schaltet die Bestellung für diesen Kunden frei), bei laufendem Abo gilt er ab der nächsten Abbuchung. Nach den Angebotsmonaten gilt automatisch wieder der reguläre Preis.</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in new issue
Block a user