ApiLogicServer 15.2.3__py3-none-any.whl → 15.2.10__py3-none-any.whl

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.
Files changed (36) hide show
  1. api_logic_server_cli/api_logic_server.py +3 -1
  2. api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +114 -52
  3. api_logic_server_cli/prototypes/base/docs/training/testing.md +95 -9
  4. api_logic_server_cli/prototypes/base/test/api_logic_server_behave/behave_logic_report.py +19 -6
  5. api_logic_server_cli/prototypes/basic_demo/.github/.copilot-instructions.md +744 -0
  6. api_logic_server_cli/prototypes/basic_demo/customizations/logic/declare_logic.py +17 -1
  7. api_logic_server_cli/prototypes/basic_demo/readme.md +13 -5
  8. api_logic_server_cli/prototypes/basic_demo/tutor.md +1436 -0
  9. api_logic_server_cli/prototypes/manager/.github/.copilot-instructions.md +50 -23
  10. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/.github/.copilot-instructions.md +3 -0
  11. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/customizations/logic/declare_logic.py +17 -1
  12. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/testing.md +95 -9
  13. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/iteration/logic/declare_logic.py +17 -1
  14. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/declare_logic.py +38 -1
  15. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/features/order_processing.feature +59 -50
  16. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/features/steps/order_processing_steps.py +395 -248
  17. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/behave.log +66 -62
  18. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Carbon_Neutral_Discount_A.log +51 -41
  19. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Change_Order_Customer.log +29 -0
  20. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Change_Product_in_Item.log +35 -0
  21. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Delete_Item_Reduces_Order.log +39 -19
  22. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Exceed_Credit_Limit_Rejec.log +36 -45
  23. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Good_Order_Placed_via_B2B.log +50 -40
  24. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Item_Quantity_Change.log +33 -0
  25. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Multi-Item_Order_via_B2B_.log +67 -0
  26. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Ship_Order_Excludes_from_.log +24 -14
  27. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Transaction_Processing.log +26 -17
  28. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Unship_Order_Includes_in_.log +24 -14
  29. api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/reports/Behave Logic Report.md +361 -146
  30. api_logic_server_cli/prototypes/manager/system/ApiLogicServer-Internal-Dev/copilot-dev-context.md +270 -2
  31. {apilogicserver-15.2.3.dist-info → apilogicserver-15.2.10.dist-info}/METADATA +25 -16
  32. {apilogicserver-15.2.3.dist-info → apilogicserver-15.2.10.dist-info}/RECORD +36 -30
  33. {apilogicserver-15.2.3.dist-info → apilogicserver-15.2.10.dist-info}/WHEEL +0 -0
  34. {apilogicserver-15.2.3.dist-info → apilogicserver-15.2.10.dist-info}/entry_points.txt +0 -0
  35. {apilogicserver-15.2.3.dist-info → apilogicserver-15.2.10.dist-info}/licenses/LICENSE +0 -0
  36. {apilogicserver-15.2.3.dist-info → apilogicserver-15.2.10.dist-info}/top_level.txt +0 -0
@@ -1,79 +1,83 @@
1
1
  Feature: About Sample # features/about.feature:6
2
2
 
3
3
  Scenario: Transaction Processing # features/about.feature:8
4
- Given Sample Database # features/steps/about_steps.py:3
5
- When Transactions are submitted # features/steps/about_steps.py:8
6
- Then Enforce business policies with Logic (rules + code) # features/steps/about_steps.py:13
4
+ Given Sample Database # features/steps/about.py:8
5
+ When Transactions are submitted # features/steps/about.py:12
6
+ Then Enforce business policies with Logic (rules + code) # features/steps/about.py:16
7
7
 
8
8
  Feature: Order Processing with Business Logic # features/order_processing.feature:1
9
9
 
10
- Scenario: Good Order Placed via B2B API # features/order_processing.feature:6
11
- Given Customer "Alice" with balance 0 and credit limit 1000 # features/steps/order_processing_steps.py:22
12
- When B2B order placed for "Alice" with 5 Widget # features/steps/order_processing_steps.py:255
13
- Then Customer balance should be 450 # features/steps/order_processing_steps.py:451
14
- And Order amount_total should be 450 # features/steps/order_processing_steps.py:483
15
- And Order created successfully # features/steps/order_processing_steps.py:536
10
+ Scenario: Good Order Placed via B2B API # features/order_processing.feature:11
11
+ Given Customer "Alice" with balance 0 and credit limit 5000 # features/steps/order_processing_steps.py:26
12
+ When B2B order placed for "Alice" with 5 Widget # features/steps/order_processing_steps.py:356
13
+ Then Customer balance should be 450 # features/steps/order_processing_steps.py:567
14
+ And Order amount_total should be 450 # features/steps/order_processing_steps.py:586
15
+ And Item amount should be 450 # features/steps/order_processing_steps.py:599
16
+ And Item unit_price should be 90 # features/steps/order_processing_steps.py:612
16
17
 
17
- Scenario: Item Quantity Update Recalculates Amounts # features/order_processing.feature:13
18
- Given Customer "Bob" with balance 0 and credit limit 2000 # features/steps/order_processing_steps.py:22
19
- And Order exists for "Bob" with 5 Widget # features/steps/order_processing_steps.py:116
20
- When Item quantity changed to 10 # features/steps/order_processing_steps.py:308
21
- Then Item amount should be 900 # features/steps/order_processing_steps.py:502
22
- And Order amount_total should be 900 # features/steps/order_processing_steps.py:483
23
- And Customer balance should be 900 # features/steps/order_processing_steps.py:451
18
+ Scenario: Multi-Item Order via B2B API # features/order_processing.feature:19
19
+ Given Customer "Bob" with balance 0 and credit limit 3000 # features/steps/order_processing_steps.py:26
20
+ When B2B order placed for "Bob" with 3 Widget and 2 Gadget # features/steps/order_processing_steps.py:297
21
+ Then Customer balance should be 570 # features/steps/order_processing_steps.py:567
22
+ And Order amount_total should be 570 # features/steps/order_processing_steps.py:586
24
23
 
25
- Scenario: Change Order Customer Adjusts Both Balances # features/order_processing.feature:21
26
- Given Customer "Charlie" with balance 0 and credit limit 1500 # features/steps/order_processing_steps.py:22
27
- And Customer "Diana" with balance 0 and credit limit 2000 # features/steps/order_processing_steps.py:22
28
- And Order exists for "Charlie" with 2 Gadget # features/steps/order_processing_steps.py:116
29
- When Order customer changed to "Diana" # features/steps/order_processing_steps.py:331
30
- Then Customer "Charlie" balance should be 0 # features/steps/order_processing_steps.py:466
31
- And Customer "Diana" balance should be 300 # features/steps/order_processing_steps.py:466
24
+ Scenario: Carbon Neutral Discount Applied # features/order_processing.feature:25
25
+ Given Customer "Diana" with balance 0 and credit limit 5000 # features/steps/order_processing_steps.py:26
26
+ When B2B order placed for "Diana" with 10 carbon neutral Gadget # features/steps/order_processing_steps.py:242
27
+ Then Customer balance should be 1350 # features/steps/order_processing_steps.py:567
28
+ And Item amount should be 1350 # features/steps/order_processing_steps.py:599
32
29
 
