odoo-addon-sale-blanket-order 16.0.1.0.0.7__py3-none-any.whl → 17.0.1.0.0.3__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.

Potentially problematic release.


This version of odoo-addon-sale-blanket-order might be problematic. Click here for more details.

Files changed (32) hide show
  1. odoo/addons/sale_blanket_order/README.rst +83 -60
  2. odoo/addons/sale_blanket_order/__manifest__.py +2 -2
  3. odoo/addons/sale_blanket_order/i18n/de.po +66 -54
  4. odoo/addons/sale_blanket_order/i18n/es.po +76 -55
  5. odoo/addons/sale_blanket_order/i18n/fr.po +84 -61
  6. odoo/addons/sale_blanket_order/i18n/fr_FR.po +76 -55
  7. odoo/addons/sale_blanket_order/i18n/it.po +41 -37
  8. odoo/addons/sale_blanket_order/i18n/pt.po +47 -53
  9. odoo/addons/sale_blanket_order/i18n/sale_blanket_order.pot +16 -26
  10. odoo/addons/sale_blanket_order/models/blanket_orders.py +71 -50
  11. odoo/addons/sale_blanket_order/models/sale_config_settings.py +0 -1
  12. odoo/addons/sale_blanket_order/models/sale_orders.py +2 -2
  13. odoo/addons/sale_blanket_order/readme/CONTRIBUTORS.md +17 -0
  14. odoo/addons/sale_blanket_order/readme/{CREDITS.rst → CREDITS.md} +2 -1
  15. odoo/addons/sale_blanket_order/readme/DESCRIPTION.md +5 -0
  16. odoo/addons/sale_blanket_order/readme/USAGE.md +58 -0
  17. odoo/addons/sale_blanket_order/static/description/index.html +53 -52
  18. odoo/addons/sale_blanket_order/tests/test_blanket_orders.py +6 -6
  19. odoo/addons/sale_blanket_order/tests/test_sale_order.py +1 -3
  20. odoo/addons/sale_blanket_order/views/sale_blanket_order_views.xml +24 -34
  21. odoo/addons/sale_blanket_order/views/sale_config_settings.xml +11 -19
  22. odoo/addons/sale_blanket_order/views/sale_order_views.xml +1 -1
  23. odoo/addons/sale_blanket_order/wizard/create_sale_orders.py +3 -2
  24. odoo_addon_sale_blanket_order-17.0.1.0.0.3.dist-info/METADATA +186 -0
  25. {odoo_addon_sale_blanket_order-16.0.1.0.0.7.dist-info → odoo_addon_sale_blanket_order-17.0.1.0.0.3.dist-info}/RECORD +27 -27
  26. {odoo_addon_sale_blanket_order-16.0.1.0.0.7.dist-info → odoo_addon_sale_blanket_order-17.0.1.0.0.3.dist-info}/WHEEL +1 -1
  27. odoo_addon_sale_blanket_order-17.0.1.0.0.3.dist-info/top_level.txt +1 -0
  28. odoo/addons/sale_blanket_order/readme/CONTRIBUTORS.rst +0 -8
  29. odoo/addons/sale_blanket_order/readme/DESCRIPTION.rst +0 -4
  30. odoo/addons/sale_blanket_order/readme/USAGE.rst +0 -53
  31. odoo_addon_sale_blanket_order-16.0.1.0.0.7.dist-info/METADATA +0 -164
  32. odoo_addon_sale_blanket_order-16.0.1.0.0.7.dist-info/top_level.txt +0 -1
@@ -15,6 +15,7 @@ msgstr ""
15
15
  "Plural-Forms: nplurals=2; plural=n > 1;\n"
16
16
 
17
17
  #. module: sale_blanket_order
18
+ #. odoo-python
18
19
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
19
20
  #, python-format
20
21
  msgid ""
@@ -122,6 +123,7 @@ msgid "Amount"
122
123
  msgstr ""
123
124
 
