feat: add sale invoice card component with functionality for sending and retrieving invoice status

- Implemented sale invoice card component with HTML and TypeScript files.
- Added API routes for sale invoices including sending, retrying, and checking status.
- Created models for sale invoice fiscal actions and filters.
- Developed service for handling sale invoice operations.
- Introduced store for managing sale invoice state.
- Created views for listing and displaying single sale invoices.
- Added support for managing stock keeping units with forms and services.
- Implemented reusable select components for measure units and SKUs.
- Enhanced shared components for input fields including fiscal ID, SKU type, and VAT.
This commit is contained in:
2026-05-01 19:45:30 +03:30
parent 8104f1b7a7
commit 83f124b910
94 changed files with 1555 additions and 214 deletions
+70 -16
View File
@@ -8,13 +8,31 @@ type ControlConfig = [string, ValidatorFn[]];
export const fieldControl = {
name: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
code: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
description: (value = '', isRequired = false): ControlConfig => [value, isRequired ? required() : []],
company_name: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
first_name: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
firstName: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
last_name: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
description: (value = '', isRequired = false): ControlConfig => [
value,
isRequired ? required() : [],
],
company_name: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
first_name: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
firstName: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
last_name: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
lastName: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
legal_name: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
legal_name: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
registration_code: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
@@ -52,7 +70,7 @@ export const fieldControl = {
value,
isRequired ? required() : [],
],
fiscal_code: (value = '', isRequired = true): ControlConfig => [
fiscal_id: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? [Validators.required, fiscalCodeValidator()] : [fiscalCodeValidator()],
],
@@ -73,31 +91,67 @@ export const fieldControl = {
pos_type: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
type: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
role: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
unit_type: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
pricing_model: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
unit_type: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
pricing_model: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
gender: (value = '', isRequired = false): ControlConfig => [value, isRequired ? required() : []],
legal: (value = '', isRequired = false): ControlConfig => [value, isRequired ? required() : []],
individual: (value = '', isRequired = false): ControlConfig => [
value,
isRequired ? required() : [],
],
partner_id: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
partner_id: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
brand_id: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
category_id: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
starts_at: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
expires_at: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
category_id: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
starts_at: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
expires_at: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
activated_expires_at: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
invoiceDate: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
invoiceDate: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
quantity: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
unit_price: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
unit_price: (value = '', isRequired = true): ControlConfig => [
value,
isRequired ? required() : [],
],
cash: (value = '', isRequired = false): ControlConfig => [value, isRequired ? required() : []],
set_off: (value = '', isRequired = false): ControlConfig => [value, isRequired ? required() : []],
setOff: (value = '', isRequired = false): ControlConfig => [value, isRequired ? required() : []],
terminal: (value = '', isRequired = false): ControlConfig => [value, isRequired ? required() : []],
terminal: (value = '', isRequired = false): ControlConfig => [
value,
isRequired ? required() : [],
],
sku: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
VAT: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
is_public: (value = 'true', isRequired = false): ControlConfig => [
value,
isRequired ? required() : [],
],
is_domestic: (value = 'true', isRequired = false): ControlConfig => [
value,
isRequired ? required() : [],
],
model: (value = '', isRequired = true): ControlConfig => [value, isRequired ? required() : []],
serial_number: (value = '', isRequired = false): ControlConfig => [
value,