33
- Scenario: Delete Item Reduces Order Total and Customer Balance # features/order_processing.feature:29
34
- Given Customer "TestCustomer" with balance 0 and credit limit 3000 # features/steps/order_processing_steps.py:22
35
- And Order exists for "TestCustomer" with 3 Widget and 2 Gadget # features/steps/order_processing_steps.py:61
36
- When First item deleted # features/steps/order_processing_steps.py:356
37
- Then Order amount_total should be 300 # features/steps/order_processing_steps.py:483
38
- And Customer balance should be 300 # features/steps/order_processing_steps.py:451
30
+ Scenario: Item Quantity Change # features/order_processing.feature:31
31
+ Given Customer "Charlie" with balance 0 and credit limit 2000 # features/steps/order_processing_steps.py:26
32
+ And Order is created for "Charlie" with 5 Widget # features/steps/order_processing_steps.py:139
33
+ When Item quantity changed to 10 # features/steps/order_processing_steps.py:414
34
+ Then Item amount should be 900 # features/steps/order_processing_steps.py:599
35
+ And Order amount_total should be 900 # features/steps/order_processing_steps.py:586
36
+ And Customer balance should be 900 # features/steps/order_processing_steps.py:567
39
37
 
40
- Scenario: Ship Order Excludes from Balance (WHERE exclude) # features/order_processing.feature:36
41
- Given Customer "ShipTest" with balance 0 and credit limit 5000 # features/steps/order_processing_steps.py:22
42
- And Order exists for "ShipTest" with 10 Widget # features/steps/order_processing_steps.py:116
43
- When Order is shipped # features/steps/order_processing_steps.py:369
44
- Then Customer balance should be 0 # features/steps/order_processing_steps.py:451
38
+ Scenario: Change Product in Item # features/order_processing.feature:39
39
+ Given Customer "Alice" with balance 0 and credit limit 5000 # features/steps/order_processing_steps.py:26
40
+ And Order is created for "Alice" with 5 Widget # features/steps/order_processing_steps.py:139
41
+ When Item product changed to "Gadget" # features/steps/order_processing_steps.py:439
42
+ Then Item unit_price should be 150 # features/steps/order_processing_steps.py:612
43
+ And Item amount should be 750 # features/steps/order_processing_steps.py:599
44
+ And Order amount_total should be 750 # features/steps/order_processing_steps.py:586
45
+ And Customer balance should be 750 # features/steps/order_processing_steps.py:567
45
46
 
46
- Scenario: Unship Order Includes in Balance (WHERE include) # features/order_processing.feature:42
47
- Given Customer "UnshipTest" with balance 0 and credit limit 5000 # features/steps/order_processing_steps.py:22
48
- And Shipped order exists for "UnshipTest" with 5 Gadget # features/steps/order_processing_steps.py:173
49
- When Order is unshipped # features/steps/order_processing_steps.py:393
50
- Then Customer balance should be 750 # features/steps/order_processing_steps.py:451
47
+ Scenario: Delete Item Reduces Order # features/order_processing.feature:48
48
+ Given Customer "Bob" with balance 0 and credit limit 3000 # features/steps/order_processing_steps.py:26
49
+ And Order is created for "Bob" with 3 Widget and 2 Gadget # features/steps/order_processing_steps.py:70
50
+ When First item is deleted # features/steps/order_processing_steps.py:466
51
+ Then Order amount_total should be 300 # features/steps/order_processing_steps.py:586
52
+ And Customer balance should be 300 # features/steps/order_processing_steps.py:567
51
53
 
52
- Scenario: Exceed Credit Limit Rejected (Constraint FAIL) # features/order_processing.feature:48
53
- Given Customer "LimitTest" with balance 0 and credit limit 500 # features/steps/order_processing_steps.py:22
54
- When B2B order placed for "LimitTest" with 10 Gadget # features/steps/order_processing_steps.py:255
55
- Then Order creation should fail # features/steps/order_processing_steps.py:543
56
- And Error message should contain "credit limit" # features/steps/order_processing_steps.py:549
54
+ Scenario: Change Order Customer # features/order_processing.feature:55
55
+ Given Customer "Alice" with balance 0 and credit limit 5000 # features/steps/order_processing_steps.py:26
56
+ And Customer "Bob" with balance 0 and credit limit 3000 # features/steps/order_processing_steps.py:26
57
+ And Order is created for "Alice" with 5 Widget # features/steps/order_processing_steps.py:139
58
+ When Order customer changed to "Bob" # features/steps/order_processing_steps.py:484
59
+ Then Customer "Alice" balance should be 0 # features/steps/order_processing_steps.py:576
60
+ And Customer "Bob" balance should be 450 # features/steps/order_processing_steps.py:576
57
61
 
58
- Scenario: Carbon Neutral Discount Applied (Custom Logic) # features/order_processing.feature:54
59
- Given Customer "GreenBuyer" with balance 0 and credit limit 2000 # features/steps/order_processing_steps.py:22
60
- When B2B order placed for "GreenBuyer" with 10 carbon neutral Gadget # features/steps/order_processing_steps.py:202
61
- Then Item amount should be 1350 # features/steps/order_processing_steps.py:502
62
- And Order amount_total should be 1350 # features/steps/order_processing_steps.py:483
63
- And Customer balance should be 1350 # features/steps/order_processing_steps.py:451
62
+ Scenario: Ship Order Excludes from Balance # features/order_processing.feature:63
63
+ Given Customer "Charlie" with balance 0 and credit limit 2000 # features/steps/order_processing_steps.py:26
64
+ And Order is created for "Charlie" with 2 Widget # features/steps/order_processing_steps.py:139
65
+ When Order is shipped # features/steps/order_processing_steps.py:513
66
+ Then Customer balance should be 0 # features/steps/order_processing_steps.py:567
67
+ And Order amount_total should be 180 # features/steps/order_processing_steps.py:586
64
68
 
65
- Scenario: Product Unit Price Copied to Item # features/order_processing.feature:61
66
- Given Customer "PriceCopy" with balance 0 and credit limit 3000 # features/steps/order_processing_steps.py:22
67
- When B2B order placed for "PriceCopy" with 1 Green # features/steps/order_processing_steps.py:255
68
- Then Item unit_price should be 109 # features/steps/order_processing_steps.py:521
69
+ Scenario: Unship Order Includes in Balance # features/order_processing.feature:70
70
+ Given Customer "Diana" with balance 0 and credit limit 5000 # features/steps/order_processing_steps.py:26
71
+ And Shipped order is created for "Diana" with 3 Gadget # features/steps/order_processing_steps.py:188
72
+ When Order is unshipped # features/steps/order_processing_steps.py:538
73
+ Then Customer balance should be 450 # features/steps/order_processing_steps.py:567
74
+ And Order amount_total should be 450 # features/steps/order_processing_steps.py:586
69
75
 
70
- Scenario: Change Product Updates Unit Price (FK Change) # features/order_processing.feature:66
71
- Given Customer "ProductChange" with balance 0 and credit limit 5000 # features/steps/order_processing_steps.py:22
72
- And Order exists for "ProductChange" with 2 Widget # features/steps/order_processing_steps.py:116
73
- When Item product changed to "Gadget" # features/steps/order_processing_steps.py:416
74
- Then Item unit_price should be 150 # features/steps/order_processing_steps.py:521
75
- And Item amount should be 300 # features/steps/order_processing_steps.py:502
76
- And Order amount_total should be 300 # features/steps/order_processing_steps.py:483
76
+ Scenario: Exceed Credit Limit Rejected # features/order_processing.feature:77
77
+ Given Customer "Silent" with balance 0 and credit limit 1000 # features/steps/order_processing_steps.py:26
78
+ When B2B order placed for "Silent" with 20 Widget # features/steps/order_processing_steps.py:356
79
+ Then Order should be rejected # features/steps/order_processing_steps.py:628
80
+ And Error message should contain "exceeds credit limit" # features/steps/order_processing_steps.py:634
77
81
 
78
82
    