124
125
  #. module: sale_blanket_order
126
+ #. odoo-python
125
127
  #: code:addons/sale_blanket_order/wizard/create_sale_orders.py:0
126
128
  #, python-format
127
129
  msgid "An order can't be empty"
@@ -133,8 +135,18 @@ msgid "Analytic Account"
133
135
  msgstr ""
134
136
 
135
137
  #. module: sale_blanket_order
136
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__analytic_tag_ids
137
- msgid "Analytic Tags"
138
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__analytic_distribution
139
+ msgid "Analytic Distribution"
140
+ msgstr ""
141
+
142
+ #. module: sale_blanket_order
143
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__analytic_distribution_search
144
+ msgid "Analytic Distribution Search"
145
+ msgstr ""
146
+
147
+ #. module: sale_blanket_order
148
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__analytic_precision
149
+ msgid "Analytic Precision"
138
150
  msgstr ""
139
151
 
140
152
  #. module: sale_blanket_order
@@ -190,6 +202,7 @@ msgid "Blanket order wizard line"
190
202
  msgstr ""
191
203
 
192
204
  #. module: sale_blanket_order
205
+ #. odoo-python
193
206
  #: code:addons/sale_blanket_order/wizard/create_sale_orders.py:0
194
207
  #, python-format
195
208
  msgid ""
@@ -203,6 +216,7 @@ msgid "Cancel"
203
216
  msgstr ""
204
217
 
205
218
  #. module: sale_blanket_order
219
+ #. odoo-python
206
220
  #: code:addons/sale_blanket_order/models/sale_orders.py:0
207
221
  #, python-format
208
222
  msgid ""
@@ -283,6 +297,7 @@ msgid "Customer Reference"
283
297
  msgstr ""
284
298
 
285
299
  #. module: sale_blanket_order
300
+ #. odoo-python
286
301
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
287
302
  #, python-format
288
303
  msgid "Date Scheduled"
@@ -340,8 +355,6 @@ msgstr ""
340
355
 
341
356
  #. module: sale_blanket_order
342
357
  #: model:ir.actions.server,name:sale_blanket_order.expired_blanket_orders_cron_ir_actions_server
343
- #: model:ir.cron,cron_name:sale_blanket_order.expired_blanket_orders_cron
344
- #: model:ir.cron,name:sale_blanket_order.expired_blanket_orders_cron
345
358
  msgid "Expire Blanket Orders"
346
359
  msgstr ""
347
360
 
@@ -406,17 +419,13 @@ msgstr ""
406
419
 
407
420
  #. module: sale_blanket_order
408
421
  #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order__message_needaction
409
- #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order__message_unread
410
422
  #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order_line__message_needaction
411
- #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order_line__message_unread
412
423
  msgid "If checked, new messages require your attention."
413
424
  msgstr ""
414
425
 
415
426
  #. module: sale_blanket_order
416
427
  #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order__message_has_error
417
- #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order__message_has_sms_error
418
428
  #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order_line__message_has_error
419
- #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order_line__message_has_sms_error
420
429
  msgid "If checked, some messages have a delivery error."
421
430
  msgstr ""
422
431
 
@@ -442,14 +451,6 @@ msgstr ""
442
451
  msgid "Is Follower"
443
452
  msgstr ""
444
453
 
445
- #. module: sale_blanket_order
446
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order____last_update
447
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line____last_update
448
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_wizard____last_update
449
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_wizard_line____last_update
450
- msgid "Last Modified on"
451
- msgstr ""
452
-
453
454
  #. module: sale_blanket_order
454
455
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__write_uid
455
456
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__write_uid
@@ -472,12 +473,6 @@ msgstr ""
472
473
  msgid "Lines"
473
474
  msgstr ""
474
475
 
475
- #. module: sale_blanket_order
476
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__message_main_attachment_id
477
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__message_main_attachment_id
478
- msgid "Main Attachment"
479
- msgstr ""
480
-
481
476
  #. module: sale_blanket_order
