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:
155
test/delivery_recipient_test.dart
Normal file
155
test/delivery_recipient_test.dart
Normal file
@ -0,0 +1,155 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import 'package:hl_lieferservice/domain/entity/address.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/contact_source.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/customer.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/delivery.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/tour.dart';
|
||||
import 'package:hl_lieferservice/domain/entity/tour_details.dart';
|
||||
|
||||
const _ordererAddress = Address(
|
||||
street: 'Neukirchener Str.',
|
||||
houseNumber: '73',
|
||||
postalCode: '41470',
|
||||
city: 'Neuss',
|
||||
country: 'DE',
|
||||
);
|
||||
|
||||
const _otherAddress = Address(
|
||||
street: 'Marienstr.',
|
||||
houseNumber: '3',
|
||||
postalCode: '41564',
|
||||
city: 'Kaarst',
|
||||
country: 'DE',
|
||||
);
|
||||
|
||||
ContactSource _source(ContactRole role, String name1, {String? name2}) =>
|
||||
ContactSource(
|
||||
id: 'src-${role.name}',
|
||||
deliveryId: 'd1',
|
||||
role: role,
|
||||
anrede: 'Frau',
|
||||
name1: name1,
|
||||
name2: name2,
|
||||
);
|
||||
|
||||
TourDetails _details({
|
||||
required Address deliveryAddress,
|
||||
List<ContactSource> sources = const [],
|
||||
}) => TourDetails(
|
||||
tour: Tour(
|
||||
id: 't1',
|
||||
accountId: 414,
|
||||
date: DateTime(2026, 9, 25),
|
||||
syncedAt: DateTime(2026),
|
||||
),
|
||||
deliveries: [
|
||||
Delivery(
|
||||
id: 'd1',
|
||||
tourId: 't1',
|
||||
customerId: 'c1',
|
||||
contactPersonIds: const [],
|
||||
deliveryAddressSnapshot: deliveryAddress,
|
||||
erpBelegartId: 24,
|
||||
erpBelegnummer: 'V-1',
|
||||
state: DeliveryState.active,
|
||||
sortOrder: 1,
|
||||
prepaidAmount: 0,
|
||||
paymentMethodId: 'm-cash',
|
||||
items: const [],
|
||||
),
|
||||
],
|
||||
customers: const {
|
||||
'c1': Customer(
|
||||
id: 'c1',
|
||||
name: 'Kraus Heike',
|
||||
erpCustomerId: 4711,
|
||||
address: _ordererAddress,
|
||||
),
|
||||
},
|
||||
contacts: const {},
|
||||
articles: const {},
|
||||
warehouses: const {},
|
||||
notesByDeliveryId: const {},
|
||||
creditsByDeliveryId: const {},
|
||||
paymentsByDeliveryId: const {},
|
||||
services: const [],
|
||||
serviceValuesByDeliveryId: const {},
|
||||
contactSourcesByDeliveryId: {'d1': sources},
|
||||
contactChannelsBySourceId: const {},
|
||||
);
|
||||
|
||||
void main() {
|
||||
test('ohne eigene Lieferadresse ist der Besteller der Empfänger', () {
|
||||
final details = _details(
|
||||
deliveryAddress: _ordererAddress,
|
||||
sources: [_source(ContactRole.header, 'Kraus Heike')],
|
||||
);
|
||||
final r = details.recipientOf(details.deliveries.single);
|
||||
|
||||
expect(r.name, 'Kraus Heike');
|
||||
expect(r.differsFromOrderer, isFalse);
|
||||
});
|
||||
|
||||
test('andere Person an anderer Adresse weicht ab', () {
|
||||
final details = _details(
|
||||
deliveryAddress: _otherAddress,
|
||||
sources: [
|
||||
_source(ContactRole.header, 'Kraus Heike'),
|
||||
_source(ContactRole.delivery, 'Stülp', name2: 'Hans-Dieter'),
|
||||
],
|
||||
);
|
||||
final r = details.recipientOf(details.deliveries.single);
|
||||
|
||||
// Name ohne Anrede, wie der Kundenname in den Listen.
|
||||
expect(r.name, 'Stülp Hans-Dieter');
|
||||
expect(r.address, _otherAddress);
|
||||
expect(r.contact?.role, ContactRole.delivery);
|
||||
expect(r.differsFromOrderer, isTrue);
|
||||
});
|
||||
|
||||
test('andere Person an derselben Adresse weicht ab', () {
|
||||
final details = _details(
|
||||
deliveryAddress: _ordererAddress,
|
||||
sources: [
|
||||
_source(ContactRole.header, 'Kraus Heike'),
|
||||
_source(ContactRole.delivery, 'Kraus Peter'),
|
||||
],
|
||||
);
|
||||
|
||||
expect(
|
||||
details.recipientOf(details.deliveries.single).differsFromOrderer,
|
||||
isTrue,
|
||||
);
|
||||
});
|
||||
|
||||
test('gleiche Person, nur andere Schreibweise, weicht nicht ab', () {
|
||||
final details = _details(
|
||||
deliveryAddress: const Address(
|
||||
street: 'neukirchener str.',
|
||||
houseNumber: '73',
|
||||
postalCode: '41470',
|
||||
city: 'NEUSS',
|
||||
country: 'DE',
|
||||
),
|
||||
sources: [
|
||||
_source(ContactRole.header, 'Kraus Heike'),
|
||||
_source(ContactRole.delivery, 'Kraus heike'),
|
||||
],
|
||||
);
|
||||
|
||||
expect(
|
||||
details.recipientOf(details.deliveries.single).differsFromOrderer,
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
|
||||
test('abweichende Adresse ohne eigenen Namen: Besteller-Name, Hinweis an',
|
||||
() {
|
||||
final details = _details(deliveryAddress: _otherAddress);
|
||||
final r = details.recipientOf(details.deliveries.single);
|
||||
|
||||
expect(r.name, 'Kraus Heike');
|
||||
expect(r.differsFromOrderer, isTrue);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user