@open-mercato/core 0.4.8-develop-d16e2f51dc → 0.4.8-develop-4b58cde65d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/entities/sales_return/index.js +31 -0
- package/dist/generated/entities/sales_return/index.js.map +7 -0
- package/dist/generated/entities/sales_return_line/index.js +29 -0
- package/dist/generated/entities/sales_return_line/index.js.map +7 -0
- package/dist/generated/entities.ids.generated.js +2 -0
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +4 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/modules/sales/acl.js +2 -0
- package/dist/modules/sales/acl.js.map +2 -2
- package/dist/modules/sales/api/document-history/route.js +20 -2
- package/dist/modules/sales/api/document-history/route.js.map +2 -2
- package/dist/modules/sales/api/documents/factory.js +34 -0
- package/dist/modules/sales/api/documents/factory.js.map +2 -2
- package/dist/modules/sales/api/returns/[id]/route.js +147 -0
- package/dist/modules/sales/api/returns/[id]/route.js.map +7 -0
- package/dist/modules/sales/api/returns/route.js +158 -0
- package/dist/modules/sales/api/returns/route.js.map +7 -0
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +20 -1
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/index.js +1 -0
- package/dist/modules/sales/commands/index.js.map +2 -2
- package/dist/modules/sales/commands/returns.js +467 -0
- package/dist/modules/sales/commands/returns.js.map +7 -0
- package/dist/modules/sales/components/documents/ReturnDialog.js +176 -0
- package/dist/modules/sales/components/documents/ReturnDialog.js.map +7 -0
- package/dist/modules/sales/components/documents/ReturnsSection.js +188 -0
- package/dist/modules/sales/components/documents/ReturnsSection.js.map +7 -0
- package/dist/modules/sales/data/entities.js +115 -1
- package/dist/modules/sales/data/entities.js.map +2 -2
- package/dist/modules/sales/data/validators.js +13 -0
- package/dist/modules/sales/data/validators.js.map +2 -2
- package/dist/modules/sales/events.js +4 -0
- package/dist/modules/sales/events.js.map +2 -2
- package/dist/modules/sales/lib/calculations.js +7 -0
- package/dist/modules/sales/lib/calculations.js.map +2 -2
- package/dist/modules/sales/lib/dictionaries.js +1 -0
- package/dist/modules/sales/lib/dictionaries.js.map +2 -2
- package/dist/modules/sales/lib/documentNumberTokens.js +2 -0
- package/dist/modules/sales/lib/documentNumberTokens.js.map +2 -2
- package/dist/modules/sales/lib/historyHelpers.js +15 -7
- package/dist/modules/sales/lib/historyHelpers.js.map +2 -2
- package/dist/modules/sales/lib/makeSalesLineRoute.js +42 -37
- package/dist/modules/sales/lib/makeSalesLineRoute.js.map +2 -2
- package/dist/modules/sales/migrations/Migration20260309073310.js +23 -0
- package/dist/modules/sales/migrations/Migration20260309073310.js.map +7 -0
- package/dist/modules/sales/services/salesDocumentNumberGenerator.js +8 -6
- package/dist/modules/sales/services/salesDocumentNumberGenerator.js.map +2 -2
- package/dist/modules/sales/setup.js +1 -1
- package/dist/modules/sales/setup.js.map +2 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js +25 -16
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
- package/generated/entities/sales_return/index.ts +14 -0
- package/generated/entities/sales_return_line/index.ts +13 -0
- package/generated/entities.ids.generated.ts +2 -0
- package/generated/entity-fields-registry.ts +4 -0
- package/package.json +3 -3
- package/src/modules/sales/AGENTS.md +1 -0
- package/src/modules/sales/acl.ts +2 -0
- package/src/modules/sales/api/document-history/route.ts +25 -1
- package/src/modules/sales/api/documents/factory.ts +35 -0
- package/src/modules/sales/api/returns/[id]/route.ts +156 -0
- package/src/modules/sales/api/returns/route.ts +171 -0
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +18 -0
- package/src/modules/sales/commands/index.ts +1 -0
- package/src/modules/sales/commands/returns.ts +540 -0
- package/src/modules/sales/components/documents/ReturnDialog.tsx +216 -0
- package/src/modules/sales/components/documents/ReturnsSection.tsx +270 -0
- package/src/modules/sales/data/entities.ts +99 -3
- package/src/modules/sales/data/validators.ts +16 -0
- package/src/modules/sales/events.ts +5 -0
- package/src/modules/sales/i18n/de.json +32 -0
- package/src/modules/sales/i18n/en.json +32 -0
- package/src/modules/sales/i18n/es.json +32 -0
- package/src/modules/sales/i18n/pl.json +32 -0
- package/src/modules/sales/lib/calculations.ts +9 -0
- package/src/modules/sales/lib/dictionaries.ts +1 -0
- package/src/modules/sales/lib/documentNumberTokens.ts +2 -1
- package/src/modules/sales/lib/historyHelpers.ts +20 -9
- package/src/modules/sales/lib/makeSalesLineRoute.ts +42 -37
- package/src/modules/sales/migrations/.snapshot-open-mercato.json +398 -0
- package/src/modules/sales/migrations/Migration20260309073310.ts +26 -0
- package/src/modules/sales/services/salesDocumentNumberGenerator.ts +15 -4
- package/src/modules/sales/setup.ts +1 -1
- package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +26 -17
|
@@ -3526,6 +3526,198 @@
|
|
|
3526
3526
|
},
|
|
3527
3527
|
"nativeEnums": {}
|
|
3528
3528
|
},
|
|
3529
|
+
{
|
|
3530
|
+
"columns": {
|
|
3531
|
+
"id": {
|
|
3532
|
+
"name": "id",
|
|
3533
|
+
"type": "uuid",
|
|
3534
|
+
"unsigned": false,
|
|
3535
|
+
"autoincrement": false,
|
|
3536
|
+
"primary": false,
|
|
3537
|
+
"nullable": false,
|
|
3538
|
+
"default": "gen_random_uuid()",
|
|
3539
|
+
"mappedType": "uuid"
|
|
3540
|
+
},
|
|
3541
|
+
"order_id": {
|
|
3542
|
+
"name": "order_id",
|
|
3543
|
+
"type": "uuid",
|
|
3544
|
+
"unsigned": false,
|
|
3545
|
+
"autoincrement": false,
|
|
3546
|
+
"primary": false,
|
|
3547
|
+
"nullable": false,
|
|
3548
|
+
"mappedType": "uuid"
|
|
3549
|
+
},
|
|
3550
|
+
"organization_id": {
|
|
3551
|
+
"name": "organization_id",
|
|
3552
|
+
"type": "uuid",
|
|
3553
|
+
"unsigned": false,
|
|
3554
|
+
"autoincrement": false,
|
|
3555
|
+
"primary": false,
|
|
3556
|
+
"nullable": false,
|
|
3557
|
+
"mappedType": "uuid"
|
|
3558
|
+
},
|
|
3559
|
+
"tenant_id": {
|
|
3560
|
+
"name": "tenant_id",
|
|
3561
|
+
"type": "uuid",
|
|
3562
|
+
"unsigned": false,
|
|
3563
|
+
"autoincrement": false,
|
|
3564
|
+
"primary": false,
|
|
3565
|
+
"nullable": false,
|
|
3566
|
+
"mappedType": "uuid"
|
|
3567
|
+
},
|
|
3568
|
+
"return_number": {
|
|
3569
|
+
"name": "return_number",
|
|
3570
|
+
"type": "text",
|
|
3571
|
+
"unsigned": false,
|
|
3572
|
+
"autoincrement": false,
|
|
3573
|
+
"primary": false,
|
|
3574
|
+
"nullable": false,
|
|
3575
|
+
"mappedType": "text"
|
|
3576
|
+
},
|
|
3577
|
+
"status_entry_id": {
|
|
3578
|
+
"name": "status_entry_id",
|
|
3579
|
+
"type": "uuid",
|
|
3580
|
+
"unsigned": false,
|
|
3581
|
+
"autoincrement": false,
|
|
3582
|
+
"primary": false,
|
|
3583
|
+
"nullable": true,
|
|
3584
|
+
"mappedType": "uuid"
|
|
3585
|
+
},
|
|
3586
|
+
"status": {
|
|
3587
|
+
"name": "status",
|
|
3588
|
+
"type": "text",
|
|
3589
|
+
"unsigned": false,
|
|
3590
|
+
"autoincrement": false,
|
|
3591
|
+
"primary": false,
|
|
3592
|
+
"nullable": true,
|
|
3593
|
+
"mappedType": "text"
|
|
3594
|
+
},
|
|
3595
|
+
"reason": {
|
|
3596
|
+
"name": "reason",
|
|
3597
|
+
"type": "text",
|
|
3598
|
+
"unsigned": false,
|
|
3599
|
+
"autoincrement": false,
|
|
3600
|
+
"primary": false,
|
|
3601
|
+
"nullable": true,
|
|
3602
|
+
"mappedType": "text"
|
|
3603
|
+
},
|
|
3604
|
+
"notes": {
|
|
3605
|
+
"name": "notes",
|
|
3606
|
+
"type": "text",
|
|
3607
|
+
"unsigned": false,
|
|
3608
|
+
"autoincrement": false,
|
|
3609
|
+
"primary": false,
|
|
3610
|
+
"nullable": true,
|
|
3611
|
+
"mappedType": "text"
|
|
3612
|
+
},
|
|
3613
|
+
"returned_at": {
|
|
3614
|
+
"name": "returned_at",
|
|
3615
|
+
"type": "timestamptz",
|
|
3616
|
+
"unsigned": false,
|
|
3617
|
+
"autoincrement": false,
|
|
3618
|
+
"primary": false,
|
|
3619
|
+
"nullable": true,
|
|
3620
|
+
"length": 6,
|
|
3621
|
+
"mappedType": "datetime"
|
|
3622
|
+
},
|
|
3623
|
+
"created_at": {
|
|
3624
|
+
"name": "created_at",
|
|
3625
|
+
"type": "timestamptz",
|
|
3626
|
+
"unsigned": false,
|
|
3627
|
+
"autoincrement": false,
|
|
3628
|
+
"primary": false,
|
|
3629
|
+
"nullable": false,
|
|
3630
|
+
"length": 6,
|
|
3631
|
+
"mappedType": "datetime"
|
|
3632
|
+
},
|
|
3633
|
+
"updated_at": {
|
|
3634
|
+
"name": "updated_at",
|
|
3635
|
+
"type": "timestamptz",
|
|
3636
|
+
"unsigned": false,
|
|
3637
|
+
"autoincrement": false,
|
|
3638
|
+
"primary": false,
|
|
3639
|
+
"nullable": false,
|
|
3640
|
+
"length": 6,
|
|
3641
|
+
"mappedType": "datetime"
|
|
3642
|
+
},
|
|
3643
|
+
"deleted_at": {
|
|
3644
|
+
"name": "deleted_at",
|
|
3645
|
+
"type": "timestamptz",
|
|
3646
|
+
"unsigned": false,
|
|
3647
|
+
"autoincrement": false,
|
|
3648
|
+
"primary": false,
|
|
3649
|
+
"nullable": true,
|
|
3650
|
+
"length": 6,
|
|
3651
|
+
"mappedType": "datetime"
|
|
3652
|
+
}
|
|
3653
|
+
},
|
|
3654
|
+
"name": "sales_returns",
|
|
3655
|
+
"schema": "public",
|
|
3656
|
+
"indexes": [
|
|
3657
|
+
{
|
|
3658
|
+
"keyName": "sales_returns_status_idx",
|
|
3659
|
+
"columnNames": [
|
|
3660
|
+
"organization_id",
|
|
3661
|
+
"tenant_id",
|
|
3662
|
+
"status"
|
|
3663
|
+
],
|
|
3664
|
+
"composite": true,
|
|
3665
|
+
"constraint": false,
|
|
3666
|
+
"primary": false,
|
|
3667
|
+
"unique": false
|
|
3668
|
+
},
|
|
3669
|
+
{
|
|
3670
|
+
"keyName": "sales_returns_scope_idx",
|
|
3671
|
+
"columnNames": [
|
|
3672
|
+
"order_id",
|
|
3673
|
+
"organization_id",
|
|
3674
|
+
"tenant_id"
|
|
3675
|
+
],
|
|
3676
|
+
"composite": true,
|
|
3677
|
+
"constraint": false,
|
|
3678
|
+
"primary": false,
|
|
3679
|
+
"unique": false
|
|
3680
|
+
},
|
|
3681
|
+
{
|
|
3682
|
+
"keyName": "sales_returns_number_unique",
|
|
3683
|
+
"columnNames": [
|
|
3684
|
+
"organization_id",
|
|
3685
|
+
"tenant_id",
|
|
3686
|
+
"return_number"
|
|
3687
|
+
],
|
|
3688
|
+
"composite": true,
|
|
3689
|
+
"constraint": true,
|
|
3690
|
+
"primary": false,
|
|
3691
|
+
"unique": true
|
|
3692
|
+
},
|
|
3693
|
+
{
|
|
3694
|
+
"keyName": "sales_returns_pkey",
|
|
3695
|
+
"columnNames": [
|
|
3696
|
+
"id"
|
|
3697
|
+
],
|
|
3698
|
+
"composite": false,
|
|
3699
|
+
"constraint": true,
|
|
3700
|
+
"primary": true,
|
|
3701
|
+
"unique": true
|
|
3702
|
+
}
|
|
3703
|
+
],
|
|
3704
|
+
"checks": [],
|
|
3705
|
+
"foreignKeys": {
|
|
3706
|
+
"sales_returns_order_id_foreign": {
|
|
3707
|
+
"constraintName": "sales_returns_order_id_foreign",
|
|
3708
|
+
"columnNames": [
|
|
3709
|
+
"order_id"
|
|
3710
|
+
],
|
|
3711
|
+
"localTableName": "public.sales_returns",
|
|
3712
|
+
"referencedColumnNames": [
|
|
3713
|
+
"id"
|
|
3714
|
+
],
|
|
3715
|
+
"referencedTableName": "public.sales_orders",
|
|
3716
|
+
"updateRule": "cascade"
|
|
3717
|
+
}
|
|
3718
|
+
},
|
|
3719
|
+
"nativeEnums": {}
|
|
3720
|
+
},
|
|
3529
3721
|
{
|
|
3530
3722
|
"columns": {
|
|
3531
3723
|
"id": {
|
|
@@ -4388,6 +4580,212 @@
|
|
|
4388
4580
|
},
|
|
4389
4581
|
"nativeEnums": {}
|
|
4390
4582
|
},
|
|
4583
|
+
{
|
|
4584
|
+
"columns": {
|
|
4585
|
+
"id": {
|
|
4586
|
+
"name": "id",
|
|
4587
|
+
"type": "uuid",
|
|
4588
|
+
"unsigned": false,
|
|
4589
|
+
"autoincrement": false,
|
|
4590
|
+
"primary": false,
|
|
4591
|
+
"nullable": false,
|
|
4592
|
+
"default": "gen_random_uuid()",
|
|
4593
|
+
"mappedType": "uuid"
|
|
4594
|
+
},
|
|
4595
|
+
"return_id": {
|
|
4596
|
+
"name": "return_id",
|
|
4597
|
+
"type": "uuid",
|
|
4598
|
+
"unsigned": false,
|
|
4599
|
+
"autoincrement": false,
|
|
4600
|
+
"primary": false,
|
|
4601
|
+
"nullable": false,
|
|
4602
|
+
"mappedType": "uuid"
|
|
4603
|
+
},
|
|
4604
|
+
"order_line_id": {
|
|
4605
|
+
"name": "order_line_id",
|
|
4606
|
+
"type": "uuid",
|
|
4607
|
+
"unsigned": false,
|
|
4608
|
+
"autoincrement": false,
|
|
4609
|
+
"primary": false,
|
|
4610
|
+
"nullable": false,
|
|
4611
|
+
"mappedType": "uuid"
|
|
4612
|
+
},
|
|
4613
|
+
"organization_id": {
|
|
4614
|
+
"name": "organization_id",
|
|
4615
|
+
"type": "uuid",
|
|
4616
|
+
"unsigned": false,
|
|
4617
|
+
"autoincrement": false,
|
|
4618
|
+
"primary": false,
|
|
4619
|
+
"nullable": false,
|
|
4620
|
+
"mappedType": "uuid"
|
|
4621
|
+
},
|
|
4622
|
+
"tenant_id": {
|
|
4623
|
+
"name": "tenant_id",
|
|
4624
|
+
"type": "uuid",
|
|
4625
|
+
"unsigned": false,
|
|
4626
|
+
"autoincrement": false,
|
|
4627
|
+
"primary": false,
|
|
4628
|
+
"nullable": false,
|
|
4629
|
+
"mappedType": "uuid"
|
|
4630
|
+
},
|
|
4631
|
+
"quantity_returned": {
|
|
4632
|
+
"name": "quantity_returned",
|
|
4633
|
+
"type": "numeric(18,4)",
|
|
4634
|
+
"unsigned": false,
|
|
4635
|
+
"autoincrement": false,
|
|
4636
|
+
"primary": false,
|
|
4637
|
+
"nullable": false,
|
|
4638
|
+
"precision": 18,
|
|
4639
|
+
"scale": 4,
|
|
4640
|
+
"default": "'0'",
|
|
4641
|
+
"mappedType": "decimal"
|
|
4642
|
+
},
|
|
4643
|
+
"unit_price_net": {
|
|
4644
|
+
"name": "unit_price_net",
|
|
4645
|
+
"type": "numeric(18,4)",
|
|
4646
|
+
"unsigned": false,
|
|
4647
|
+
"autoincrement": false,
|
|
4648
|
+
"primary": false,
|
|
4649
|
+
"nullable": false,
|
|
4650
|
+
"precision": 18,
|
|
4651
|
+
"scale": 4,
|
|
4652
|
+
"default": "'0'",
|
|
4653
|
+
"mappedType": "decimal"
|
|
4654
|
+
},
|
|
4655
|
+
"unit_price_gross": {
|
|
4656
|
+
"name": "unit_price_gross",
|
|
4657
|
+
"type": "numeric(18,4)",
|
|
4658
|
+
"unsigned": false,
|
|
4659
|
+
"autoincrement": false,
|
|
4660
|
+
"primary": false,
|
|
4661
|
+
"nullable": false,
|
|
4662
|
+
"precision": 18,
|
|
4663
|
+
"scale": 4,
|
|
4664
|
+
"default": "'0'",
|
|
4665
|
+
"mappedType": "decimal"
|
|
4666
|
+
},
|
|
4667
|
+
"total_net_amount": {
|
|
4668
|
+
"name": "total_net_amount",
|
|
4669
|
+
"type": "numeric(18,4)",
|
|
4670
|
+
"unsigned": false,
|
|
4671
|
+
"autoincrement": false,
|
|
4672
|
+
"primary": false,
|
|
4673
|
+
"nullable": false,
|
|
4674
|
+
"precision": 18,
|
|
4675
|
+
"scale": 4,
|
|
4676
|
+
"default": "'0'",
|
|
4677
|
+
"mappedType": "decimal"
|
|
4678
|
+
},
|
|
4679
|
+
"total_gross_amount": {
|
|
4680
|
+
"name": "total_gross_amount",
|
|
4681
|
+
"type": "numeric(18,4)",
|
|
4682
|
+
"unsigned": false,
|
|
4683
|
+
"autoincrement": false,
|
|
4684
|
+
"primary": false,
|
|
4685
|
+
"nullable": false,
|
|
4686
|
+
"precision": 18,
|
|
4687
|
+
"scale": 4,
|
|
4688
|
+
"default": "'0'",
|
|
4689
|
+
"mappedType": "decimal"
|
|
4690
|
+
},
|
|
4691
|
+
"created_at": {
|
|
4692
|
+
"name": "created_at",
|
|
4693
|
+
"type": "timestamptz",
|
|
4694
|
+
"unsigned": false,
|
|
4695
|
+
"autoincrement": false,
|
|
4696
|
+
"primary": false,
|
|
4697
|
+
"nullable": false,
|
|
4698
|
+
"length": 6,
|
|
4699
|
+
"mappedType": "datetime"
|
|
4700
|
+
},
|
|
4701
|
+
"updated_at": {
|
|
4702
|
+
"name": "updated_at",
|
|
4703
|
+
"type": "timestamptz",
|
|
4704
|
+
"unsigned": false,
|
|
4705
|
+
"autoincrement": false,
|
|
4706
|
+
"primary": false,
|
|
4707
|
+
"nullable": false,
|
|
4708
|
+
"length": 6,
|
|
4709
|
+
"mappedType": "datetime"
|
|
4710
|
+
},
|
|
4711
|
+
"deleted_at": {
|
|
4712
|
+
"name": "deleted_at",
|
|
4713
|
+
"type": "timestamptz",
|
|
4714
|
+
"unsigned": false,
|
|
4715
|
+
"autoincrement": false,
|
|
4716
|
+
"primary": false,
|
|
4717
|
+
"nullable": true,
|
|
4718
|
+
"length": 6,
|
|
4719
|
+
"mappedType": "datetime"
|
|
4720
|
+
}
|
|
4721
|
+
},
|
|
4722
|
+
"name": "sales_return_lines",
|
|
4723
|
+
"schema": "public",
|
|
4724
|
+
"indexes": [
|
|
4725
|
+
{
|
|
4726
|
+
"keyName": "sales_return_lines_order_line_idx",
|
|
4727
|
+
"columnNames": [
|
|
4728
|
+
"order_line_id",
|
|
4729
|
+
"organization_id",
|
|
4730
|
+
"tenant_id"
|
|
4731
|
+
],
|
|
4732
|
+
"composite": true,
|
|
4733
|
+
"constraint": false,
|
|
4734
|
+
"primary": false,
|
|
4735
|
+
"unique": false
|
|
4736
|
+
},
|
|
4737
|
+
{
|
|
4738
|
+
"keyName": "sales_return_lines_return_idx",
|
|
4739
|
+
"columnNames": [
|
|
4740
|
+
"return_id",
|
|
4741
|
+
"organization_id",
|
|
4742
|
+
"tenant_id"
|
|
4743
|
+
],
|
|
4744
|
+
"composite": true,
|
|
4745
|
+
"constraint": false,
|
|
4746
|
+
"primary": false,
|
|
4747
|
+
"unique": false
|
|
4748
|
+
},
|
|
4749
|
+
{
|
|
4750
|
+
"keyName": "sales_return_lines_pkey",
|
|
4751
|
+
"columnNames": [
|
|
4752
|
+
"id"
|
|
4753
|
+
],
|
|
4754
|
+
"composite": false,
|
|
4755
|
+
"constraint": true,
|
|
4756
|
+
"primary": true,
|
|
4757
|
+
"unique": true
|
|
4758
|
+
}
|
|
4759
|
+
],
|
|
4760
|
+
"checks": [],
|
|
4761
|
+
"foreignKeys": {
|
|
4762
|
+
"sales_return_lines_return_id_foreign": {
|
|
4763
|
+
"constraintName": "sales_return_lines_return_id_foreign",
|
|
4764
|
+
"columnNames": [
|
|
4765
|
+
"return_id"
|
|
4766
|
+
],
|
|
4767
|
+
"localTableName": "public.sales_return_lines",
|
|
4768
|
+
"referencedColumnNames": [
|
|
4769
|
+
"id"
|
|
4770
|
+
],
|
|
4771
|
+
"referencedTableName": "public.sales_returns",
|
|
4772
|
+
"updateRule": "cascade"
|
|
4773
|
+
},
|
|
4774
|
+
"sales_return_lines_order_line_id_foreign": {
|
|
4775
|
+
"constraintName": "sales_return_lines_order_line_id_foreign",
|
|
4776
|
+
"columnNames": [
|
|
4777
|
+
"order_line_id"
|
|
4778
|
+
],
|
|
4779
|
+
"localTableName": "public.sales_return_lines",
|
|
4780
|
+
"referencedColumnNames": [
|
|
4781
|
+
"id"
|
|
4782
|
+
],
|
|
4783
|
+
"referencedTableName": "public.sales_order_lines",
|
|
4784
|
+
"updateRule": "cascade"
|
|
4785
|
+
}
|
|
4786
|
+
},
|
|
4787
|
+
"nativeEnums": {}
|
|
4788
|
+
},
|
|
4391
4789
|
{
|
|
4392
4790
|
"columns": {
|
|
4393
4791
|
"id": {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
export class Migration20260309073310 extends Migration {
|
|
4
|
+
|
|
5
|
+
override async up(): Promise<void> {
|
|
6
|
+
this.addSql(`create table "sales_returns" ("id" uuid not null default gen_random_uuid(), "order_id" uuid not null, "organization_id" uuid not null, "tenant_id" uuid not null, "return_number" text not null, "status_entry_id" uuid null, "status" text null, "reason" text null, "notes" text null, "returned_at" timestamptz null, "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, constraint "sales_returns_pkey" primary key ("id"));`);
|
|
7
|
+
this.addSql(`create index "sales_returns_status_idx" on "sales_returns" ("organization_id", "tenant_id", "status");`);
|
|
8
|
+
this.addSql(`create index "sales_returns_scope_idx" on "sales_returns" ("order_id", "organization_id", "tenant_id");`);
|
|
9
|
+
this.addSql(`alter table "sales_returns" add constraint "sales_returns_number_unique" unique ("organization_id", "tenant_id", "return_number");`);
|
|
10
|
+
|
|
11
|
+
this.addSql(`create table "sales_return_lines" ("id" uuid not null default gen_random_uuid(), "return_id" uuid not null, "order_line_id" uuid not null, "organization_id" uuid not null, "tenant_id" uuid not null, "quantity_returned" numeric(18,4) not null default '0', "unit_price_net" numeric(18,4) not null default '0', "unit_price_gross" numeric(18,4) not null default '0', "total_net_amount" numeric(18,4) not null default '0', "total_gross_amount" numeric(18,4) not null default '0', "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, constraint "sales_return_lines_pkey" primary key ("id"));`);
|
|
12
|
+
this.addSql(`create index "sales_return_lines_order_line_idx" on "sales_return_lines" ("order_line_id", "organization_id", "tenant_id");`);
|
|
13
|
+
this.addSql(`create index "sales_return_lines_return_idx" on "sales_return_lines" ("return_id", "organization_id", "tenant_id");`);
|
|
14
|
+
|
|
15
|
+
this.addSql(`alter table "sales_returns" add constraint "sales_returns_order_id_foreign" foreign key ("order_id") references "sales_orders" ("id") on update cascade;`);
|
|
16
|
+
|
|
17
|
+
this.addSql(`alter table "sales_return_lines" add constraint "sales_return_lines_return_id_foreign" foreign key ("return_id") references "sales_returns" ("id") on update cascade;`);
|
|
18
|
+
this.addSql(`alter table "sales_return_lines" add constraint "sales_return_lines_order_line_id_foreign" foreign key ("order_line_id") references "sales_order_lines" ("id") on update cascade;`);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override async down(): Promise<void> {
|
|
22
|
+
this.addSql(`drop table if exists "sales_return_lines" cascade;`);
|
|
23
|
+
this.addSql(`drop table if exists "sales_returns" cascade;`);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
}
|
|
@@ -4,6 +4,7 @@ import { SalesDocumentSequence, SalesSettings } from '../data/entities'
|
|
|
4
4
|
import {
|
|
5
5
|
DEFAULT_ORDER_NUMBER_FORMAT,
|
|
6
6
|
DEFAULT_QUOTE_NUMBER_FORMAT,
|
|
7
|
+
DEFAULT_RETURN_NUMBER_FORMAT,
|
|
7
8
|
type SalesDocumentNumberKind,
|
|
8
9
|
} from '../lib/documentNumberTokens'
|
|
9
10
|
|
|
@@ -25,6 +26,7 @@ type SettingsSnapshot = {
|
|
|
25
26
|
type SequenceSnapshot = {
|
|
26
27
|
order: number
|
|
27
28
|
quote: number
|
|
29
|
+
return: number
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
const MAX_SEQUENCE = 1_000_000_000
|
|
@@ -68,11 +70,12 @@ export class SalesDocumentNumberGenerator {
|
|
|
68
70
|
}
|
|
69
71
|
|
|
70
72
|
async peekSequences(scope: Scope): Promise<SequenceSnapshot> {
|
|
71
|
-
const [order, quote] = await Promise.all([
|
|
73
|
+
const [order, quote, salesReturn] = await Promise.all([
|
|
72
74
|
this.peekNextSequence('order', scope),
|
|
73
75
|
this.peekNextSequence('quote', scope),
|
|
76
|
+
this.peekNextSequence('return', scope),
|
|
74
77
|
])
|
|
75
|
-
return { order, quote }
|
|
78
|
+
return { order, quote, return: salesReturn }
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
async setNextSequence(kind: SalesDocumentNumberKind, scope: Scope, nextValue: number): Promise<void> {
|
|
@@ -93,7 +96,11 @@ export class SalesDocumentNumberGenerator {
|
|
|
93
96
|
const settings = await this.getSettings(params)
|
|
94
97
|
const format =
|
|
95
98
|
params.format?.trim() ||
|
|
96
|
-
(params.kind === 'order'
|
|
99
|
+
(params.kind === 'order'
|
|
100
|
+
? settings.orderNumberFormat
|
|
101
|
+
: params.kind === 'quote'
|
|
102
|
+
? settings.quoteNumberFormat
|
|
103
|
+
: DEFAULT_RETURN_NUMBER_FORMAT)
|
|
97
104
|
const sequence = await this.claimSequence(params.kind, params)
|
|
98
105
|
const number = this.formatNumber(format, {
|
|
99
106
|
kind: params.kind,
|
|
@@ -138,7 +145,11 @@ export class SalesDocumentNumberGenerator {
|
|
|
138
145
|
): string {
|
|
139
146
|
const source =
|
|
140
147
|
template?.trim() ||
|
|
141
|
-
(context.kind === 'order'
|
|
148
|
+
(context.kind === 'order'
|
|
149
|
+
? DEFAULT_ORDER_NUMBER_FORMAT
|
|
150
|
+
: context.kind === 'quote'
|
|
151
|
+
? DEFAULT_QUOTE_NUMBER_FORMAT
|
|
152
|
+
: DEFAULT_RETURN_NUMBER_FORMAT)
|
|
142
153
|
const now = context.date
|
|
143
154
|
return source.replace(/\{([a-zA-Z]+)(?::([^}]+))?\}/g, (match, rawToken, rawArg) => {
|
|
144
155
|
const token = rawToken.toLowerCase()
|
|
@@ -258,24 +258,33 @@ export const DocumentHistoryWidget: React.FC<InjectionWidgetComponentProps<unkno
|
|
|
258
258
|
const [filter, setFilter] = React.useState<FilterKind>('all')
|
|
259
259
|
|
|
260
260
|
React.useEffect(() => {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
261
|
+
const urls = [
|
|
262
|
+
'/api/sales/order-statuses?pageSize=100',
|
|
263
|
+
'/api/sales/shipment-statuses?pageSize=100',
|
|
264
|
+
'/api/sales/payment-statuses?pageSize=100',
|
|
265
|
+
]
|
|
266
|
+
const map: Record<string, StatusOption> = {}
|
|
267
|
+
const merge = (items: unknown[]) => {
|
|
268
|
+
if (!Array.isArray(items)) return
|
|
269
|
+
for (const item of items) {
|
|
270
|
+
if (!item || typeof item !== 'object') continue
|
|
271
|
+
const d = item as Record<string, unknown>
|
|
272
|
+
const value = typeof d.value === 'string' ? d.value : null
|
|
273
|
+
if (!value) continue
|
|
274
|
+
map[value] = {
|
|
275
|
+
value,
|
|
276
|
+
label: typeof d.label === 'string' && d.label.length ? d.label : value,
|
|
277
|
+
color: typeof d.color === 'string' && d.color.length ? d.color : null,
|
|
278
|
+
icon: typeof d.icon === 'string' && d.icon.length ? d.icon : null,
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
Promise.all(urls.map((url) => apiCall<{ items?: unknown[] }>(url)))
|
|
283
|
+
.then((responses) => {
|
|
284
|
+
for (const res of responses) {
|
|
285
|
+
if (res.ok && Array.isArray(res.result?.items)) merge(res.result.items)
|
|
278
286
|
}
|
|
287
|
+
setStatusMap(map)
|
|
279
288
|
})
|
|
280
289
|
.catch(() => {})
|
|
281
290
|
}, [])
|