482
477
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__message_has_error
483
478
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__message_has_error
@@ -496,6 +491,7 @@ msgid "Missing required fields on accountable sale order line."
496
491
  msgstr ""
497
492
 
498
493
  #. module: sale_blanket_order
494
+ #. odoo-python
499
495
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
500
496
  #, python-format
501
497
  msgid "Must have some lines"
@@ -512,12 +508,6 @@ msgstr ""
512
508
  msgid "Name"
513
509
  msgstr ""
514
510
 
515
- #. module: sale_blanket_order
516
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__activity_calendar_event_id
517
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__activity_calendar_event_id
518
- msgid "Next Activity Calendar Event"
519
- msgstr ""
520
-
521
511
  #. module: sale_blanket_order
522
512
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__activity_date_deadline
523
513
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__activity_date_deadline
@@ -557,7 +547,7 @@ msgstr ""
557
547
  #. module: sale_blanket_order
558
548
  #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order__message_needaction_counter
559
549
  #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order_line__message_needaction_counter
560
- msgid "Number of messages which requires an action"
550
+ msgid "Number of messages requiring action"
561
551
  msgstr ""
562
552
 
563
553
  #. module: sale_blanket_order
@@ -566,12 +556,6 @@ msgstr ""
566
556
  msgid "Number of messages with delivery error"
567
557
  msgstr ""
568
558
 
569
- #. module: sale_blanket_order
570
- #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order__message_unread_counter
571
- #: model:ir.model.fields,help:sale_blanket_order.field_sale_blanket_order_line__message_unread_counter
572
- msgid "Number of unread messages"
573
- msgstr ""
574
-
575
559
  #. module: sale_blanket_order
576
560
  #: model:ir.model.fields.selection,name:sale_blanket_order.selection__sale_blanket_order__state__open
577
561
  #: model_terms:ir.ui.view,arch_db:sale_blanket_order.view_blanket_order_search
@@ -634,6 +618,7 @@ msgid "Partner"
634
618
  msgstr ""
635
619
 
636
620
  #. module: sale_blanket_order
621
+ #. odoo-python
637
622
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
638
623
  #, python-format
639
624
  msgid "Partner is mandatory"
@@ -652,6 +637,7 @@ msgid "Price"
652
637
  msgstr ""
653
638
 
654
639
  #. module: sale_blanket_order
640
+ #. odoo-python
655
641
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
656
642
  #, python-format
657
643
  msgid "Price must be greater than zero"
@@ -663,6 +649,11 @@ msgstr ""
663
649
  msgid "Pricelist"
664
650
  msgstr ""
665
651
 
652
+ #. module: sale_blanket_order
653
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__pricelist_item_id
654
+ msgid "Pricelist Item"
655
+ msgstr ""
656
+
666
657
  #. module: sale_blanket_order
667
658
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__product_id
668
659
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__product_id
@@ -677,6 +668,7 @@ msgid "Purchase Order"
677
668
  msgstr ""
678
669
 
679
670
  #. module: sale_blanket_order
671
+ #. odoo-python
680
672
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
681
673
  #, python-format
682
674
  msgid "Quantity must be greater than zero"
@@ -687,6 +679,12 @@ msgstr ""
687
679
  msgid "Quantity to Order"
688
680
  msgstr ""
689
681
 
682
+ #. module: sale_blanket_order
683
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__rating_ids
684
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__rating_ids
685
+ msgid "Ratings"
686
+ msgstr ""
687
+
690
688
  #. module: sale_blanket_order
691
689
  #: model_terms:ir.ui.view,arch_db:sale_blanket_order.view_blanket_order_search
692
690
  msgid "Remaining Qty"
@@ -716,12 +714,7 @@ msgid "Responsible User"
716
714
  msgstr ""
717
715
 
718
716
  #. module: sale_blanket_order
