feat: abweichende Lieferadresse und Empfänger vor Ort anzeigen
Belege können im ERP eine eigene Lieferadresse (LieferAdressId) mit anderer Person tragen als der Besteller. Die App zeigt jetzt überall den Empfänger vor Ort: - TourDetails.recipientOf liefert Empfänger (Name aus der Lieferadresse, sonst Besteller), Lieferanschrift und differsFromOrderer. - Sortieren, Auswählen, Beladen und Liefer-Übersicht: Empfängername + Lieferadresse, bei Abweichung „Bestellt von: <Kunde>". - Lieferdetails: hervorgehobene Karte „Abweichende Lieferadresse" mit Empfänger, Anschrift und Kontakt; Kunden-Block als „Besteller (Kunde)" mit Adresse, Kundennummer und Kontaktdaten. - Maps navigiert zur Lieferadresse statt zur Kundenadresse; AppBar, Unterschrift und Beladen-Avatar nutzen den Empfänger. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/article.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/customer.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/delivery.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/delivery_item.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/tour_details.dart';
|
||||
@ -13,6 +12,7 @@ import 'package:hl_lieferservice/feature/cars/bloc/cars_state.dart';
|
||||
import 'package:hl_lieferservice/feature/delivery/detail/presentation/delivery_detail_page.dart';
|
||||
import 'package:hl_lieferservice/feature/delivery/overview/presentation/delivery_info.dart';
|
||||
import 'package:hl_lieferservice/feature/delivery/pickup/presentation/filiale_pickup_scan_page.dart';
|
||||
import 'package:hl_lieferservice/widget/orderer_hint.dart';
|
||||
|
||||
/// Entscheidet beim Tap auf eine Lieferung, wohin navigiert wird:
|
||||
///
|
||||
@ -408,6 +408,7 @@ class _NextDeliveryCard extends StatelessWidget {
|
||||
final theme = Theme.of(context);
|
||||
final delivery = entry.delivery;
|
||||
final customer = details.customerOf(delivery);
|
||||
final recipient = details.recipientOf(delivery);
|
||||
final pendingExternal = details.pendingExternalWarehouseGroups(delivery);
|
||||
final hasPendingExternal = pendingExternal.isNotEmpty;
|
||||
|
||||
@ -432,15 +433,19 @@ class _NextDeliveryCard extends StatelessWidget {
|
||||
children: [
|
||||
_HeaderRow(
|
||||
position: entry.position,
|
||||
customer: customer,
|
||||
name: recipient.name,
|
||||
desiredTime: delivery.desiredTime,
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
_InfoRow(
|
||||
icon: Icons.location_on_outlined,
|
||||
text: delivery.deliveryAddressSnapshot.oneLine,
|
||||
text: recipient.address.oneLine,
|
||||
emphasized: true,
|
||||
),
|
||||
if (recipient.differsFromOrderer)
|
||||
OrdererHint(
|
||||
ordererName: customer?.name ?? '⟨Unbekannter Kunde⟩',
|
||||
),
|
||||
if (delivery.specialAgreements != null &&
|
||||
delivery.specialAgreements!.isNotEmpty) ...[
|
||||
const SizedBox(height: 6),
|
||||
@ -492,12 +497,12 @@ class _NextDeliveryCard extends StatelessWidget {
|
||||
class _HeaderRow extends StatelessWidget {
|
||||
const _HeaderRow({
|
||||
required this.position,
|
||||
required this.customer,
|
||||
required this.name,
|
||||
required this.desiredTime,
|
||||
});
|
||||
|
||||
final int position;
|
||||
final Customer? customer;
|
||||
final String name;
|
||||
final String? desiredTime;
|
||||
|
||||
@override
|
||||
@ -524,7 +529,7 @@ class _HeaderRow extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
customer?.name ?? '⟨Unbekannter Kunde⟩',
|
||||
name,
|
||||
style: theme.textTheme.titleLarge?.copyWith(
|
||||
fontWeight: FontWeight.w700,
|
||||
),
|
||||
@ -791,6 +796,7 @@ class _DeliveryTile extends StatelessWidget {
|
||||
final theme = Theme.of(context);
|
||||
final delivery = entry.delivery;
|
||||
final customer = details.customerOf(delivery);
|
||||
final recipient = details.recipientOf(delivery);
|
||||
final pendingExternal = details.pendingExternalWarehouseGroups(delivery);
|
||||
final hasPendingExternal = pendingExternal.isNotEmpty;
|
||||
|
||||
@ -828,7 +834,7 @@ class _DeliveryTile extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
customer?.name ?? '⟨Unbekannter Kunde⟩',
|
||||
recipient.name,
|
||||
style: TextStyle(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w600,
|
||||
@ -840,12 +846,16 @@ class _DeliveryTile extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(height: 2),
|
||||
Text(
|
||||
delivery.deliveryAddressSnapshot.oneLine,
|
||||
recipient.address.oneLine,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
color: theme.colorScheme.onSurfaceVariant,
|
||||
),
|
||||
),
|
||||
if (recipient.differsFromOrderer)
|
||||
OrdererHint(
|
||||
ordererName: customer?.name ?? '⟨Unbekannter Kunde⟩',
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
|
||||
Reference in New Issue
Block a user