79
- /Users/val/dev/ApiLogicServer/ApiLogicServer-dev/build_and_test/ApiLogicServer/basic_demo_2/test/api_logic_server_behave/behave_run.py completed at October 20, 2025 11:28:01
83
+ /Users/val/dev/ApiLogicServer/ApiLogicServer-dev/build_and_test/ApiLogicServer/basic_demo/test/api_logic_server_behave/behave_run.py completed at October 24, 2025 08:44:44
@@ -1,42 +1,52 @@
1
1
 
2
- Carbon Neutral Discount Applied (Custom Logic)
3
- - 2025-10-20 11:28:01,834 - logic_logger - INFO
4
-
5
- Logic Phase: ROW LOGIC (session=0x10a00fac0) (sqlalchemy before_flush) - 2025-10-20 11:28:01,836 - logic_logger - INFO
6
- ..Customer[172] {Update - client} id: 172, name: GreenBuyer 1760984881829, balance: 0E-10, credit_limit: 2000.0000000000, email: None, email_opt_out: None row: 0x10a191a50 session: 0x10a00fac0 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,836 - logic_logger - INFO
7
- Logic Phase: COMMIT LOGIC (session=0x10a00fac0) - 2025-10-20 11:28:01,836 - logic_logger - INFO
8
- Logic Phase: AFTER_FLUSH LOGIC (session=0x10a00fac0) - 2025-10-20 11:28:01,836 - logic_logger - INFO
9
-
10
- These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-20 11:28:01,836 - logic_logger - INFO
11
-
12
- Logic Phase: COMPLETE(session=0x10a00fac0)) - 2025-10-20 11:28:01,836 - logic_logger - INFO
13
- Logic Phase: ROW LOGIC IGNORE RE-RAISE(session=0x10a00fac0) (sqlalchemy before_flush) - 2025-10-20 11:28:01,836 - logic_logger - DEBUG
14
-
15
- Logic Phase: ROW LOGIC (session=0x10a00fac0) (sqlalchemy before_flush) - 2025-10-20 11:28:01,836 - logic_logger - INFO
16
- ..Product[1] {Update - client} id: 1, name: Gadget, unit_price: 150.0000000000, carbon_neutral: True row: 0x10a26d5c0 session: 0x10a00fac0 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,836 - logic_logger - INFO
17
- ..Item[None] {Insert - client} id: None, order_id: None, product_id: None, quantity: 10, amount: None, unit_price: None row: 0x109fffd50 session: 0x10a00fac0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,836 - logic_logger - INFO
18
- ..Item[None] {copy_rules for role: product - unit_price} id: None, order_id: None, product_id: None, quantity: 10, amount: None, unit_price: 150.0000000000 row: 0x109fffd50 session: 0x10a00fac0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,837 - logic_logger - INFO
19
- ..Item[None] {Formula amount} id: None, order_id: None, product_id: None, quantity: 10, amount: 1350.000000000000033306690739, unit_price: 150.0000000000 row: 0x109fffd50 session: 0x10a00fac0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,837 - logic_logger - INFO
20
- ....Order[None] {server aggregate_defaults: amount_total } id: None, notes: Carbon neutral order, customer_id: 172, CreatedOn: None, date_shipped: None, amount_total: [None-->] 0 row: 0x10a263250 session: 0x10a00fac0 ins_upd_dlt: *, initial: * - 2025-10-20 11:28:01,837 - logic_logger - INFO
21
- ..Item[None] {TODO DB adjust_from_inserted/adopted_child adjusts Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None)} id: None, order_id: None, product_id: None, quantity: 10, amount: 1350.000000000000033306690739, unit_price: 150.0000000000 row: 0x109fffd50 session: 0x10a00fac0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,837 - logic_logger - INFO
22
- ....Order[None] {Adjustment logic chaining deferred for this parent parent do_defer_adjustment: True, is_parent_submitted: True, is_parent_row_processed: False, order} id: None, notes: Carbon neutral order, customer_id: 172, CreatedOn: None, date_shipped: None, amount_total: [None-->] 1350.000000000000033306690739 row: 0x10a263250 session: 0x10a00fac0 ins_upd_dlt: *, initial: * - 2025-10-20 11:28:01,837 - logic_logger - INFO
23
- ..Order[None] {Insert - client} id: None, notes: Carbon neutral order, customer_id: 172, CreatedOn: None, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a263250 session: 0x10a00fac0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,837 - logic_logger - INFO
24
- ..Order[None] {early_row_event_all_classes - handle_all did stamping} id: None, notes: Carbon neutral order, customer_id: 172, CreatedOn: 2025-10-20 11:28:01.837469, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a263250 session: 0x10a00fac0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,837 - logic_logger - INFO
25
- ..Order[None] {TODO DB adjust_from_inserted/adopted_child adjusts Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x108fed080>)} id: None, notes: Carbon neutral order, customer_id: 172, CreatedOn: 2025-10-20 11:28:01.837469, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a263250 session: 0x10a00fac0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,837 - logic_logger - INFO
26
- ....Customer[172] {Update - Adjusting customer: balance} id: 172, name: GreenBuyer 1760984881829, balance: [0E-10-->] 1350.000000000000033306690739, credit_limit: 2000.0000000000, email: None, email_opt_out: None row: 0x10a191a50 session: 0x10a00fac0 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,837 - logic_logger - INFO
27
- Logic Phase: COMMIT LOGIC (session=0x10a00fac0) - 2025-10-20 11:28:01,837 - logic_logger - INFO
28
- Logic Phase: AFTER_FLUSH LOGIC (session=0x10a00fac0) - 2025-10-20 11:28:01,838 - logic_logger - INFO
29
- ..Order[137] {AfterFlush Event} id: 137, notes: Carbon neutral order, customer_id: 172, CreatedOn: 2025-10-20 11:28:01.837469, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a263250 session: 0x10a00fac0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,838 - logic_logger - INFO
30
- ..Order[137] {Sending Order to Shipping [Note: **Kafka not enabled** ]} id: 137, notes: Carbon neutral order, customer_id: 172, CreatedOn: 2025-10-20 11:28:01.837469, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a263250 session: 0x10a00fac0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,838 - logic_logger - INFO
31
-
32
- These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-20 11:28:01,838 - logic_logger - INFO
33
- Customer ## - 2025-10-20 11:28:01,838 - logic_logger - INFO
34
- 1. Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x108fed080>) ## - 2025-10-20 11:28:01,838 - logic_logger - INFO
35
- Item ## - 2025-10-20 11:28:01,838 - logic_logger - INFO
36
- 2. Derive <class 'database.models.Item'>.amount as Formula (1): <function> ## - 2025-10-20 11:28:01,838 - logic_logger - INFO
37
- 3. Derive <class 'database.models.Item'>.unit_price as Copy(product.unit_price) ## - 2025-10-20 11:28:01,838 - logic_logger - INFO
38
- Order ## - 2025-10-20 11:28:01,838 - logic_logger - INFO
39
- 4. Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None) ## - 2025-10-20 11:28:01,838 - logic_logger - INFO
40
- 5. RowEvent Order.send_order_to_shipping() ## - 2025-10-20 11:28:01,838 - logic_logger - INFO
41
-
42
- Logic Phase: COMPLETE(session=0x10a00fac0)) - 2025-10-20 11:28:01,838 - logic_logger - INFO
2
+ Carbon Neutral Discount Applied
3
+ - 2025-10-24 08:44:43,859 - logic_logger - INFO
4
+
5
+ Logic Phase: ROW LOGIC (session=0x10a377240) (sqlalchemy before_flush) - 2025-10-24 08:44:43,861 - logic_logger - INFO
6
+ ..Customer[30] {Update - client} id: 30, name: Diana 1761320683854, balance: 0E-10, credit_limit: 5000.0000000000, email: None, email_opt_out: None row: 0x10a44ba50 session: 0x10a377240 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,861 - logic_logger - INFO
7
+ Logic Phase: COMMIT LOGIC (session=0x10a377240) - 2025-10-24 08:44:43,861 - logic_logger - INFO
8
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a377240) - 2025-10-24 08:44:43,861 - logic_logger - INFO
9
+
10
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,861 - logic_logger - INFO
11
+
12
+ Logic Phase: COMPLETE(session=0x10a377240)) - 2025-10-24 08:44:43,861 - logic_logger - INFO
13
+ Logic Phase: ROW LOGIC IGNORE RE-RAISE(session=0x10a377240) (sqlalchemy before_flush) - 2025-10-24 08:44:43,861 - logic_logger - DEBUG
14
+
15
+ Logic Phase: ROW LOGIC (session=0x10a377240) (sqlalchemy before_flush) - 2025-10-24 08:44:43,861 - logic_logger - INFO
16
+ ..Product[1] {Update - client} id: 1, name: Gadget, unit_price: 150.0000000000, carbon_neutral: True row: 0x10a452820 session: 0x10a377240 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,862 - logic_logger - INFO
17
+ ..Item[None] {Insert - client} id: None, order_id: None, product_id: None, quantity: 10, amount: None, unit_price: None row: 0x10a48c050 session: 0x10a377240 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,862 - logic_logger - INFO
18
+ ..Item[None] {copy_rules for role: product - unit_price} id: None, order_id: None, product_id: None, quantity: 10, amount: None, unit_price: 150.0000000000 row: 0x10a48c050 session: 0x10a377240 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,862 - logic_logger - INFO
19
+ ..Item[None] {Formula amount} id: None, order_id: None, product_id: None, quantity: 10, amount: 1350.000000000000033306690739, unit_price: 150.0000000000 row: 0x10a48c050 session: 0x10a377240 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,862 - logic_logger - INFO
20
+ ....Order[None] {server aggregate_defaults: amount_total } id: None, notes: Carbon neutral order - Carbon Neutral Discount Applied, customer_id: 30, CreatedOn: None, date_shipped: None, amount_total: [None-->] 0 row: 0x10a3cbe50 session: 0x10a377240 ins_upd_dlt: *, initial: * - 2025-10-24 08:44:43,862 - logic_logger - INFO
21
+ ..Item[None] {TODO DB adjust_from_inserted/adopted_child adjusts Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None)} id: None, order_id: None, product_id: None, quantity: 10, amount: 1350.000000000000033306690739, unit_price: 150.0000000000 row: 0x10a48c050 session: 0x10a377240 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,862 - logic_logger - INFO
22
+ ....Order[None] {Adjustment logic chaining deferred for this parent parent do_defer_adjustment: True, is_parent_submitted: True, is_parent_row_processed: False, order} id: None, notes: Carbon neutral order - Carbon Neutral Discount Applied, customer_id: 30, CreatedOn: None, date_shipped: None, amount_total: [None-->] 1350.000000000000033306690739 row: 0x10a3cbe50 session: 0x10a377240 ins_upd_dlt: *, initial: * - 2025-10-24 08:44:43,862 - logic_logger - INFO
23
+ ..Order[None] {Insert - client} id: None, notes: Carbon neutral order - Carbon Neutral Discount Applied, customer_id: 30, CreatedOn: None, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a3cbe50 session: 0x10a377240 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,862 - logic_logger - INFO
24
+ ..Order[None] {early_row_event_all_classes - handle_all did stamping} id: None, notes: Carbon neutral order - Carbon Neutral Discount Applied, customer_id: 30, CreatedOn: 2025-10-24 08:44:43.862584, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a3cbe50 session: 0x10a377240 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,862 - logic_logger - INFO
25
+ ..Order[None] {TODO DB adjust_from_inserted/adopted_child adjusts Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x109355260>)} id: None, notes: Carbon neutral order - Carbon Neutral Discount Applied, customer_id: 30, CreatedOn: 2025-10-24 08:44:43.862584, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a3cbe50 session: 0x10a377240 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,862 - logic_logger - INFO
26
+ ....Customer[30] {Update - Adjusting customer: balance} id: 30, name: Diana 1761320683854, balance: [0E-10-->] 1350.000000000000033306690739, credit_limit: 5000.0000000000, email: None, email_opt_out: None row: 0x10a44ba50 session: 0x10a377240 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,862 - logic_logger - INFO
27
+ Logic Phase: COMMIT LOGIC (session=0x10a377240) - 2025-10-24 08:44:43,862 - logic_logger - INFO
28
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a377240) - 2025-10-24 08:44:43,863 - logic_logger - INFO
29
+ ..Order[26] {AfterFlush Event} id: 26, notes: Carbon neutral order - Carbon Neutral Discount Applied, customer_id: 30, CreatedOn: 2025-10-24 08:44:43.862584, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a3cbe50 session: 0x10a377240 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,863 - logic_logger - INFO
30
+ ..Order[26] {Sending Order to Shipping [Note: **Kafka not enabled** ]} id: 26, notes: Carbon neutral order - Carbon Neutral Discount Applied, customer_id: 30, CreatedOn: 2025-10-24 08:44:43.862584, date_shipped: None, amount_total: 1350.000000000000033306690739 row: 0x10a3cbe50 session: 0x10a377240 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,863 - logic_logger - INFO
31
+
32
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,863 - logic_logger - INFO
33
+ Customer ## - 2025-10-24 08:44:43,863 - logic_logger - INFO
34
+ 1. Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x109355260>) ## - 2025-10-24 08:44:43,863 - logic_logger - INFO
35
+ Item ## - 2025-10-24 08:44:43,863 - logic_logger - INFO
36
+ 2. Derive <class 'database.models.Item'>.unit_price as Copy(product.unit_price) ## - 2025-10-24 08:44:43,863 - logic_logger - INFO
37
+ 3. Derive <class 'database.models.Item'>.amount as Formula (1): <function> ## - 2025-10-24 08:44:43,863 - logic_logger - INFO
38
+ Order ## - 2025-10-24 08:44:43,863 - logic_logger - INFO
39
+ 4. Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None) ## - 2025-10-24 08:44:43,863 - logic_logger - INFO
40
+ 5. RowEvent Order.send_order_to_shipping() ## - 2025-10-24 08:44:43,863 - logic_logger - INFO
41
+
42
+ Logic Phase: COMPLETE(session=0x10a377240)) - 2025-10-24 08:44:43,863 - logic_logger - INFO
43
+
44
+ Logic Phase: ROW LOGIC (session=0x10a377ce0) (sqlalchemy before_flush) - 2025-10-24 08:44:43,873 - logic_logger - INFO
45
+ ..Customer[None] {Insert - client} id: None, name: Charlie 1761320683872, balance: 0, credit_limit: 2000, email: None, email_opt_out: None row: 0x10a48c250 session: 0x10a377ce0 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,873 - logic_logger - INFO
46
+ ..Customer[None] {server aggregate_defaults: balance } id: None, name: Charlie 1761320683872, balance: 0, credit_limit: 2000, email: None, email_opt_out: None row: 0x10a48c250 session: 0x10a377ce0 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,873 - logic_logger - INFO
47
+ Logic Phase: COMMIT LOGIC (session=0x10a377ce0) - 2025-10-24 08:44:43,874 - logic_logger - INFO
48
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a377ce0) - 2025-10-24 08:44:43,874 - logic_logger - INFO
49
+
50
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,874 - logic_logger - INFO
51
+
52
+ Logic Phase: COMPLETE(session=0x10a377ce0)) - 2025-10-24 08:44:43,874 - logic_logger - INFO
@@ -0,0 +1,29 @@
1
+
2
+ Change Order Customer
3
+ - 2025-10-24 08:44:43,976 - logic_logger - INFO
4
+
5
+ Logic Phase: ROW LOGIC (session=0x10a376f10) (sqlalchemy before_flush) - 2025-10-24 08:44:43,978 - logic_logger - INFO
6
+ ..Order[30] {Update - client} id: 30, notes: Test order - Change Order Customer, customer_id: [34-->] 35, CreatedOn: 2025-10-24, date_shipped: None, amount_total: 450.0000000000 row: 0x10a4490d0 session: 0x10a376f10 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,978 - logic_logger - INFO
7
+ ....Customer[35] {Update - Adjusting customer: balance, balance} id: 35, name: Bob 1761320683960, balance: [0E-10-->] 450.0000000000, credit_limit: 3000.0000000000, email: None, email_opt_out: None row: 0x10a44a7d0 session: 0x10a376f10 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,978 - logic_logger - INFO
8
+ ....Customer[34] {Update - Adjusting Old customer} id: 34, name: Alice 1761320683958, balance: [450.0000000000-->] 0E-10, credit_limit: 5000.0000000000, email: None, email_opt_out: None row: 0x10a44bad0 session: 0x10a376f10 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,979 - logic_logger - INFO
9
+ Logic Phase: COMMIT LOGIC (session=0x10a376f10) - 2025-10-24 08:44:43,979 - logic_logger - INFO
10
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a376f10) - 2025-10-24 08:44:43,979 - logic_logger - INFO
11
+ ..Order[30] {AfterFlush Event} id: 30, notes: Test order - Change Order Customer, customer_id: [34-->] 35, CreatedOn: 2025-10-24, date_shipped: None, amount_total: 450.0000000000 row: 0x10a4490d0 session: 0x10a376f10 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,979 - logic_logger - INFO
12
+
13
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,979 - logic_logger - INFO
14
+ Customer ## - 2025-10-24 08:44:43,979 - logic_logger - INFO
15
+ 1. Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x109355260>) ## - 2025-10-24 08:44:43,979 - logic_logger - INFO
16
+ Order ## - 2025-10-24 08:44:43,979 - logic_logger - INFO
17
+ 2. RowEvent Order.send_order_to_shipping() ## - 2025-10-24 08:44:43,979 - logic_logger - INFO
18
+
19
+ Logic Phase: COMPLETE(session=0x10a376f10)) - 2025-10-24 08:44:43,979 - logic_logger - INFO
20
+
21
+ Logic Phase: ROW LOGIC (session=0x10a375590) (sqlalchemy before_flush) - 2025-10-24 08:44:43,985 - logic_logger - INFO
22
+ ..Customer[None] {Insert - client} id: None, name: Charlie 1761320683984, balance: 0, credit_limit: 2000, email: None, email_opt_out: None row: 0x10a48cf50 session: 0x10a375590 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,985 - logic_logger - INFO
23
+ ..Customer[None] {server aggregate_defaults: balance } id: None, name: Charlie 1761320683984, balance: 0, credit_limit: 2000, email: None, email_opt_out: None row: 0x10a48cf50 session: 0x10a375590 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,985 - logic_logger - INFO
24
+ Logic Phase: COMMIT LOGIC (session=0x10a375590) - 2025-10-24 08:44:43,985 - logic_logger - INFO
25
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a375590) - 2025-10-24 08:44:43,985 - logic_logger - INFO
26
+
27
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,985 - logic_logger - INFO
28
+
29
+ Logic Phase: COMPLETE(session=0x10a375590)) - 2025-10-24 08:44:43,985 - logic_logger - INFO
@@ -0,0 +1,35 @@
1
+
2
+ Change Product in Item
3
+ - 2025-10-24 08:44:43,917 - logic_logger - INFO
4
+
5
+ Logic Phase: ROW LOGIC (session=0x10a376140) (sqlalchemy before_flush) - 2025-10-24 08:44:43,920 - logic_logger - INFO
6
+ ..Item[33] {Update - client} id: 33, order_id: 28, product_id: [2-->] 1, quantity: 5, amount: 450.0000000000, unit_price: 90.0000000000 row: 0x10a44a4d0 session: 0x10a376140 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,921 - logic_logger - INFO
7
+ ..Item[33] {copy_rules for role: product - unit_price} id: 33, order_id: 28, product_id: [2-->] 1, quantity: 5, amount: 450.0000000000, unit_price: [90.0000000000-->] 150.0000000000 row: 0x10a44a4d0 session: 0x10a376140 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,921 - logic_logger - INFO
8
+ ..Item[33] {Formula amount} id: 33, order_id: 28, product_id: [2-->] 1, quantity: 5, amount: [450.0000000000-->] 750.0000000000, unit_price: [90.0000000000-->] 150.0000000000 row: 0x10a44a4d0 session: 0x10a376140 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,921 - logic_logger - INFO
9
+ ....Order[28] {Update - Adjusting order: amount_total} id: 28, notes: Test order - Change Product in Item, customer_id: 32, CreatedOn: 2025-10-24, date_shipped: None, amount_total: [450.0000000000-->] 750.0000000000 row: 0x10a44bb50 session: 0x10a376140 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,921 - logic_logger - INFO
10
+ ......Customer[32] {Update - Adjusting customer: balance} id: 32, name: Alice 1761320683899, balance: [450.0000000000-->] 750.0000000000, credit_limit: 5000.0000000000, email: None, email_opt_out: None row: 0x10a44be50 session: 0x10a376140 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,921 - logic_logger - INFO
11
+ Logic Phase: COMMIT LOGIC (session=0x10a376140) - 2025-10-24 08:44:43,922 - logic_logger - INFO
12
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a376140) - 2025-10-24 08:44:43,922 - logic_logger - INFO
13
+ ....Order[28] {AfterFlush Event} id: 28, notes: Test order - Change Product in Item, customer_id: 32, CreatedOn: 2025-10-24, date_shipped: None, amount_total: [450.0000000000-->] 750.0000000000 row: 0x10a44bb50 session: 0x10a376140 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,922 - logic_logger - INFO
14
+
15
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,922 - logic_logger - INFO
16
+ Customer ## - 2025-10-24 08:44:43,922 - logic_logger - INFO
17
+ 1. Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x109355260>) ## - 2025-10-24 08:44:43,922 - logic_logger - INFO
18
+ Item ## - 2025-10-24 08:44:43,922 - logic_logger - INFO
19
+ 2. Derive <class 'database.models.Item'>.unit_price as Copy(product.unit_price) ## - 2025-10-24 08:44:43,922 - logic_logger - INFO
20
+ 3. Derive <class 'database.models.Item'>.amount as Formula (1): <function> ## - 2025-10-24 08:44:43,922 - logic_logger - INFO
21
+ Order ## - 2025-10-24 08:44:43,922 - logic_logger - INFO
22
+ 4. Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None) ## - 2025-10-24 08:44:43,922 - logic_logger - INFO
23
+ 5. RowEvent Order.send_order_to_shipping() ## - 2025-10-24 08:44:43,922 - logic_logger - INFO
24
+
25
+ Logic Phase: COMPLETE(session=0x10a376140)) - 2025-10-24 08:44:43,922 - logic_logger - INFO
26
+
27
+ Logic Phase: ROW LOGIC (session=0x10a377680) (sqlalchemy before_flush) - 2025-10-24 08:44:43,931 - logic_logger - INFO
28
+ ..Customer[None] {Insert - client} id: None, name: Bob 1761320683930, balance: 0, credit_limit: 3000, email: None, email_opt_out: None row: 0x10a48ce50 session: 0x10a377680 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,931 - logic_logger - INFO
29
+ ..Customer[None] {server aggregate_defaults: balance } id: None, name: Bob 1761320683930, balance: 0, credit_limit: 3000, email: None, email_opt_out: None row: 0x10a48ce50 session: 0x10a377680 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,931 - logic_logger - INFO
30
+ Logic Phase: COMMIT LOGIC (session=0x10a377680) - 2025-10-24 08:44:43,931 - logic_logger - INFO
31
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a377680) - 2025-10-24 08:44:43,931 - logic_logger - INFO
32
+
33
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,931 - logic_logger - INFO
34
+
35
+ Logic Phase: COMPLETE(session=0x10a377680)) - 2025-10-24 08:44:43,931 - logic_logger - INFO
@@ -1,20 +1,40 @@
1
1
 