719
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__message_has_sms_error
720
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__message_has_sms_error
721
- msgid "SMS Delivery error"
722
- msgstr ""
723
-
724
- #. module: sale_blanket_order
717
+ #. odoo-python
725
718
  #: code:addons/sale_blanket_order/wizard/create_sale_orders.py:0
726
719
  #, python-format
727
720
  msgid "Sale Blanket Order %s is not open"
@@ -773,6 +766,7 @@ msgid "Sales Order Line"
773
766
  msgstr ""
774
767
 
775
768
  #. module: sale_blanket_order
769
+ #. odoo-python
776
770
  #: code:addons/sale_blanket_order/wizard/create_sale_orders.py:0
777
771
  #, python-format
778
772
  msgid "Sales Orders"
@@ -859,6 +853,7 @@ msgid "Terms and Conditions"
859
853
  msgstr ""
860
854
 
861
855
  #. module: sale_blanket_order
856
+ #. odoo-python
862
857
  #: code:addons/sale_blanket_order/models/sale_orders.py:0
863
858
  #, python-format
864
859
  msgid ""
@@ -866,18 +861,21 @@ msgid ""
866
861
  msgstr ""
867
862
 
868
863
  #. module: sale_blanket_order
864
+ #. odoo-python
869
865
  #: code:addons/sale_blanket_order/models/sale_orders.py:0
870
866
  #, python-format
871
867
  msgid "The customer must be equal to the blanket order lines customer"
872
868
  msgstr ""
873
869
 
874
870
  #. module: sale_blanket_order
871
+ #. odoo-python
875
872
  #: code:addons/sale_blanket_order/models/sale_orders.py:0
876
873
  #, python-format
877
874
  msgid "The product in the blanket order and in the sales order must match"
878
875
  msgstr ""
879
876
 
880
877
  #. module: sale_blanket_order
878
+ #. odoo-python
881
879
  #: code:addons/sale_blanket_order/wizard/create_sale_orders.py:0
882
880
  #, python-format
883
881
  msgid "The sale has already been completed."
@@ -911,18 +909,6 @@ msgstr ""
911
909
  msgid "Unit of Measure"
912
910
  msgstr ""
913
911
 
914
- #. module: sale_blanket_order
915
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__message_unread
916
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__message_unread
917
- msgid "Unread Messages"
918
- msgstr ""
919
-
920
- #. module: sale_blanket_order
921
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__message_unread_counter
922
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__message_unread_counter
923
- msgid "Unread Messages Counter"
924
- msgstr ""
925
-
926
912
  #. module: sale_blanket_order
927
913
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__amount_untaxed
928
914
  msgid "Untaxed Amount"
@@ -948,12 +934,14 @@ msgid "Validity Date"
948
934
  msgstr ""
949
935
 
950
936
  #. module: sale_blanket_order
937
+ #. odoo-python
951
938
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
952
939
  #, python-format
953
940
  msgid "Validity date is mandatory"
954
941
  msgstr ""
955
942
 
956
943
  #. module: sale_blanket_order
944
+ #. odoo-python
957
945
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
958
946
  #, python-format
959
947
  msgid "Validity date must be in the future"
@@ -982,6 +970,7 @@ msgid "Wizard"
982
970
  msgstr ""
983
971
 
984
972
  #. module: sale_blanket_order
973
+ #. odoo-python
985
974
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
986
975
  #, python-format
987
976
  msgid ""
@@ -990,6 +979,7 @@ msgid ""
990
979
  msgstr ""
991
980
 
992
981
  #. module: sale_blanket_order
982
+ #. odoo-python
993
983
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
994
984
  #, python-format
995
985
  msgid ""
@@ -998,24 +988,28 @@ msgid ""
998
988
  msgstr ""
999
989
 
1000
990
  #. module: sale_blanket_order
991
+ #. odoo-python
1001
992
  #: code:addons/sale_blanket_order/wizard/create_sale_orders.py:0
1002
993
  #, python-format
1003
994
  msgid "You can't create a sale order from an expired blanket order!"
