feat(purchases): implement purchase receipt functionality with form and receipt template

- Added `ProductPurchaseComponent` to handle product purchases.
- Created `PurchaseReceiptTemplateComponent` for displaying purchase receipt details.
- Developed `PurchaseFormComponent` for managing purchase form inputs and submission.
- Introduced `ProductChargeRowFormComponent` and `ProductChargeRowFormFieldsComponent` for handling product charge rows in the form.
- Implemented `PurchaseReceiptProductRowComponent` for displaying individual product rows in the receipt.
- Established API routes for purchase operations in `apiRoutes`.
- Integrated suppliers and inventories selection components.
- Added utility functions for converting prices to Persian alphabet.
- Created a utility for generating full names from name parts.
- Enhanced form validation and submission handling in the purchase form.
- Updated styles and templates for improved UI/UX.
This commit is contained in:
2025-12-09 20:17:00 +03:30
parent abf53bac03
commit 50bc9a4632
77 changed files with 1807 additions and 18834 deletions
+5 -2
View File
@@ -14,7 +14,7 @@ type PSize = 'small' | 'normal' | 'large';
templateUrl: './uikit-field.component.html',
})
export class UikitFieldComponent {
@Input() label!: string;
@Input() label: string = '';
@Input() name!: string;
@Input() pSize: PSize = 'normal';
@Input() className?: string;
@@ -22,9 +22,12 @@ export class UikitFieldComponent {
// accept a FormControl or AbstractControl to display errors for
@Input() control?: AbstractControl | null;
@Input() showErrors: boolean = true;
@Input() showLabel: boolean = true;
private errorsService = inject(FormErrorsService);
get showErrors(): boolean {
get hasError(): boolean {
if (!this.control) return !!this.invalid;
return !!(this.control.invalid && (this.control.touched || this.control.dirty));
}