2
- Delete Item Reduces Order Total and Customer Balance
3
- - 2025-10-20 11:28:01,758 - logic_logger - INFO
4
-
5
- Logic Phase: ROW LOGIC (session=0x10a00ff00) (sqlalchemy before_flush) - 2025-10-20 11:28:01,759 - logic_logger - INFO
6
- ..Item[150] {Delete - client} id: 150, order_id: 134, product_id: 2, quantity: 3, amount: 270.0000000000, unit_price: 90.0000000000 row: 0x10a262450 session: 0x10a00ff00 ins_upd_dlt: dlt, initial: dlt - 2025-10-20 11:28:01,760 - logic_logger - INFO
7
- ....Order[134] {Update - Adjusting order: amount_total} id: 134, notes: Multi-item test order, customer_id: 168, CreatedOn: 2025-10-20, date_shipped: None, amount_total: [570.0000000000-->] 300.0000000000 row: 0x10a2639d0 session: 0x10a00ff00 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,760 - logic_logger - INFO
8
- ......Customer[168] {Update - Adjusting customer: balance} id: 168, name: TestCustomer 1760984881739, balance: [570.0000000000-->] 300.0000000000, credit_limit: 3000.0000000000, email: None, email_opt_out: None row: 0x10a261e50 session: 0x10a00ff00 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,760 - logic_logger - INFO
9
- Logic Phase: COMMIT LOGIC (session=0x10a00ff00) - 2025-10-20 11:28:01,760 - logic_logger - INFO
10
- Logic Phase: AFTER_FLUSH LOGIC (session=0x10a00ff00) - 2025-10-20 11:28:01,761 - logic_logger - INFO
11
- ....Order[134] {AfterFlush Event} id: 134, notes: Multi-item test order, customer_id: 168, CreatedOn: 2025-10-20, date_shipped: None, amount_total: [570.0000000000-->] 300.0000000000 row: 0x10a2639d0 session: 0x10a00ff00 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,761 - logic_logger - INFO
12
-
13
- These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-20 11:28:01,761 - logic_logger - INFO
14
- Customer ## - 2025-10-20 11:28:01,761 - logic_logger - INFO
15
- 1. Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x108fed080>) ## - 2025-10-20 11:28:01,761 - logic_logger - INFO
16
- Order ## - 2025-10-20 11:28:01,761 - logic_logger - INFO
17
- 2. RowEvent Order.send_order_to_shipping() ## - 2025-10-20 11:28:01,761 - logic_logger - INFO
18
- 3. Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None) ## - 2025-10-20 11:28:01,761 - logic_logger - INFO
19
-
20
- Logic Phase: COMPLETE(session=0x10a00ff00)) - 2025-10-20 11:28:01,761 - logic_logger - INFO
2
+ Delete Item Reduces Order
3
+ - 2025-10-24 08:44:43,951 - logic_logger - INFO
4
+
5
+ Logic Phase: ROW LOGIC (session=0x10a377df0) (sqlalchemy before_flush) - 2025-10-24 08:44:43,952 - logic_logger - INFO
6
+ ..Item[34] {Delete - client} id: 34, order_id: 29, product_id: 2, quantity: 3, amount: 270.0000000000, unit_price: 90.0000000000 row: 0x10a448650 session: 0x10a377df0 ins_upd_dlt: dlt, initial: dlt - 2025-10-24 08:44:43,952 - logic_logger - INFO
7
+ ....Order[29] {Update - Adjusting order: amount_total} id: 29, notes: Test order - Delete Item Reduces Order, customer_id: 33, CreatedOn: 2025-10-24, date_shipped: None, amount_total: [570.0000000000-->] 300.0000000000 row: 0x10a44b3d0 session: 0x10a377df0 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,952 - logic_logger - INFO
8
+ ......Customer[33] {Update - Adjusting customer: balance} id: 33, name: Bob 1761320683930, balance: [570.0000000000-->] 300.0000000000, credit_limit: 3000.0000000000, email: None, email_opt_out: None row: 0x10a3cbcd0 session: 0x10a377df0 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,953 - logic_logger - INFO
9
+ Logic Phase: COMMIT LOGIC (session=0x10a377df0) - 2025-10-24 08:44:43,953 - logic_logger - INFO
10
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a377df0) - 2025-10-24 08:44:43,953 - logic_logger - INFO
11
+ ....Order[29] {AfterFlush Event} id: 29, notes: Test order - Delete Item Reduces Order, customer_id: 33, CreatedOn: 2025-10-24, date_shipped: None, amount_total: [570.0000000000-->] 300.0000000000 row: 0x10a44b3d0 session: 0x10a377df0 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:43,953 - logic_logger - INFO
12
+
13
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,953 - logic_logger - INFO
14
+ Customer ## - 2025-10-24 08:44:43,953 - logic_logger - INFO
15
+ 1. Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x109355260>) ## - 2025-10-24 08:44:43,954 - logic_logger - INFO
16
+ Order ## - 2025-10-24 08:44:43,954 - logic_logger - INFO
17
+ 2. RowEvent Order.send_order_to_shipping() ## - 2025-10-24 08:44:43,954 - logic_logger - INFO
18
+ 3. Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None) ## - 2025-10-24 08:44:43,954 - logic_logger - INFO
19
+
20
+ Logic Phase: COMPLETE(session=0x10a377df0)) - 2025-10-24 08:44:43,954 - logic_logger - INFO
21
+
22
+ Logic Phase: ROW LOGIC (session=0x10a376f10) (sqlalchemy before_flush) - 2025-10-24 08:44:43,958 - logic_logger - INFO
23
+ ..Customer[None] {Insert - client} id: None, name: Alice 1761320683958, balance: 0, credit_limit: 5000, email: None, email_opt_out: None row: 0x10a48cd50 session: 0x10a376f10 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,959 - logic_logger - INFO
24
+ ..Customer[None] {server aggregate_defaults: balance } id: None, name: Alice 1761320683958, balance: 0, credit_limit: 5000, email: None, email_opt_out: None row: 0x10a48cd50 session: 0x10a376f10 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,959 - logic_logger - INFO
25
+ Logic Phase: COMMIT LOGIC (session=0x10a376f10) - 2025-10-24 08:44:43,959 - logic_logger - INFO
26
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a376f10) - 2025-10-24 08:44:43,959 - logic_logger - INFO
27
+
28
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,959 - logic_logger - INFO
29
+
30
+ Logic Phase: COMPLETE(session=0x10a376f10)) - 2025-10-24 08:44:43,959 - logic_logger - INFO
31
+
32
+ Logic Phase: ROW LOGIC (session=0x10a374e20) (sqlalchemy before_flush) - 2025-10-24 08:44:43,961 - logic_logger - INFO
33
+ ..Customer[None] {Insert - client} id: None, name: Bob 1761320683960, balance: 0, credit_limit: 3000, email: None, email_opt_out: None row: 0x10a449350 session: 0x10a374e20 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,961 - logic_logger - INFO
34
+ ..Customer[None] {server aggregate_defaults: balance } id: None, name: Bob 1761320683960, balance: 0, credit_limit: 3000, email: None, email_opt_out: None row: 0x10a449350 session: 0x10a374e20 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:43,961 - logic_logger - INFO
35
+ Logic Phase: COMMIT LOGIC (session=0x10a374e20) - 2025-10-24 08:44:43,962 - logic_logger - INFO
36
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a374e20) - 2025-10-24 08:44:43,962 - logic_logger - INFO
37
+
38
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:43,962 - logic_logger - INFO
39
+
40
+ Logic Phase: COMPLETE(session=0x10a374e20)) - 2025-10-24 08:44:43,962 - logic_logger - INFO
@@ -1,46 +1,37 @@
1
1
 