1004
995
  msgstr ""
1005
996
 
1006
997
  #. module: sale_blanket_order
998
+ #. odoo-python
1007
999
  #: code:addons/sale_blanket_order/wizard/create_sale_orders.py:0
1008
1000
  #, python-format
1009
1001
  msgid "You can't order more than the remaining quantities"
1010
1002
  msgstr ""
1011
1003
 
1012
1004
  #. module: sale_blanket_order
1005
+ #. odoo-python
1013
1006
  #: code:addons/sale_blanket_order/wizard/create_sale_orders.py:0
1014
1007
  #, python-format
1015
1008
  msgid "You have to select lines from the same company."
1016
1009
  msgstr ""
1017
1010
 
1018
1011
  #. module: sale_blanket_order
1012
+ #. odoo-python
1019
1013
  #: code:addons/sale_blanket_order/models/blanket_orders.py:0
1020
1014
  #, python-format
1021
1015
  msgid "remaining"
@@ -4,7 +4,7 @@
4
4
  #
5
5
  msgid ""
6
6
  msgstr ""
7
- "Project-Id-Version: Odoo Server 16.0\n"
7
+ "Project-Id-Version: Odoo Server 17.0\n"
8
8
  "Report-Msgid-Bugs-To: \n"
9
9
  "Last-Translator: \n"
10
10
  "Language-Team: \n"
@@ -128,13 +128,13 @@ msgid "An order can't be empty"
128
128
  msgstr ""
129
129
 
130
130
  #. module: sale_blanket_order
131
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__analytic_distribution
132
- msgid "Analytic"
131
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__analytic_account_id
132
+ msgid "Analytic Account"
133
133
  msgstr ""
134
134
 
135
135
  #. module: sale_blanket_order
136
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__analytic_account_id
137
- msgid "Analytic Account"
136
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__analytic_distribution
137
+ msgid "Analytic Distribution"
138
138
  msgstr ""
139
139
 
140
140
  #. module: sale_blanket_order
@@ -353,7 +353,6 @@ msgstr ""
353
353
 
354
354
  #. module: sale_blanket_order
355
355
  #: model:ir.actions.server,name:sale_blanket_order.expired_blanket_orders_cron_ir_actions_server
356
- #: model:ir.cron,cron_name:sale_blanket_order.expired_blanket_orders_cron
357
356
  msgid "Expire Blanket Orders"
358
357
  msgstr ""
359
358
 
@@ -450,14 +449,6 @@ msgstr ""
450
449
  msgid "Is Follower"
451
450
  msgstr ""
452
451
 
453
- #. module: sale_blanket_order
454
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order____last_update
455
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line____last_update
456
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_wizard____last_update
457
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_wizard_line____last_update
458
- msgid "Last Modified on"
459
- msgstr ""
460
-
461
452
  #. module: sale_blanket_order
462
453
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__write_uid
463
454
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__write_uid
@@ -480,12 +471,6 @@ msgstr ""
480
471
  msgid "Lines"
481
472
  msgstr ""
482
473
 
483
- #. module: sale_blanket_order
484
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__message_main_attachment_id
485
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__message_main_attachment_id
486
- msgid "Main Attachment"
487
- msgstr ""
488
-
489
474
  #. module: sale_blanket_order
490
475
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__message_has_error
491
476
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__message_has_error
@@ -521,12 +506,6 @@ msgstr ""
521
506
  msgid "Name"
522
507
  msgstr ""
523
508
 
524
- #. module: sale_blanket_order
525
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__activity_calendar_event_id
526
- #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__activity_calendar_event_id
527
- msgid "Next Activity Calendar Event"
528
- msgstr ""
529
-
530
509
  #. module: sale_blanket_order
531
510
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__activity_date_deadline
532
511
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__activity_date_deadline
@@ -668,6 +647,11 @@ msgstr ""
668
647
  msgid "Pricelist"
669
648
  msgstr ""
