This commit is contained in:
Nino
2025-03-14 12:23:21 +01:00
14 changed files with 139 additions and 31 deletions

View File

@@ -2,6 +2,7 @@ export * from './lib/return-details-data/return-details-data.component';
export * from './lib/return-details-header/return-details-header.component';
export * from './lib/return-details-order-group/return-details-order-group.component';
export * from './lib/return-details-order-group-item/return-details-order-group-item.component';
export * from './lib/return-details-order-group-data/return-details-order-group-data.component';
export * from './lib/return-results-item-list/';
export * from './lib/return-order-by-list/';
export * from './lib/return-results-filter-list/';

View File

@@ -13,7 +13,3 @@
gap: 1rem;
align-self: stretch;
}
ui-item-row-data-label {
width: 14.5rem;
}

View File

@@ -1,7 +1,9 @@
<ui-item-row-data>
<ui-item-row-data-row>
<ui-item-row-data-label>Belegdatum:</ui-item-row-data-label>
<ui-item-row-data-value> </ui-item-row-data-value>
<ui-item-row-data-value>
{{ receipt().printedDate | date }}
</ui-item-row-data-value>
</ui-item-row-data-row>
<ui-item-row-data-row>
<ui-item-row-data-label>Belegart:</ui-item-row-data-label>
@@ -11,18 +13,35 @@
</ui-item-row-data-row>
<ui-item-row-data-row>
<ui-item-row-data-label>Vorgangs-ID:</ui-item-row-data-label>
<ui-item-row-data-value> </ui-item-row-data-value>
<ui-item-row-data-value>
{{ receipt().order?.data?.orderNumber }}
</ui-item-row-data-value>
</ui-item-row-data-row>
<ui-item-row-data-row>
<ui-item-row-data-label>Bestelldatum:</ui-item-row-data-label>
<ui-item-row-data-value> </ui-item-row-data-value>
</ui-item-row-data-row>
<ui-item-row-data-row>
<ui-item-row-data-label>Anschrift:</ui-item-row-data-label>
<ui-item-row-data-value> </ui-item-row-data-value>
</ui-item-row-data-row>
<ui-item-row-data-row>
<ui-item-row-data-label>Lieferanschrift:</ui-item-row-data-label>
<ui-item-row-data-value> </ui-item-row-data-value>
<ui-item-row-data-value>
{{ receipt().order?.data?.orderDate | date }}
</ui-item-row-data-value>
</ui-item-row-data-row>
@if (receipt().buyer?.address; as address) {
<ui-item-row-data-row>
<ui-item-row-data-label>Anschrift:</ui-item-row-data-label>
<ui-item-row-data-value>
<div>{{ buyerName() }}</div>
<div>{{ address.street }} {{ address.streetNumber }}</div>
<div>{{ address.zipCode }} {{ address.city }}</div>
</ui-item-row-data-value>
</ui-item-row-data-row>
}
@if (receipt().shipping.address; as address) {
<ui-item-row-data-row>
<ui-item-row-data-label>Lieferanschrift:</ui-item-row-data-label>
<ui-item-row-data-value>
<div>{{ shippingName() }}</div>
<div>{{ address.street }} {{ address.streetNumber }}</div>
<div>{{ address.zipCode }} {{ address.city }}</div>
</ui-item-row-data-value>
</ui-item-row-data-row>
}
</ui-item-row-data>

View File

@@ -0,0 +1,3 @@
ui-item-row-data-label {
width: 14.5rem;
}

View File

@@ -1,4 +1,5 @@
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
import { DatePipe } from '@angular/common';
import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
import { Receipt } from '@feature/return/services';
import { ReceiptTypeTranslationPipe } from '@isa/oms/utils/translation';
import { ItemRowDataImports } from '@isa/ui/item-rows';
@@ -9,8 +10,20 @@ import { ItemRowDataImports } from '@isa/ui/item-rows';
styleUrls: ['./return-details-order-group-data.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
imports: [ItemRowDataImports, ReceiptTypeTranslationPipe],
imports: [ItemRowDataImports, ReceiptTypeTranslationPipe, DatePipe],
})
export class ReturnDetailsOrderGroupDataComponent {
receipt = input.required<Receipt>();
buyerName = computed(() => {
const receipt = this.receipt();
return [receipt.buyer?.firstName, receipt.buyer?.lastName].filter(Boolean).join(' ');
});
shippingName = computed(() => {
const receipt = this.receipt();
return [receipt.shipping?.person?.firstName, receipt.shipping?.person?.lastName]
.filter(Boolean)
.join(' ');
});
}

View File