2
- Exceed Credit Limit Rejected (Constraint FAIL)
3
- - 2025-10-20 11:28:01,824 - logic_logger - INFO
4
-
5
- Logic Phase: ROW LOGIC (session=0x10a00fdf0) (sqlalchemy before_flush) - 2025-10-20 11:28:01,825 - logic_logger - INFO
6
- ..Customer[171] {Update - client} id: 171, name: LimitTest 1760984881819, balance: 0E-10, credit_limit: 500.0000000000, email: None, email_opt_out: None row: 0x10a262a50 session: 0x10a00fdf0 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,825 - logic_logger - INFO
7
- Logic Phase: COMMIT LOGIC (session=0x10a00fdf0) - 2025-10-20 11:28:01,826 - logic_logger - INFO
8
- Logic Phase: AFTER_FLUSH LOGIC (session=0x10a00fdf0) - 2025-10-20 11:28:01,826 - logic_logger - INFO
9
-
10
- These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-20 11:28:01,826 - logic_logger - INFO
11
-
12
- Logic Phase: COMPLETE(session=0x10a00fdf0)) - 2025-10-20 11:28:01,826 - logic_logger - INFO
13
- Logic Phase: ROW LOGIC IGNORE RE-RAISE(session=0x10a00fdf0) (sqlalchemy before_flush) - 2025-10-20 11:28:01,826 - logic_logger - DEBUG
14
-
15
- Logic Phase: ROW LOGIC (session=0x10a00fdf0) (sqlalchemy before_flush) - 2025-10-20 11:28:01,826 - logic_logger - INFO
16
- ..Product[1] {Update - client} id: 1, name: Gadget, unit_price: 150.0000000000, carbon_neutral: True row: 0x10a0617f0 session: 0x10a00fdf0 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,826 - logic_logger - INFO
17
- ..Order[None] {Insert - client} id: None, notes: Test order, customer_id: 171, CreatedOn: None, date_shipped: None, amount_total: None row: 0x10a066950 session: 0x10a00fdf0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,826 - logic_logger - INFO
18
- ..Order[None] {early_row_event_all_classes - handle_all did stamping} id: None, notes: Test order, customer_id: 171, CreatedOn: 2025-10-20 11:28:01.826737, date_shipped: None, amount_total: None row: 0x10a066950 session: 0x10a00fdf0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,826 - logic_logger - INFO
19
- ..Order[None] {server aggregate_defaults: amount_total } id: None, notes: Test order, customer_id: 171, CreatedOn: 2025-10-20 11:28:01.826737, date_shipped: None, amount_total: 0 row: 0x10a066950 session: 0x10a00fdf0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,826 - logic_logger - INFO
20
- ..Item[None] {Insert - client} id: None, order_id: None, product_id: None, quantity: 10, amount: None, unit_price: None row: 0x10a0d99d0 session: 0x10a00fdf0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,826 - logic_logger - INFO
21
- ..Item[None] {copy_rules for role: product - unit_price} id: None, order_id: None, product_id: None, quantity: 10, amount: None, unit_price: 150.0000000000 row: 0x10a0d99d0 session: 0x10a00fdf0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,827 - logic_logger - INFO
22
- ..Item[None] {Formula amount} id: None, order_id: None, product_id: None, quantity: 10, amount: 1350.000000000000033306690739, unit_price: 150.0000000000 row: 0x10a0d99d0 session: 0x10a00fdf0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,827 - logic_logger - INFO
23
- ..Item[None] {TODO DB adjust_from_inserted/adopted_child adjusts Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None)} id: None, order_id: None, product_id: None, quantity: 10, amount: 1350.000000000000033306690739, unit_price: 150.0000000000 row: 0x10a0d99d0 session: 0x10a00fdf0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,827 - logic_logger - INFO
24
- ....Order[None] {Update - Adjusting order: amount_total} id: None, notes: Test order, customer_id: 171, CreatedOn: 2025-10-20 11:28:01.826737, date_shipped: None, amount_total: [0-->] 1350.000000000000033306690739 row: 0x10a066950 session: 0x10a00fdf0 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,827 - logic_logger - INFO
25
- ......Customer[171] {Update - Adjusting customer: balance} id: 171, name: LimitTest 1760984881819, balance: [0E-10-->] 1350.000000000000033306690739, credit_limit: 500.0000000000, email: None, email_opt_out: None row: 0x10a262a50 session: 0x10a00fdf0 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,827 - logic_logger - INFO
26
- ......Customer[171] {Constraint Failure: Customer balance (1350.000000000000033306690739) exceeds credit limit (500.0000000000)} id: 171, name: LimitTest 1760984881819, balance: [0E-10-->] 1350.000000000000033306690739, credit_limit: 500.0000000000, email: None, email_opt_out: None row: 0x10a262a50 session: 0x10a00fdf0 ins_upd_dlt: upd, initial: upd - 2025-10-20 11:28:01,827 - logic_logger - INFO
27
-
28
- These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-20 11:28:01,827 - logic_logger - INFO
29
- Customer ## - 2025-10-20 11:28:01,827 - logic_logger - INFO
30
- 1. Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x108fed080>) ## - 2025-10-20 11:28:01,827 - logic_logger - INFO
31
- 2. Constraint Function: None ## - 2025-10-20 11:28:01,827 - logic_logger - INFO
32
- Item ## - 2025-10-20 11:28:01,827 - logic_logger - INFO
33
- 3. Derive <class 'database.models.Item'>.amount as Formula (1): <function> ## - 2025-10-20 11:28:01,827 - logic_logger - INFO
34
- 4. Derive <class 'database.models.Item'>.unit_price as Copy(product.unit_price) ## - 2025-10-20 11:28:01,827 - logic_logger - INFO
35
- Order ## - 2025-10-20 11:28:01,827 - logic_logger - INFO
36
- 5. Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None) ## - 2025-10-20 11:28:01,827 - logic_logger - INFO
37
-
38
- Logic Phase: ROW LOGIC (session=0x10a00d6a0) (sqlalchemy before_flush) - 2025-10-20 11:28:01,830 - logic_logger - INFO
39
- ..Customer[None] {Insert - client} id: None, name: GreenBuyer 1760984881829, balance: 0, credit_limit: 2000, email: None, email_opt_out: None row: 0x10a2622d0 session: 0x10a00d6a0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,831 - logic_logger - INFO
40
- ..Customer[None] {server aggregate_defaults: balance } id: None, name: GreenBuyer 1760984881829, balance: 0, credit_limit: 2000, email: None, email_opt_out: None row: 0x10a2622d0 session: 0x10a00d6a0 ins_upd_dlt: ins, initial: ins - 2025-10-20 11:28:01,831 - logic_logger - INFO
41
- Logic Phase: COMMIT LOGIC (session=0x10a00d6a0) - 2025-10-20 11:28:01,831 - logic_logger - INFO
42
- Logic Phase: AFTER_FLUSH LOGIC (session=0x10a00d6a0) - 2025-10-20 11:28:01,831 - logic_logger - INFO
43
-
44
- These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-20 11:28:01,831 - logic_logger - INFO
45
-
46
- Logic Phase: COMPLETE(session=0x10a00d6a0)) - 2025-10-20 11:28:01,831 - logic_logger - INFO
2
+ Exceed Credit Limit Rejected
3
+ - 2025-10-24 08:44:44,036 - logic_logger - INFO
4
+
5
+ Logic Phase: ROW LOGIC (session=0x10a377130) (sqlalchemy before_flush) - 2025-10-24 08:44:44,038 - logic_logger - INFO
6
+ ..Customer[38] {Update - client} id: 38, name: Silent 1761320684031, balance: 0E-10, credit_limit: 1000.0000000000, email: None, email_opt_out: None row: 0x10a48c950 session: 0x10a377130 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:44,038 - logic_logger - INFO
7
+ Logic Phase: COMMIT LOGIC (session=0x10a377130) - 2025-10-24 08:44:44,038 - logic_logger - INFO
8
+ Logic Phase: AFTER_FLUSH LOGIC (session=0x10a377130) - 2025-10-24 08:44:44,038 - logic_logger - INFO
9
+
10
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:44,038 - logic_logger - INFO
11
+
12
+ Logic Phase: COMPLETE(session=0x10a377130)) - 2025-10-24 08:44:44,038 - logic_logger - INFO
13
+ Logic Phase: ROW LOGIC IGNORE RE-RAISE(session=0x10a377130) (sqlalchemy before_flush) - 2025-10-24 08:44:44,038 - logic_logger - DEBUG
14
+
15
+ Logic Phase: ROW LOGIC (session=0x10a377130) (sqlalchemy before_flush) - 2025-10-24 08:44:44,038 - logic_logger - INFO
16
+ ..Product[2] {Update - client} id: 2, name: Widget, unit_price: 90.0000000000, carbon_neutral: None row: 0x10a451400 session: 0x10a377130 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:44,038 - logic_logger - INFO
17
+ ..Item[None] {Insert - client} id: None, order_id: None, product_id: None, quantity: 20, amount: None, unit_price: None row: 0x10a3cbcd0 session: 0x10a377130 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:44,039 - logic_logger - INFO
18
+ ..Item[None] {copy_rules for role: product - unit_price} id: None, order_id: None, product_id: None, quantity: 20, amount: None, unit_price: 90.0000000000 row: 0x10a3cbcd0 session: 0x10a377130 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:44,039 - logic_logger - INFO
19
+ ..Item[None] {Formula amount} id: None, order_id: None, product_id: None, quantity: 20, amount: 1800.0000000000, unit_price: 90.0000000000 row: 0x10a3cbcd0 session: 0x10a377130 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:44,039 - logic_logger - INFO
20
+ ....Order[None] {server aggregate_defaults: amount_total } id: None, notes: Test order - Exceed Credit Limit Rejected, customer_id: 38, CreatedOn: None, date_shipped: None, amount_total: [None-->] 0 row: 0x10a3cb1d0 session: 0x10a377130 ins_upd_dlt: *, initial: * - 2025-10-24 08:44:44,039 - logic_logger - INFO
21
+ ..Item[None] {TODO DB adjust_from_inserted/adopted_child adjusts Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None)} id: None, order_id: None, product_id: None, quantity: 20, amount: 1800.0000000000, unit_price: 90.0000000000 row: 0x10a3cbcd0 session: 0x10a377130 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:44,039 - logic_logger - INFO
22
+ ....Order[None] {Adjustment logic chaining deferred for this parent parent do_defer_adjustment: True, is_parent_submitted: True, is_parent_row_processed: False, order} id: None, notes: Test order - Exceed Credit Limit Rejected, customer_id: 38, CreatedOn: None, date_shipped: None, amount_total: [None-->] 1800.0000000000 row: 0x10a3cb1d0 session: 0x10a377130 ins_upd_dlt: *, initial: * - 2025-10-24 08:44:44,039 - logic_logger - INFO
23
+ ..Order[None] {Insert - client} id: None, notes: Test order - Exceed Credit Limit Rejected, customer_id: 38, CreatedOn: None, date_shipped: None, amount_total: 1800.0000000000 row: 0x10a3cb1d0 session: 0x10a377130 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:44,039 - logic_logger - INFO
24
+ ..Order[None] {early_row_event_all_classes - handle_all did stamping} id: None, notes: Test order - Exceed Credit Limit Rejected, customer_id: 38, CreatedOn: 2025-10-24 08:44:44.039537, date_shipped: None, amount_total: 1800.0000000000 row: 0x10a3cb1d0 session: 0x10a377130 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:44,039 - logic_logger - INFO
25
+ ..Order[None] {TODO DB adjust_from_inserted/adopted_child adjusts Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x109355260>)} id: None, notes: Test order - Exceed Credit Limit Rejected, customer_id: 38, CreatedOn: 2025-10-24 08:44:44.039537, date_shipped: None, amount_total: 1800.0000000000 row: 0x10a3cb1d0 session: 0x10a377130 ins_upd_dlt: ins, initial: ins - 2025-10-24 08:44:44,039 - logic_logger - INFO
26
+ ....Customer[38] {Update - Adjusting customer: balance} id: 38, name: Silent 1761320684031, balance: [0E-10-->] 1800.0000000000, credit_limit: 1000.0000000000, email: None, email_opt_out: None row: 0x10a48c950 session: 0x10a377130 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:44,039 - logic_logger - INFO
27
+ ....Customer[38] {Constraint Failure: Customer balance (1800.0000000000) exceeds credit limit (1000.0000000000)} id: 38, name: Silent 1761320684031, balance: [0E-10-->] 1800.0000000000, credit_limit: 1000.0000000000, email: None, email_opt_out: None row: 0x10a48c950 session: 0x10a377130 ins_upd_dlt: upd, initial: upd - 2025-10-24 08:44:44,040 - logic_logger - INFO
28
+
29
+ These Rules Fired (see Logic Phases, above, for actual order): ## - 2025-10-24 08:44:44,040 - logic_logger - INFO
30
+ Customer ## - 2025-10-24 08:44:44,040 - logic_logger - INFO
31
+ 1. Derive <class 'database.models.Customer'>.balance as Sum(Order.amount_total Where Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None) - <function declare_logic.<locals>.<lambda> at 0x109355260>) ## - 2025-10-24 08:44:44,040 - logic_logger - INFO
32
+ 2. Constraint Function: None ## - 2025-10-24 08:44:44,040 - logic_logger - INFO
33
+ Item ## - 2025-10-24 08:44:44,040 - logic_logger - INFO
34
+ 3. Derive <class 'database.models.Item'>.unit_price as Copy(product.unit_price) ## - 2025-10-24 08:44:44,040 - logic_logger - INFO
35
+ 4. Derive <class 'database.models.Item'>.amount as Formula (1): <function> ## - 2025-10-24 08:44:44,040 - logic_logger - INFO
36
+ Order ## - 2025-10-24 08:44:44,040 - logic_logger - INFO
37
+ 5. Derive <class 'database.models.Order'>.amount_total as Sum(Item.amount Where - None) ## - 2025-10-24 08:44:44,040 - logic_logger - INFO