670
649
 
650
+ #. module: sale_blanket_order
651
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__pricelist_item_id
652
+ msgid "Pricelist Item"
653
+ msgstr ""
654
+
671
655
  #. module: sale_blanket_order
672
656
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__product_id
673
657
  #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__product_id
@@ -693,6 +677,12 @@ msgstr ""
693
677
  msgid "Quantity to Order"
694
678
  msgstr ""
695
679
 
680
+ #. module: sale_blanket_order
681
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order__rating_ids
682
+ #: model:ir.model.fields,field_description:sale_blanket_order.field_sale_blanket_order_line__rating_ids
683
+ msgid "Ratings"
684
+ msgstr ""
685
+
696
686
  #. module: sale_blanket_order
697
687
  #: model_terms:ir.ui.view,arch_db:sale_blanket_order.view_blanket_order_search
698
688
  msgid "Remaining Qty"
@@ -6,8 +6,6 @@ from odoo.exceptions import UserError
6
6
  from odoo.tools import float_is_zero
7
7
  from odoo.tools.misc import format_date
8
8
 
9
- from odoo.addons.sale.models.sale_order import READONLY_FIELD_STATES
10
-
11
9
 
12
10
  class BlanketOrder(models.Model):
13
11
  _name = "sale.blanket.order"
@@ -44,7 +42,6 @@ class BlanketOrder(models.Model):
44
42
  partner_id = fields.Many2one(
45
43
  "res.partner",
46
44
  string="Partner",
47
- states=READONLY_FIELD_STATES,
48
45
  )
49
46
  line_ids = fields.One2many(
50
47
  "sale.blanket.order.line", "order_id", string="Order lines", copy=True
@@ -63,7 +60,6 @@ class BlanketOrder(models.Model):
63
60
  "product.pricelist",
64
61
  string="Pricelist",
65
62
  required=True,
66
- states=READONLY_FIELD_STATES,
67
63
  )
68
64
  currency_id = fields.Many2one("res.currency", related="pricelist_id.currency_id")
69
65
  analytic_account_id = fields.Many2one(
@@ -71,13 +67,11 @@ class BlanketOrder(models.Model):
71
67
  string="Analytic Account",
72
68
  copy=False,
73
69
  check_company=True,
74
- states=READONLY_FIELD_STATES,
75
70
  domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",
76
71
  )
77
72
  payment_term_id = fields.Many2one(
78
73
  "account.payment.term",
79
74
  string="Payment Terms",
80
- states=READONLY_FIELD_STATES,
81
75
  )
82
76
  confirmed = fields.Boolean(copy=False)
83
77
  state = fields.Selection(
@@ -91,26 +85,21 @@ class BlanketOrder(models.Model):
91
85
  store=True,
92
86
  copy=False,
93
87
  )
94
- validity_date = fields.Date(
95
- states=READONLY_FIELD_STATES,
96
- )
88
+ validity_date = fields.Date()
97
89
  client_order_ref = fields.Char(
98
90
  string="Customer Reference",
99
91
  copy=False,
100
- states=READONLY_FIELD_STATES,
101
92
  )
102
- note = fields.Text(default=_default_note, states=READONLY_FIELD_STATES)
93
+ note = fields.Text(default=_default_note)
103
94
  user_id = fields.Many2one(
104
95
  "res.users",
105
96
  string="Salesperson",
106
- states=READONLY_FIELD_STATES,
107
97
  )
108
98
  team_id = fields.Many2one(
109
99
  "crm.team",
110
100
  string="Sales Team",
111
101
  change_default=True,
112
102
  default=lambda self: self.env["crm.team"]._get_default_team_id(),
113
- states=READONLY_FIELD_STATES,
114
103
  )