@@ -2,7 +2,39 @@
@if (receipt) {
<lib-return-details-header [buyer]="receipt.buyer"></lib-return-details-header>
<lib-return-details-data [receipt]="receipt"></lib-return-details-data>
<div class="flex flex-col gap-3 justify-start items-start w-full">
<lib-return-details-data [receipt]="receipt"></lib-return-details-data>
@if (showMore()) {
<lib-return-details-order-group-data
[receipt]="receipt"
></lib-return-details-order-group-data>
<button
class="-ml-3"
uiTextButton
type="button"
color="strong"
size="small"
(click)="showMore.set(false)"
>
<ng-icon name="isaActionMinus"></ng-icon>
Weniger anzeigen
</button>
} @else {
<button
class="-ml-3"
uiTextButton
type="button"
color="strong"
size="small"
(click)="showMore.set(true)"
>
<ng-icon name="isaActionPlus"></ng-icon>
Mehr anzeigen
</button>
}
</div>
<lib-return-details-order-group [items]="receipt.items"></lib-return-details-order-group>
@for (item of receipt.items; track item.id) {
<lib-return-details-order-group-item [item]="item.data"></lib-return-details-order-group-item>

View File

@@ -4,6 +4,7 @@ import {
computed,
effect,
inject,
signal,
untracked,
} from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@@ -12,11 +13,14 @@ import {
ReturnDetailsDataComponent,
ReturnDetailsHeaderComponent,
ReturnDetailsOrderGroupComponent,
ReturnDetailsOrderGroupDataComponent,
ReturnDetailsOrderGroupItemComponent,
} from '@feature/return/containers';
import { z } from 'zod';
import { ReceiptItem, ReturnDetailsStore } from '@feature/return/services';
import { Dictionary, groupBy } from 'lodash';
import { ReturnDetailsStore } from '@feature/return/services';
import { NgIconComponent, provideIcons } from '@ng-icons/core';
import { isaActionPlus, isaActionMinus } from '@isa/icons';
import { TextButtonComponent } from '@isa/ui/buttons';
@Component({
selector: 'lib-return-details-page',
@@ -25,15 +29,21 @@ import { Dictionary, groupBy } from 'lodash';
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
imports: [
NgIconComponent,
TextButtonComponent,
ReturnDetailsHeaderComponent,
ReturnDetailsDataComponent,
ReturnDetailsOrderGroupComponent,
ReturnDetailsOrderGroupItemComponent,
ReturnDetailsOrderGroupDataComponent,
],
providers: [provideIcons({ isaActionPlus, isaActionMinus })],
})
export class DetailsPageComponent {
private _params = toSignal(inject(ActivatedRoute).params);
showMore = signal(false);
#returnDetailsStore = inject(ReturnDetailsStore);
itemId = computed<number>(() => {

View File

@@ -0,0 +1,16 @@
import { z } from 'zod';
import { AddressSchema } from './address.schema';
import { CommunicationDetailsSchema } from './communication-details.schemas';
import { OrganisationSchema } from './receipt-list-item.schema';
import { GenderSchema } from './gender.schema';
export const AddresseeSchema = z.object({
address: AddressSchema.optional(),
communicationDetails: CommunicationDetailsSchema.optional(),
firstName: z.string().optional(),
lastName: z.string().optional(),
locale: z.string().optional(),
organisation: OrganisationSchema.optional(),
title: z.string().optional(),
gender: GenderSchema.optional(),
});

View File

@@ -1,10 +1,6 @@
import { z } from 'zod';
import { CommunicationDetailsSchema } from './communication-details.schemas';
import { AddresseeSchema } from './addressee.schema';
export const BuyerSchema = z.object({
firstName: z.string(),
lastName: z.string(),
communicationDetails: CommunicationDetailsSchema,
});
export const BuyerSchema = AddresseeSchema.extend({});
export type Buyer = z.infer<typeof BuyerSchema>;

View File

@@ -0,0 +1,10 @@
import { z } from 'zod';
export enum Gender {
NotSet = 0,
Neutrum = 1,
Male = 2,
Female = 4,
}
export const GenderSchema = z.nativeEnum(Gender);

View File

@@ -1,3 +1,7 @@
import { z } from 'zod';
export const OrderSchema = z.object({});
export const OrderSchema = z.object({
id: z.number(),
orderNumber: z.string(),
orderDate: z.coerce.date(),
});

View File

@@ -1,3 +1,3 @@
import { z } from 'zod';
import { AddresseeSchema } from './addressee.schema';
export const Payer2Schema = z.object({});
export const Payer2Schema = AddresseeSchema.extend({});

View File

@@ -3,12 +3,20 @@ import { BuyerSchema } from './buyer.schema';
import { EntityContainer } from '@isa/common/result';
import { ReceiptItemSchema } from './receipt-item.schema';
import { ReceiptTypeSchema } from './receipt-type.schema';
import { OrderSchema } from './order.schema';
import { Payer2Schema } from './payer-2.schema';
import { ShippingAddress2Schema } from './shipping-address-2.schema';
export const ReceiptSchema = z.object({
id: z.number(),
receiptType: ReceiptTypeSchema,
buyer: BuyerSchema,
items: EntityContainer(ReceiptItemSchema).array(),
printedDate: z.coerce.date(),
receiptNumber: z.string(),
order: EntityContainer(OrderSchema),
billing: Payer2Schema,
shipping: ShippingAddress2Schema,
});
export type Receipt = z.infer<typeof ReceiptSchema>;

View File

@@ -1,3 +1,3 @@
import { z } from 'zod';
import { AddresseeSchema } from './receipt-list-item.schema';
export const ShippingAddress2Schema = z.object({});
export const ShippingAddress2Schema = AddresseeSchema.extend({});