115
104
  company_id = fields.Many2one(
116
105
  comodel_name="res.company",
@@ -198,7 +187,7 @@ class BlanketOrder(models.Model):
198
187
  order.state = "expired"
199
188
  elif float_is_zero(
200
189
  sum(
201
- order.line_ids.filtered(lambda l: not l.display_type).mapped(
190
+ order.line_ids.filtered(lambda line: not line.display_type).mapped(
202
191
  "remaining_uom_qty"
203
192
  )
204
193
  ),
@@ -483,23 +472,29 @@ class BlanketOrderLine(models.Model):
483
472
  default=False,
484
473
  help="Technical field for UX purpose.",
485
474
  )
475
+ pricelist_item_id = fields.Many2one(
476
+ comodel_name="product.pricelist.item", compute="_compute_pricelist_item_id"
477
+ )
486
478
 
487
- def name_get(self):
488
- result = []
479
+ @api.depends(
480
+ "order_id.name", "date_schedule", "remaining_uom_qty", "product_uom.name"
481
+ )
482
+ @api.depends_context("from_sale_order")
483
+ def _compute_display_name(self):
489
484
  if self.env.context.get("from_sale_order"):
490
485
  for record in self:
491
- res = "[%s]" % record.order_id.name
486
+ name = "[%s]" % record.order_id.name
492
487
  if record.date_schedule:
493
488
  formatted_date = format_date(record.env, record.date_schedule)
494
- res += " - {}: {}".format(_("Date Scheduled"), formatted_date)
495
- res += " ({}: {} {})".format(
489
+ name += " - {}: {}".format(_("Date Scheduled"), formatted_date)
490
+ name += " ({}: {} {})".format(
496
491
  _("remaining"),
497
492
  record.remaining_uom_qty,
498
493
  record.product_uom.name,
499
494
  )
500
- result.append((record.id, res))
501
- return result
502
- return super().name_get()
495
+ record.display_name = name
496
+ else:
497
+ return super()._compute_display_name()
503
498
 
504
499
  def _get_real_price_currency(self, product, rule_id, qty, uom, pricelist_id):
505
500
  """Retrieve the price before applying the pricelist
@@ -563,35 +558,43 @@ class BlanketOrderLine(models.Model):
563
558
 
564
559
  return product[field_name] * uom_factor * cur_factor, currency_id.id
565
560
 
566
- def _get_display_price(self, product):
561
+ def _get_display_price(self):
567
562
  # Copied and adapted from the sale module
568
563
  self.ensure_one()
569
- pricelist = self.order_id.pricelist_id
570
- partner = self.order_id.partner_id
571
- if self.order_id.pricelist_id.discount_policy == "with_discount":
572
- return product.with_context(pricelist=pricelist.id).lst_price
573
- final_price, rule_id = pricelist._get_product_price_rule(
574
- self.product_id, self.original_uom_qty or 1.0, self.product_uom
564
+ self.product_id.ensure_one()
565
+
566
+ pricelist_price = self.pricelist_item_id._compute_price(
567
+ product=self.product_id,
568
+ quantity=self.original_uom_qty or 1.0,
569
+ uom=self.product_uom,
570
+ date=fields.Date.today(),
571
+ currency=self.currency_id,
575
572
  )
576
- context_partner = dict(
577
- self.env.context, partner_id=partner.id, date=fields.Date.today()
578
- )
579
- base_price, currency_id = self.with_context(
580
- **context_partner
581
- )._get_real_price_currency(
582
- self.product_id,
583
- rule_id,
584
- self.original_uom_qty,
585
- self.product_uom,
586
- pricelist.id,
587
- )
588
- if currency_id != pricelist.currency_id.id:
589
- currency = self.env["res.currency"].browse(currency_id)
590
- base_price = currency.with_context(**context_partner).compute(
591
- base_price, pricelist.currency_id
592
- )
573
+
574
+ if self.order_id.pricelist_id.discount_policy == "with_discount":
575
+ return pricelist_price
576
+
577
+ if not self.pricelist_item_id:
578
+ # No pricelist rule found => no discount from pricelist
579
+ return pricelist_price
580
+
581
+ base_price = self._get_pricelist_price_before_discount()
582
+
593
583
  # negative discounts (= surcharge) are included in the display price
594
- return max(base_price, final_price)
584
+ return max(base_price, pricelist_price)
585
+
586
+ def _get_pricelist_price_before_discount(self):
587
+ # Copied and adapted from the sale module
588
+ self.ensure_one()
589
+ self.product_id.ensure_one()
590
+
591
+ return self.pricelist_item_id._compute_price_before_discount(
592
+ product=self.product_id,
593
+ quantity=self.product_uom_qty or 1.0,
594
+ uom=self.product_uom,
595
+ date=fields.Date.today(),
596
+ currency=self.currency_id,
597
+ )
595
598
 
596
599
  @api.onchange("product_id", "original_uom_qty")
597
600
  def onchange_product(self):
@@ -605,9 +608,9 @@ class BlanketOrderLine(models.Model):
605
608
  if self.order_id.partner_id and float_is_zero(
606
609
  self.price_unit, precision_digits=precision
607
610
  ):
608
- self.price_unit = self._get_display_price(self.product_id)
611
+ self.price_unit = self._get_display_price()
609
612
  if self.product_id.code:
610
- name = "[{}] {}".format(name, self.product_id.code)
613
+ name = f"[{name}] {self.product_id.code}"
611
614
  if self.product_id.description_sale:
612
615
  name += "\n" + self.product_id.description_sale
613
616
  self.name = name
@@ -656,6 +659,24 @@ class BlanketOrderLine(models.Model):
656
659
  line.remaining_uom_qty, line.product_id.uom_id
657
660
  )
658
661
 
662
+ @api.depends("product_id", "product_uom", "original_uom_qty")
663
+ def _compute_pricelist_item_id(self):
664
+ # Copied and adapted from the sale module
665
+ for line in self:
666
+ if (
667
+ not line.product_id
668
+ or line.display_type
669
+ or not line.order_id.pricelist_id
670
+ ):
671
+ line.pricelist_item_id = False
672
+ else:
673
+ line.pricelist_item_id = line.order_id.pricelist_id._get_product_rule(
674
+ line.product_id,
675
+ quantity=line.original_uom_qty or 1.0,
676
+ uom=line.product_uom,
677
+ date=fields.Date.today(),
678
+ )
679
+
659
680
  def _validate(self):
660
681
  try:
661
682
  for line in self:
@@ -716,4 +737,4 @@ class BlanketOrderLine(models.Model):
716
737
  """
717
738
  )
718
739
  )
719
- return super(BlanketOrderLine, self).write(values)
740
+ return super().write(values)
@@ -5,7 +5,6 @@ from odoo import fields, models
5
5
 
6
6
 
7
7
  class SaleConfigSettings(models.TransientModel):
8
-
9
8
  _inherit = "res.config.settings"
10
9
 
11
10
  group_blanket_disable_adding_lines = fields.Boolean(
@@ -61,14 +61,14 @@ class SaleOrderLine(models.Model):
61
61
  assigned_bo_line = False
62
62
  date_planned = date.today()
63
63
  date_delta = timedelta(days=365)
64
- for line in bo_lines.filtered(lambda l: l.date_schedule):
64
+ for line in bo_lines.filtered(lambda bo_line: bo_line.date_schedule):
65
65
  date_schedule = line.date_schedule
66
66
  if date_schedule and abs(date_schedule - date_planned) < date_delta:
67
67
  assigned_bo_line = line
68
68
  date_delta = abs(date_schedule - date_planned)
69
69
  if assigned_bo_line:
70
70
  return assigned_bo_line
71
- non_date_bo_lines = bo_lines.filtered(lambda l: not l.date_schedule)
71
+ non_date_bo_lines = bo_lines.filtered(lambda bo_line: not bo_line.date_schedule)
72
72
  if non_date_bo_lines:
73
73
  return non_date_bo_lines[0]
74
74