add budget module

This commit is contained in:
ronozoro 2024-07-23 13:28:19 +03:00
parent 49cf7349e4
commit f5bdf8321b
No known key found for this signature in database
GPG Key ID: 7C2BDED35C62C0F3
55 changed files with 2366 additions and 472 deletions

0
odex25_accounting/account_budget_custom/__init__.py Normal file → Executable file
View File

View File

@ -8,9 +8,9 @@
""", """,
'author': "Expert Co. Ltd.", 'author': "Expert Co. Ltd.",
'website': "http://www.exp-sa.com", 'website': "http://www.exp-sa.com",
'category': 'Odex25-Accounting/Odex25-Accounting', 'category': 'Odex25 Accounting/Accounting',
# any module necessary for this one to work correctly # any module necessary for this one to work correctly
'depends': ['base','odex25_account_budget', 'odex25_account_reports', 'report_xlsx'], 'depends': ['odex25_account_budget', 'odex25_account_reports', 'report_xlsx'],
# always loaded # always loaded
'data': [ 'data': [
'data/budget_operation_data.xml', 'data/budget_operation_data.xml',

View File

View File

@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 14.0\n" "Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-08 11:11+0000\n" "POT-Creation-Date: 2024-06-26 18:41+0000\n"
"PO-Revision-Date: 2024-05-08 11:11+0000\n" "PO-Revision-Date: 2024-06-26 18:41+0000\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -66,9 +66,40 @@ msgstr "السماح بتخطي الموازنة"
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__total_amount #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__total_amount
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__amount #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__amount
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__amount #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__amount
#: model_terms:ir.ui.view,arch_db:account_budget_custom.view_budget_operations
msgid "Amount" msgid "Amount"
msgstr "مبلغ" msgstr "مبلغ"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0
#: model:ir.model.fields,help:account_budget_custom.field_crossovered_budget_lines__above_remain
#, python-format
msgid "Amount of money that has been exceeded"
msgstr ""
" هي المبالغ التي تم صرفها بعد انتهاء رصيد المتبقى من الموازنة في حالة "
"التجاوز الموازنة"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0
#: model:ir.model.fields,help:account_budget_custom.field_crossovered_budget_lines__provide
#, python-format
msgid "Amount of money that has been provided"
msgstr "تعزيز او تحويل من هو عبارة عن تعزيزات الموازنة او تحويلات من موزانات أخرى"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0
#: model:ir.model.fields,help:account_budget_custom.field_crossovered_budget_lines__pull_out
#, python-format
msgid "Amount of money that has been pulled out"
msgstr "تخفيض او تحويل الى هو عبارة عن تخفيضات للموازنة او تحويلات الى موزانات أخرى"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0
#: model:ir.model.fields,help:account_budget_custom.field_crossovered_budget_lines__remain
#, python-format
msgid "Amount of money that has been remained"
msgstr " ( مبلغ متاح - المبلغ المحجوز - مبلغ تعميد - المبلغ الفعلى - المحجوز المبدئي ) يكون صفر عند قابل الاشارة"
#. module: account_budget_custom #. module: account_budget_custom
#: model_terms:ir.ui.view,arch_db:account_budget_custom.view_budget_confirmation_form #: model_terms:ir.ui.view,arch_db:account_budget_custom.view_budget_confirmation_form
msgid "Approve" msgid "Approve"
@ -88,6 +119,7 @@ msgstr "المستفيد"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model,name:account_budget_custom.model_crossovered_budget #: model:ir.model,name:account_budget_custom.model_crossovered_budget
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__crossovered_budget_id
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__from_crossovered_budget_id #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__from_crossovered_budget_id
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__to_crossovered_budget_id #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__to_crossovered_budget_id
msgid "Budget" msgid "Budget"
@ -131,6 +163,7 @@ msgstr "بند الموازنة"
#. module: account_budget_custom #. module: account_budget_custom
#: code:addons/account_budget_custom/reports/budget_report_xlsx.py:0 #: code:addons/account_budget_custom/reports/budget_report_xlsx.py:0
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget__crossovered_budget_line
#: model_terms:ir.ui.view,arch_db:account_budget_custom.view_crossovered_budget_line_graph #: model_terms:ir.ui.view,arch_db:account_budget_custom.view_crossovered_budget_line_graph
#: model_terms:ir.ui.view,arch_db:account_budget_custom.view_crossovered_budget_line_pivot #: model_terms:ir.ui.view,arch_db:account_budget_custom.view_crossovered_budget_line_pivot
#: model_terms:ir.ui.view,arch_db:account_budget_custom.view_crossovered_budget_line_tree #: model_terms:ir.ui.view,arch_db:account_budget_custom.view_crossovered_budget_line_tree
@ -199,15 +232,21 @@ msgid "Budget XLSX Report"
msgstr "تقرير الموازنة (اكسل)" msgstr "تقرير الموازنة (اكسل)"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model,name:account_budget_custom.model_account_budget_post #: code:addons/account_budget_custom/models/account_budget.py:0
msgid "Budgetary Position" #, python-format
msgstr "بند الموازنة" msgid "Budget lines can not be overlaped with another."
msgstr "لا يمكن تراكب خطوط الميزانية مع بعضها البعض."
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.ui.menu,name:account_budget_custom.main_budgets_menu #: model:ir.ui.menu,name:account_budget_custom.main_budgets_menu
msgid "Budgets" msgid "Budgets"
msgstr "الموازنات" msgstr "الموازنات"
#. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__bybass_budget_check
msgid "ByPass Budget Line Check"
msgstr "تخطي ربط الموازنه بالحساب"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_confirmation__state__cancel #: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_confirmation__state__cancel
msgid "Cancel" msgid "Cancel"
@ -239,21 +278,16 @@ msgstr ""
msgid "Confirm" msgid "Confirm"
msgstr "تأكيد" msgstr "تأكيد"
#. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__confirm
msgid "Confirm Amount"
msgstr "المبلغ المصدق"
#. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__budget_confirm_amount
msgid "Confirmation Amount"
msgstr "مبلغ التصديق"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_operations__state__confirmed #: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_operations__state__confirmed
msgid "Confirmed" msgid "Confirmed"
msgstr "مؤكد" msgstr "مؤكد"
#. module: account_budget_custom
#: model:ir.model,name:account_budget_custom.model_res_partner
msgid "Contact"
msgstr "جهة الاتصال"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__analytic_account_id #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__analytic_account_id
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__analytic_account_id #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__analytic_account_id
@ -325,9 +359,12 @@ msgstr "تفاصيل المطابقة"
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__display_name #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__display_name
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__display_name #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__display_name
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__display_name #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__display_name
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget__display_name
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__display_name
#: model:ir.model.fields,field_description:account_budget_custom.field_reject_wizard__display_name #: model:ir.model.fields,field_description:account_budget_custom.field_reject_wizard__display_name
#: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_report__display_name #: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_report__display_name
#: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_xslx_report__display_name #: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_xslx_report__display_name
#: model:ir.model.fields,field_description:account_budget_custom.field_res_partner__display_name
msgid "Display Name" msgid "Display Name"
msgstr "الاسم المعروض" msgstr "الاسم المعروض"
@ -346,12 +383,25 @@ msgstr "تم التعميد"
msgid "Draft" msgid "Draft"
msgstr "موظف الميزانية" msgstr "موظف الميزانية"
#. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__above_remain
#: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form
msgid "Exceed Amount"
msgstr "التجاوز الموازنة"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__final_amount #: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__final_amount
#: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form #: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form
msgid "Final Amount" msgid "Final Amount"
msgstr "المبلغ النهائي" msgstr "المبلغ النهائي"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0
#: model:ir.model.fields,help:account_budget_custom.field_crossovered_budget_lines__final_amount
#, python-format
msgid "Final amount of money that has been provided"
msgstr "هو مبلغ الموازنة المتاح للارتباط ويشمل مبلغ المخطط + تعزيز او تحويل من - تخفيض او تحويل الى"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__message_follower_ids #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__message_follower_ids
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__message_follower_ids #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__message_follower_ids
@ -399,11 +449,14 @@ msgstr "من العملية"
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__id #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__id
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__id #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__id
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__id #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__id
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget__id
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__id
#: model:ir.model.fields,field_description:account_budget_custom.field_reject_wizard__id #: model:ir.model.fields,field_description:account_budget_custom.field_reject_wizard__id
#: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_report__id #: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_report__id
#: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_xslx_report__id #: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_xslx_report__id
#: model:ir.model.fields,field_description:account_budget_custom.field_res_partner__id
msgid "ID" msgid "ID"
msgstr "المرجع" msgstr "المُعرف"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__activity_exception_icon #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__activity_exception_icon
@ -442,18 +495,16 @@ msgstr "تعزيز"
msgid "Is Follower" msgid "Is Follower"
msgstr "متابع" msgstr "متابع"
#. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__is_transfered
msgid "Is Transfered"
msgstr ""
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation____last_update #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation____last_update
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line____last_update #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line____last_update
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations____last_update #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations____last_update
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget____last_update
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines____last_update
#: model:ir.model.fields,field_description:account_budget_custom.field_reject_wizard____last_update #: model:ir.model.fields,field_description:account_budget_custom.field_reject_wizard____last_update
#: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_report____last_update #: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_report____last_update
#: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_xslx_report____last_update #: model:ir.model.fields,field_description:account_budget_custom.field_report_account_budget_custom_budget_xslx_report____last_update
#: model:ir.model.fields,field_description:account_budget_custom.field_res_partner____last_update
msgid "Last Modified on" msgid "Last Modified on"
msgstr "آخر تعديل في" msgstr "آخر تعديل في"
@ -590,7 +641,7 @@ msgstr "المبلغ الفعلي"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__provide #: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__provide
msgid "Provide" msgid "Provide"
msgstr "الدعومات" msgstr "تعزيز/تحويل من"
#. module: account_budget_custom #. module: account_budget_custom
#: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form #: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form
@ -601,7 +652,7 @@ msgstr "مبلغ الدعم"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__pull_out #: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__pull_out
msgid "Pull Out" msgid "Pull Out"
msgstr "تخفيض" msgstr "تخفيض/تحويل إلي"
#. module: account_budget_custom #. module: account_budget_custom
#: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form #: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form
@ -612,29 +663,23 @@ msgstr "مبلغ السحب"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__purchase_remain #: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__purchase_remain
msgid "Purchase Remain" msgid "Purchase Remain"
msgstr "المتبقي من التعميد" msgstr "المبلغ"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__purchase_remind #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__purchase_remind
msgid "Purchase Remind" msgid "Purchase Remind"
msgstr "المتبقي من التعميد" msgstr "المبلغ"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_confirmation__type__purchase_request #: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_confirmation__type__purchase_request
msgid "Purchase Request" msgid "Purchase Request"
msgstr "طلب شراء" msgstr ""
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_confirmation__type__purchase_order #: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_confirmation__type__purchase_order
msgid "Purchase Requisition" msgid "Purchase Requisition"
msgstr "" msgstr ""
#. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__reason
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__reason
msgid "Reason/Justification"
msgstr "السببظ المبرر"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__ref #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__ref
msgid "Reference" msgid "Reference"
@ -648,10 +693,14 @@ msgstr "رفض"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__reject_reason #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__reject_reason
#: model:ir.model.fields,field_description:account_budget_custom.field_reject_wizard__reject_reason
msgid "Reject Reason" msgid "Reject Reason"
msgstr "سبب الرفض" msgstr "سبب الرفض"
#. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_reject_wizard__reject_reason
msgid "Reject Reson"
msgstr "سبب الرفض"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__res_model #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation__res_model
msgid "Related Document Model Name" msgid "Related Document Model Name"
@ -660,7 +709,7 @@ msgstr "اسم كائن المستند المرتبط"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__remain #: model:ir.model.fields,field_description:account_budget_custom.field_budget_confirmation_line__remain
msgid "Remain" msgid "Remain"
msgstr "الباقي" msgstr "المبلغ المتاح"
#. module: account_budget_custom #. module: account_budget_custom
#: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form #: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form
@ -688,12 +737,6 @@ msgstr "التقارير"
msgid "Request user" msgid "Request user"
msgstr "المستخدم الطالب" msgstr "المستخدم الطالب"
#. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__reserve
#: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form
msgid "Reserve Amount"
msgstr "المبلغ المحجوز"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__from_reserved #: model:ir.model.fields,field_description:account_budget_custom.field_budget_operations__from_reserved
msgid "Reserve?" msgid "Reserve?"
@ -738,6 +781,12 @@ msgstr ""
msgid "Sorry, No data to Print" msgid "Sorry, No data to Print"
msgstr "لا يوجد بيانات ليتم طباعتها" msgstr "لا يوجد بيانات ليتم طباعتها"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0
#, python-format
msgid "Sources Sale Orders %s"
msgstr ""
#. module: account_budget_custom #. module: account_budget_custom
#: code:addons/account_budget_custom/models/budget_confirmation.py:0 #: code:addons/account_budget_custom/models/budget_confirmation.py:0
#, python-format #, python-format
@ -770,17 +819,26 @@ msgstr ""
"اليوم: تاريخ النشاط هو اليوم\n" "اليوم: تاريخ النشاط هو اليوم\n"
"المخطط: الأنشطة المستقبلية." "المخطط: الأنشطة المستقبلية."
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/budget_operations.py:0
#, python-format
msgid "The amount must be less than or equal to the budget line final amount"
msgstr "يجب ان يكون المبلغ اقل او يساوي المبلغ النهائي للبند الموازنة"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/budget_operations.py:0
#: code:addons/account_budget_custom/models/budget_operations.py:0
#: code:addons/account_budget_custom/models/budget_operations.py:0
#: code:addons/account_budget_custom/models/budget_operations.py:0
#, python-format
msgid "The date must be between the budget %s post period"
msgstr "يجب ان يكون التاريخ مقابل للفتره المحدده %s"
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__theoritical_amount #: model:ir.model.fields,field_description:account_budget_custom.field_crossovered_budget_lines__theoritical_amount
msgid "Theoretical Amount" msgid "Theoretical Amount"
msgstr "القيمة النظرية" msgstr "القيمة النظرية"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0
#, python-format
msgid "This position can not be deleted"
msgstr "لا يمكن حذف مركز موازنة"
#. module: account_budget_custom #. module: account_budget_custom
#: model_terms:ir.ui.view,arch_db:account_budget_custom.view_budget_operations #: model_terms:ir.ui.view,arch_db:account_budget_custom.view_budget_operations
msgid "To" msgid "To"
@ -812,6 +870,13 @@ msgstr "إجمالي المبلغ"
msgid "Total amount in services request line" msgid "Total amount in services request line"
msgstr "المبلغ" msgstr "المبلغ"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0
#: model:ir.model.fields,help:account_budget_custom.field_crossovered_budget_lines__practical_amount
#, python-format
msgid "Total amount of money that has been spent"
msgstr ""
#. module: account_budget_custom #. module: account_budget_custom
#: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_operations__operation_type__transfer #: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_operations__operation_type__transfer
#: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_operations__type__transfer #: model:ir.model.fields.selection,name:account_budget_custom.selection__budget_operations__type__transfer
@ -865,9 +930,10 @@ msgstr "نهاية السنة"
#. module: account_budget_custom #. module: account_budget_custom
#: code:addons/account_budget_custom/models/budget_operations.py:0 #: code:addons/account_budget_custom/models/budget_operations.py:0
#: code:addons/account_budget_custom/models/budget_operations.py:0
#, python-format #, python-format
msgid "You can transfer to approved budget only" msgid "You can transfer to approved budget only"
msgstr "" msgstr "يمكنك التحويل الى موازنة معتمدة فقط"
#. module: account_budget_custom #. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0 #: code:addons/account_budget_custom/models/account_budget.py:0
@ -877,11 +943,6 @@ msgstr "لا يمكن حذف موازنة ليست في مرحلة مسودة"
#. module: account_budget_custom #. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0 #: code:addons/account_budget_custom/models/account_budget.py:0
#, python-format
msgid "You can not take more than the remaining amount"
msgstr "لا يمكن أخذ أكثر من المبلغ المتبقي"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/account_budget.py:0 #: code:addons/account_budget_custom/models/account_budget.py:0
#, python-format #, python-format
msgid "You can not take more than the remaining amount.." msgid "You can not take more than the remaining amount.."
@ -985,8 +1046,13 @@ msgstr ""
msgid "تاريخ البدء" msgid "تاريخ البدء"
msgstr "" msgstr ""
#. module: account_budget_custom
#: model_terms:ir.ui.view,arch_db:account_budget_custom.crossovered_budget_view_form
msgid "مبلغ نهائي"
msgstr ""
#. module: account_budget_custom #. module: account_budget_custom
#: code:addons/account_budget_custom/reports/budget_report_xlsx.py:0 #: code:addons/account_budget_custom/reports/budget_report_xlsx.py:0
#, python-format #, python-format
msgid "وضع المـوازنـة" msgid "وضع المـوازنـة"
msgstr "" msgstr "بند المـوازنـة"

View File

View File

@ -2,14 +2,6 @@ from odoo import api, fields, models, _
from odoo.exceptions import UserError, ValidationError from odoo.exceptions import UserError, ValidationError
class AccountBudgetPost(models.Model):
_inherit = "account.budget.post"
def unlink(self):
raise ValidationError(_('This position can not be deleted'))
# return super(AccountBudgetPost, self).unlink()
class CrossoveredBudget(models.Model): class CrossoveredBudget(models.Model):
_inherit = "crossovered.budget" _inherit = "crossovered.budget"
_order = "create_date desc" _order = "create_date desc"
@ -18,6 +10,7 @@ class CrossoveredBudget(models.Model):
currency_id = fields.Many2one('res.currency', string='Currency', currency_id = fields.Many2one('res.currency', string='Currency',
readonly=True, required=True, readonly=True, required=True,
default=lambda self: self.env.user.company_id.currency_id.id) default=lambda self: self.env.user.company_id.currency_id.id)
crossovered_budget_line = fields.One2many(copy=False)
def unlink(self): def unlink(self):
for budget in self: for budget in self:
@ -25,36 +18,114 @@ class CrossoveredBudget(models.Model):
raise UserError(_('You can not delete budget not in draft state')) raise UserError(_('You can not delete budget not in draft state'))
return super(CrossoveredBudget, self).unlink() return super(CrossoveredBudget, self).unlink()
def copy(self, default=None):
default = dict(default or {})
default.update({
'name': self.name + ' (copy)',
'state': 'draft',
})
return super(CrossoveredBudget, self).copy(default)
# check that budget period doesn't overlap with another budget
@api.constrains('crossovered_budget_line', 'date_from', 'date_to')
def _check_budget_line_period(self):
for budget in self:
if budget.state == 'done':
continue
for line in budget.crossovered_budget_line:
domain = [
('crossovered_budget_id.date_from', '<=', budget.date_to),
('crossovered_budget_id.date_to', '>=', budget.date_from),
('crossovered_budget_id.state', '=', 'done'),
('id', '!=', line.id),
('analytic_account_id', '=', line.analytic_account_id.id),
('general_budget_id', '=', line.general_budget_id.id),
]
if self.env['crossovered.budget.lines'].search_count(domain):
raise ValidationError(_('Budget lines can not be overlaped with another.'))
class CrossoveredBudgetLines(models.Model): class CrossoveredBudgetLines(models.Model):
_inherit = "crossovered.budget.lines" _inherit = "crossovered.budget.lines"
reserved_percent = fields.Float(related='crossovered_budget_id.reserved_percent', string='Reserved Percent') reserved_percent = fields.Float(related='crossovered_budget_id.reserved_percent', string='Reserved Percent')
reserved_amount = fields.Float(string='Reserved Amount', readonly=True, compute='_compute_reserved_amount') reserved_amount = fields.Float(string='Reserved Amount', readonly=True, compute='_compute_reserved_amount')
# pull_out = fields.Float(string='Pull Out', compute='_compute_operations_amount', store=True, tracking=True) pull_out = fields.Monetary(string='Pull Out', compute='_compute_pull_out',
pull_out = fields.Monetary(string='Pull Out') help=_('Amount of money that has been pulled out'),store=True)
provide = fields.Float(string='Provide', compute='_compute_operations_amount', store=True) provide = fields.Float(string='Provide', compute='_compute_provide',
remain = fields.Float(string='Remain of Christening', compute='_compute_operations_amount') help=_('Amount of money that has been provided'),store=True)
budget_confirm_amount = fields.Float(string='Confirmation Amount', compute='_compute_operations_amount')
remain = fields.Float(string='Remain of Christening', compute='_compute_remain',help=_('Amount of money that has been remained'))
above_remain = fields.Float(string='Exceed Amount', compute='_compute_remain',
help=_('Amount of money that has been exceeded'))
purchase_remain = fields.Float(store=True) purchase_remain = fields.Float(store=True)
practical_amount = fields.Float(compute='_compute_practical_amount', string='Practical Amount', digits=0, practical_amount = fields.Float(compute='_compute_practical_amount', string='Practical Amount', digits=0,
store=False) store=False, help=_('Total amount of money that has been spent'))
theoritical_amount = fields.Float(compute='_compute_theoritical_amount', string='Theoretical Amount', digits=0, theoritical_amount = fields.Float(compute='_compute_theoritical_amount', string='Theoretical Amount', digits=0,
store=True) store=True)
percentage = fields.Float(compute='_compute_percentage', string='Achievement', store=False, digits=(16, 4)) percentage = fields.Float(compute='_compute_percentage', string='Achievement', store=False, digits=(16, 4))
from_operation_ids = fields.One2many('budget.operations', 'from_budget_line_id', string='From Operation') from_operation_ids = fields.One2many('budget.operations', 'from_budget_line_id', string='From Operation')
to_operation_ids = fields.One2many('budget.operations', 'to_budget_line_id', string='Cost Center') to_operation_ids = fields.One2many('budget.operations', 'to_budget_line_id', string='Cost Center')
reserve = fields.Float(string='Last Reserve Amount')
confirm = fields.Float(string='Confirm Amount')
year_end = fields.Boolean(compute="get_year_end") year_end = fields.Boolean(compute="get_year_end")
is_transfered = fields.Boolean(default=False)
final_amount = fields.Float(compute='_compute_final_amount')
@api.depends('planned_amount', 'pull_out', 'provide') final_amount = fields.Float(string='Final Amount', compute='_compute_final_amount',
help=_('Final amount of money that has been provided'),store=True)
reserve = fields.Float(string='Reserve Amount', compute='_compute_reserve',
help=_('Total amount of reserved purchase orders'))
confirm = fields.Float(string='Confirm Amount', compute='_compute_confirm',
help=_('Total amount of confirmed purchase orders'))
@api.depends('analytic_account_id')
def _compute_confirm(self):
for rec in self:
orders = self.env['purchase.order.line'].search(
[('account_analytic_id', '=', rec.analytic_account_id.id),
('order_id.state', 'in', ['purchase'])]).mapped('order_id')
total_orders = sum(orders.mapped('amount_total'))
invoiced = self.env['account.move'].search(
[('purchase_id', 'in', orders.ids), ('state', 'not in', ['draft', 'cancel'])]).mapped('amount_total')
rec.confirm = (total_orders - sum(invoiced)) * -1
@api.depends('analytic_account_id')
def _compute_reserve(self):
for rec in self:
orders = self.env['purchase.order.line'].search(
[('account_analytic_id', '=', rec.analytic_account_id.id),
('order_id.state', 'in', ['draft', 'sent', 'to approve'])]).mapped('order_id')
total_orders = sum(orders.mapped('amount_total'))
rec.reserve = total_orders * -1
@api.depends('planned_amount', 'provide', 'pull_out')
def _compute_final_amount(self): def _compute_final_amount(self):
for rec in self:
rec.final_amount = rec.planned_amount + rec.provide + rec.pull_out
@api.depends('from_operation_ids')
def _compute_pull_out(self):
for line in self: for line in self:
line.final_amount = line.planned_amount + line.provide - line.pull_out pull_out = sum(op.amount + op.purchase_remind for op in
line.from_operation_ids.filtered(lambda x: x.state == 'confirmed') if
op.operation_type == 'transfer' or op.operation_type == 'decrease')
line.pull_out = pull_out if line.planned_amount < 0 else pull_out * -1
@api.depends('to_operation_ids')
def _compute_provide(self):
for line in self:
provide = sum(op.amount + op.purchase_remind for op in
line.to_operation_ids.filtered(lambda x: x.state == 'confirmed') if
op.operation_type == 'transfer' or op.operation_type == 'increase')
line.provide = provide * -1 if line.planned_amount < 0 else provide
@api.depends('to_operation_ids', 'from_operation_ids')
def _compute_remain(self):
for line in self:
remain_value = ((abs(line.final_amount) - abs(line.reserve) - abs(line.confirm) - abs(
line.practical_amount)) * -1)
line.remain = 0 if remain_value > 0 else remain_value
line.above_remain = remain_value if remain_value > 0 else 0
def get_year_end(self): def get_year_end(self):
for rec in self: for rec in self:
@ -85,69 +156,6 @@ class CrossoveredBudgetLines(models.Model):
} }
} }
@api.depends('from_operation_ids', 'to_operation_ids')
def _compute_operations_amount(self):
if not self.ids: return
for line in self:
pull_out = provide = budget_confirm_amount = purchase_remind = reserve_amount = 0.0
date_to = self.env.context.get('wizard_date_to') or line.date_to
date_from = self.env.context.get(
'wizard_date_from') or line.date_from
if line.analytic_account_id.id:
if 'reserved' not in self.env.context:
self.env.cr.execute("""
SELECT SUM(amount)
FROM budget_operations
WHERE from_budget_line_id=%s
AND (date between %s AND %s)
AND state='confirmed'""",
(line._origin.id, date_from, date_to,))
pull_out = self.env.cr.fetchone()[0] or 0.0
if 'reserved' in self.env.context:
self.env.cr.execute("""
SELECT SUM(amount)
FROM budget_operations
WHERE from_budget_line_id=%s
AND (date between %s AND %s)
AND state='confirmed'
AND from_reserved=%s""",
(line._origin.id, date_from, date_to, self.env.context['reserved']))
pull_out = self.env.cr.fetchone()[0] or 0.0
self.env.cr.execute("""
SELECT SUM(amount)
FROM budget_operations
WHERE to_budget_line_id=%s
AND (date between %s AND %s)
AND state='confirmed'""",
(line._origin.id, date_from, date_to,))
provide = self.env.cr.fetchone()[0] or 0.0
self.env.cr.execute("""
SELECT SUM(purchase_remind)
FROM budget_operations
WHERE to_budget_line_id=%s
AND (date between %s AND %s)
AND state='confirmed'""",
(line._origin.id, date_from, date_to,))
reserve_amount = self.env.cr.fetchone()[0] or 0.0
self.env.cr.execute("""
SELECT SUM(amount)
FROM budget_confirmation_line
WHERE budget_line_id=%s
AND (date between %s AND %s)
AND state='done'""",
(line._origin.id, date_from, date_to,))
budget_confirm_amount = self.env.cr.fetchone()[0] or 0.0
line.provide = provide
line.budget_confirm_amount = budget_confirm_amount
# line.remain = line.planned_amount + provide + line.pull_out - line.practical_amount + line.reserve + line.purchase_remain
line.remain = line.final_amount - line.practical_amount
@api.depends('analytic_account_id', 'planned_amount', 'practical_amount') @api.depends('analytic_account_id', 'planned_amount', 'practical_amount')
def name_get(self): def name_get(self):
result = [] result = []
@ -155,13 +163,7 @@ class CrossoveredBudgetLines(models.Model):
for line in self: for line in self:
name = '' name = ''
name += line.analytic_account_id and line.analytic_account_id.name or '' + ' ' + _('remaining') + ' ' name += line.analytic_account_id and line.analytic_account_id.name or '' + ' ' + _('remaining') + ' '
name += str(line.final_amount)
# check if reserved is needed
if self.env.context.get('reserved', False):
name += str(line.reserved_amount)
if not self.env.context.get('reserved', False):
name += str(line.remain)
result.append((line.id, name)) result.append((line.id, name))
return result return result
@ -215,20 +217,41 @@ class CrossoveredBudgetLines(models.Model):
def _check_amount(self, amount=0, purchase_remind=0, transfer=False): def _check_amount(self, amount=0, purchase_remind=0, transfer=False):
for obj in self: for obj in self:
if self.from_operation_ids.operation_type=='transfer' and self.from_operation_ids.purchase_remind>obj.final_amount:
raise ValidationError(_('''You can not take more than the remaining amount..'''))
# if obj.purchase_remain>
reserved_amount = obj.crossovered_budget_id.reserved_percent * \ reserved_amount = obj.crossovered_budget_id.reserved_percent * \
obj.planned_amount / 100.0 obj.planned_amount / 100.0
if obj.with_context({'reserved': True}).pull_out > reserved_amount: if obj.with_context({'reserved': True}).pull_out > reserved_amount:
raise ValidationError( raise ValidationError(
_('''You can not take more than the reserved amount.''')) _('''You can not take more than the reserved amount.'''))
if obj.planned_amount < 0:
if transfer and obj.purchase_remain != purchase_remind:
raise ValidationError(_('''You can not take more than the remaining amount..'''))
else:
if abs(obj.remain) < amount or obj.purchase_remain < purchase_remind: if transfer and abs(obj.remain) < abs(purchase_remind):
raise ValidationError( raise ValidationError(
_('''You can not take more than the remaining amount''')) _('''You can not take more than the remaining amount..'''))
if amount and amount > obj.remain:
raise ValidationError(
_('''You can not take more than the remaining amount..'''))
class ResPartner(models.Model):
_inherit = 'res.partner'
def action_view_sale_orders(self):
self.ensure_one()
sale_order_ids = self._get_sale_orders().ids
action = {
'res_model': 'sale.order',
'type': 'ir.actions.act_window',
}
if len(sale_order_ids) == 1:
action.update({
'view_mode': 'form',
'res_id': sale_order_ids[0],
})
else:
action.update({
'name': _('Sources Sale Orders %s', self.name),
'domain': [('id', 'in', sale_order_ids)],
'view_mode': 'tree,form',
})
return action

View File

@ -198,6 +198,11 @@ class BudgetConfirmationLine(models.Model):
description = fields.Text( description = fields.Text(
string='Description' string='Description'
) )
crossovered_budget_id = fields.Many2one(
comodel_name='crossovered.budget',
string='Budget',
related='budget_line_id.crossovered_budget_id',
)
def check_budget(self): def check_budget(self):
""" """
@ -245,4 +250,8 @@ class RejectWizard(models.TransientModel):
raise ValidationError(_('Sorry This object have no field named Selection Reason')) raise ValidationError(_('Sorry This object have no field named Selection Reason'))
else: else:
origin_rec.write({'reject_reason': self.reject_reason}) origin_rec.write({'reject_reason': self.reject_reason})
if origin_rec.po_id:
origin_rec.po_id.message_post(body=self.reject_reason)
if origin_rec.invoice_id:
origin_rec.invoice_id.message_post(body=self.reject_reason)
return origin_rec.with_context({'reject_reason': self.reject_reason}).cancel() return origin_rec.with_context({'reject_reason': self.reject_reason}).cancel()

View File

@ -20,21 +20,21 @@ class BudgetOperations(models.Model):
name = fields.Char(string='Name', default='/') name = fields.Char(string='Name', default='/')
department_id = fields.Many2one(comodel_name='hr.department', string='Department') department_id = fields.Many2one(comodel_name='hr.department', string='Department')
from_crossovered_budget_id = fields.Many2one(comodel_name='crossovered.budget', string='Budget', tracking=True) from_crossovered_budget_id = fields.Many2one(comodel_name='crossovered.budget', string='Budget', tracking=True,copy=False)
from_budget_line_id = fields.Many2one(comodel_name='crossovered.budget.lines', string='Cost Center', tracking=True) from_budget_line_id = fields.Many2one(comodel_name='crossovered.budget.lines', string='Cost Center', tracking=True,copy=False)
to_crossovered_budget_id = fields.Many2one(comodel_name='crossovered.budget', string='Budget', tracking=True) to_crossovered_budget_id = fields.Many2one(comodel_name='crossovered.budget', string='Budget', tracking=True,copy=False)
to_budget_line_id = fields.Many2one(comodel_name='crossovered.budget.lines', string='Cost Center', tracking=True) to_budget_line_id = fields.Many2one(comodel_name='crossovered.budget.lines', string='Cost Center', tracking=True,copy=False)
amount = fields.Monetary(string='Amount', tracking=True) amount = fields.Monetary(string='Amount', tracking=True)
currency_id = fields.Many2one(comodel_name='res.currency', string='Currency', readonly=True, required=True, currency_id = fields.Many2one(comodel_name='res.currency', string='Currency', readonly=True, required=True,
default=lambda self: self.env.user.company_id.currency_id.id) default=lambda self: self.env.user.company_id.currency_id.id)
state = fields.Selection(selection=[('draft', 'Draft'), ('confirmed', 'Confirmed')], state = fields.Selection(selection=[('draft', 'Draft'), ('confirmed', 'Confirmed')],
default='draft', string='Status', readonly=True, tracking=True) default='draft', string='Status', readonly=True, tracking=True,copy=False)
type = fields.Selection(selection=[('unlock', 'Unlock'), ('transfer', 'Transfer')], default='transfer', type = fields.Selection(selection=[('unlock', 'Unlock'), ('transfer', 'Transfer')], default='transfer',
string='type', readonly=True, tracking=True) string='type', readonly=True, tracking=True)
date = fields.Date() date = fields.Date()
from_reserved = fields.Boolean(string='Reserve?', tracking=True) from_reserved = fields.Boolean(string='Reserve?', tracking=True,copy=False)
from_budget_post_id = fields.Many2one(comodel_name='account.budget.post', string='Budget Post', tracking=True) from_budget_post_id = fields.Many2one(comodel_name='account.budget.post', string='Budget Post', tracking=True,copy=False)
to_budget_post_id = fields.Many2one(comodel_name='account.budget.post', string='Budget Post', tracking=True) to_budget_post_id = fields.Many2one(comodel_name='account.budget.post', string='Budget Post', tracking=True,copy=False)
operation_type = fields.Selection( operation_type = fields.Selection(
selection=[('transfer', 'Transfer'), ('increase', 'Increase'), ('decrease', 'Decrease')], selection=[('transfer', 'Transfer'), ('increase', 'Increase'), ('decrease', 'Decrease')],
default='transfer', string='Operation Type', required=True, tracking=True) default='transfer', string='Operation Type', required=True, tracking=True)
@ -68,6 +68,18 @@ class BudgetOperations(models.Model):
self.from_budget_post_id = False self.from_budget_post_id = False
self.from_reserved = False self.from_reserved = False
@api.onchange('from_crossovered_budget_id', 'to_crossovered_budget_id', 'date')
def _onchange_budget_check_period(self):
if self.from_crossovered_budget_id and self.date:
if self.from_crossovered_budget_id.date_from > self.date or self.from_crossovered_budget_id.date_to < self.date:
raise ValidationError(
_('The date must be between the budget %s post period') % (self.from_crossovered_budget_id.name))
if self.to_crossovered_budget_id and self.date:
if self.to_crossovered_budget_id.date_from > self.date or self.to_crossovered_budget_id.date_to < self.date:
raise ValidationError(
_('The date must be between the budget %s post period') % (self.from_crossovered_budget_id.name))
@api.onchange('from_budget_post_id') @api.onchange('from_budget_post_id')
def _onchange_from_budget_post(self): def _onchange_from_budget_post(self):
domain = [('id', 'in', [])] domain = [('id', 'in', [])]
@ -86,7 +98,7 @@ class BudgetOperations(models.Model):
if self.to_budget_post_id: if self.to_budget_post_id:
budget_line_obj = self.env['crossovered.budget.lines'] budget_line_obj = self.env['crossovered.budget.lines']
search_domain = [('general_budget_id', '=', self.to_budget_post_id.id)] search_domain = [('general_budget_id', '=', self.to_budget_post_id.id)]
if self.operation_type == 'transfer' and self.from_crossovered_budget_id: if self.operation_type == 'transfer' and self.from_crossovered_budget_id.date_to:
search_domain += [('date_to', '>', str(self.from_crossovered_budget_id.date_to))] search_domain += [('date_to', '>', str(self.from_crossovered_budget_id.date_to))]
budget_line = budget_line_obj.search(search_domain) budget_line = budget_line_obj.search(search_domain)
domain = [('id', 'in', budget_line.mapped('crossovered_budget_id').ids)] domain = [('id', 'in', budget_line.mapped('crossovered_budget_id').ids)]
@ -118,25 +130,26 @@ class BudgetOperations(models.Model):
self.state = 'draft' self.state = 'draft'
def confirm(self): def confirm(self):
""" if self.from_crossovered_budget_id and self.date and self.operation_type in ['transfer', 'decrease']:
""" if self.from_crossovered_budget_id.date_from > self.date or self.from_crossovered_budget_id.date_to < self.date:
if self.date and self.to_crossovered_budget_id: raise ValidationError(
_('The date must be between the budget %s post period') % (self.from_crossovered_budget_id.name))
budget_start_date = self.to_crossovered_budget_id.date_from if self.to_crossovered_budget_id and self.date and self.operation_type in ['transfer', 'increase']:
budget_end_date = self.to_crossovered_budget_id.date_to if self.to_crossovered_budget_id.date_from > self.date or self.to_crossovered_budget_id.date_to < self.date:
raise ValidationError(
_('The date must be between the budget %s post period') % (self.from_crossovered_budget_id.name))
if self.to_crossovered_budget_id.state != 'done' and self.operation_type in ['transfer', 'increase']:
if self.date < budget_start_date or self.date > budget_end_date:
raise ValidationError(_('The operation date must be within the budget duration.'))
if self.to_crossovered_budget_id and self.to_crossovered_budget_id.state != 'done':
raise ValidationError( raise ValidationError(
_('You can transfer to approved budget only')) _('You can transfer to approved budget only'))
self.to_budget_line_id.pull_out = self.purchase_remind
transfer = True if self.operation_type == 'transfer' else False if self.from_crossovered_budget_id.state != 'done' and self.operation_type in ['transfer', 'decrease']:
self.from_budget_line_id._check_amount(self.amount, self.purchase_remind, transfer) raise ValidationError(
# self.from_budget_line_id.is_transfered = True _('You can transfer to approved budget only'))
if self.type == 'unlock':
self.from_reserved = True if self.operation_type=='transfer':
self.to_crossovered_budget_id = self.from_crossovered_budget_id.id if abs(self.from_budget_line_id.final_amount) < abs(self.purchase_remind):
self.to_budget_line_id = self.from_budget_line_id.id raise ValidationError(
_('The amount must be less than or equal to the budget line final amount'))
self.state = 'confirmed' self.state = 'confirmed'

View File

View File

View File

View File

@ -3,14 +3,14 @@
<data> <data>
<record id="group_budget_user" model="res.groups"> <record id="group_budget_user" model="res.groups">
<field name="name">Budget User</field> <field name="name">Budget User</field>
<!-- <field name="category_id" ref="base.module_category_accounting_and_finance"/>--> <field name="category_id" ref="base.module_category_accounting_and_finance"/>
<field name="implied_ids" eval="[(4, ref('analytic.group_analytic_accounting')), <field name="implied_ids" eval="[(4, ref('analytic.group_analytic_accounting')),
(4, ref('account.group_account_user'))]"/> (4, ref('account.group_account_user'))]"/>
</record> </record>
<record id="group_department_manager_budget" model="res.groups"> <record id="group_department_manager_budget" model="res.groups">
<field name="name">Budget Department Manager</field> <field name="name">Budget Department Manager</field>
<!-- <field name="category_id" ref="base.module_category_accounting_and_finance"/>--> <field name="category_id" ref="base.module_category_accounting_and_finance"/>
<field name="implied_ids" eval="[(4, ref('account_budget_custom.group_budget_user'))]"/> <field name="implied_ids" eval="[(4, ref('account_budget_custom.group_budget_user'))]"/>
<!-- <field name="implied_ids" eval="[(4, ref('analytic.group_analytic_accounting')),(4, ref('account.group_account_user'))]"/> --> <!-- <field name="implied_ids" eval="[(4, ref('analytic.group_analytic_accounting')),(4, ref('account.group_account_user'))]"/> -->
@ -18,7 +18,7 @@
<record id="group_manager_budget" model="res.groups"> <record id="group_manager_budget" model="res.groups">
<field name="name">Budget Executive Director</field> <field name="name">Budget Executive Director</field>
<!-- <field name="category_id" ref="base.module_category_accounting_and_finance"/>--> <field name="category_id" ref="base.module_category_accounting_and_finance"/>
<field name="implied_ids" eval="[(4, ref('account_budget_custom.group_budget_user'))]"/> <field name="implied_ids" eval="[(4, ref('account_budget_custom.group_budget_user'))]"/>
</record> </record>

View File

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

View File

View File

@ -23,21 +23,41 @@
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='date_to']" position="attributes"> <xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='date_to']" position="attributes">
<attribute name="invisible">1</attribute> <attribute name="invisible">1</attribute>
</xpath> </xpath>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='analytic_account_id']"
position="attributes">
<attribute name="optional">show</attribute>
</xpath>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='planned_amount']"
position="attributes">
<attribute name="optional">show</attribute>
</xpath>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='practical_amount']"
position="attributes">
<attribute name="optional">show</attribute>
</xpath>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='theoritical_amount']"
position="attributes">
<attribute name="optional">show</attribute>
</xpath>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='percentage']" position="attributes">
<attribute name="optional">show</attribute>
</xpath>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='general_budget_id']"
position="attributes">
<attribute name="optional">show</attribute>
</xpath>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='paid_date']" position="replace"/> <xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='paid_date']" position="replace"/>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='planned_amount']" position="after"> <xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='planned_amount']" position="after">
<field name="provide" readonly="1" sum="Provided Amount" widget="monetary"/> <field name="provide" readonly="1" sum="Provided Amount" widget="monetary" optional="show"/>
<field name="pull_out" readonly="1" sum="Pull Out Amount" widget="monetary" optional="show"/>
<field name="pull_out" readonly="1" sum="Pull Out Amount" widget="monetary"/> <field name="final_amount" readonly="1" sum="Final Amount" widget="monetary" optional="show"
<field name="final_amount" readonly="1" sum="Final Amount" widget="monetary"/> string="مبلغ نهائي"/>
<field name="reserve" readonly="1" sum="Reserve Amount" widget="monetary"/>
<!--field name="reserved_amount" readonly="1" sum="Reserved Amount" widget="monetary"/-->
</xpath> </xpath>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='theoritical_amount']" <xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='theoritical_amount']"
position="after"> position="after">
<field name="purchase_remain" widget="monetary"/> <field name="purchase_remain" widget="monetary" optional="show" invisible="1"/>
<field name="remain" readonly="1" sum="Remain Amount" widget="monetary"/> <field name="remain" readonly="1" sum="Remain Amount" widget="monetary" optional="show"/>
<field name="above_remain" readonly="1" sum="Exceed Amount" widget="monetary" optional="show"/>
</xpath> </xpath>
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='percentage']" position="after"> <xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='percentage']" position="after">
<button <button
@ -45,6 +65,7 @@
type="object" type="object"
string="Transfer" string="Transfer"
class="oe_highlight" attrs="{'invisible':[('year_end', '=',False)]}" class="oe_highlight" attrs="{'invisible':[('year_end', '=',False)]}"
optional="show"
/> />
<field name="crossovered_budget_state" invisible="1"/> <field name="crossovered_budget_state" invisible="1"/>
<field name="year_end" invisible="1"/> <field name="year_end" invisible="1"/>
@ -64,6 +85,9 @@
<field name="date_from" type="col"/> <field name="date_from" type="col"/>
<field name="date_to" type="col"/> <field name="date_to" type="col"/>
<field name="planned_amount" type="measure"/> <field name="planned_amount" type="measure"/>
<field name="provide" type="measure"/>
<field name="pull_out" type="measure"/>
<field name="final_amount" type="measure"/>
<field name="practical_amount" type="measure"/> <field name="practical_amount" type="measure"/>
<field name="theoritical_amount" type="measure"/> <field name="theoritical_amount" type="measure"/>
<field name="percentage" type="measure"/> <field name="percentage" type="measure"/>
@ -79,7 +103,12 @@
<field name="crossovered_budget_id"/> <field name="crossovered_budget_id"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" type="row"/> <field name="analytic_account_id" groups="analytic.group_analytic_accounting" type="row"/>
<field name="planned_amount" type="measure"/> <field name="planned_amount" type="measure"/>
<field name="provide" type="measure"/>
<field name="pull_out" type="measure"/>
<field name="final_amount" type="measure"/>
<field name="practical_amount" type="measure"/> <field name="practical_amount" type="measure"/>
<field name="theoritical_amount" type="measure"/>
<field name="percentage" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
@ -92,17 +121,17 @@
<xpath expr="//tree" position="replace"> <xpath expr="//tree" position="replace">
<tree string="Budget Lines"> <tree string="Budget Lines">
<field name="crossovered_budget_id" invisible="1"/> <field name="crossovered_budget_id" invisible="1"/>
<field name="general_budget_id"/> <field name="general_budget_id" optional="show"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/> <field name="analytic_account_id" groups="analytic.group_analytic_accounting" optional="show"/>
<field name="date_from"/> <field name="planned_amount" optional="show"/>
<field name="date_to"/> <field name="provide" optional="show"/>
<field name="paid_date" groups="base.group_no_one"/> <field name="pull_out" optional="show"/>
<field name="planned_amount" widget="monetary"/> <field name="final_amount" optional="show"/>
<field name="provide" readonly="1" sum="Provided Amount" widget="monetary"/> <field name="practical_amount" optional="show"/>
<field name="pull_out" readonly="1" sum="Pull Out Amount" widget="monetary"/> <field name="theoritical_amount" optional="show"/>
<field name="practical_amount" widget="monetary"/> <field name="remain" optional="show"/>
<field name="remain" readonly="1" sum="Remain Amount" widget="monetary"/> <field name="above_remain" optional="show"/>
<field name="percentage"/> <field name="percentage" optional="show"/>
</tree> </tree>
</xpath> </xpath>
</field> </field>

View File

@ -52,7 +52,6 @@
<tree string="Budget Confirmations" create="0" delete="0"> <tree string="Budget Confirmations" create="0" delete="0">
<field name="name"/> <field name="name"/>
<field name="date"/> <field name="date"/>
<field name="date"/>
<field name="beneficiary_id"/> <field name="beneficiary_id"/>
<field name="department_id"/> <field name="department_id"/>
<field name="total_amount"/> <field name="total_amount"/>
@ -105,6 +104,7 @@
<field name="type"/> <field name="type"/>
<field name="ref" attrs="{'readonly':[('type','!=','purchase.order')]}"/> <field name="ref" attrs="{'readonly':[('type','!=','purchase.order')]}"/>
<field name="description" attrs="{'readonly':[('type','!=','purchase.order')]}"/> <field name="description" attrs="{'readonly':[('type','!=','purchase.order')]}"/>
</group> </group>
</group> </group>
<notebook> <notebook>
@ -115,13 +115,14 @@
<field name="lines_ids" readonly="1" <field name="lines_ids" readonly="1"
options="{'no_create': True, 'no_open': True}"> options="{'no_create': True, 'no_open': True}">
<tree editable="top"> <tree editable="top">
<field name="account_id"/> <field name="crossovered_budget_id" readonly="1"/>
<field name="analytic_account_id"/> <field name="account_id" optional="show"/>
<field name="remain"/> <field name="analytic_account_id" optional="show"/>
<field name="remain" optional="show"/>
<field name="amount"/> <field name="amount" optional="show"/>
<field name="new_balance"/> <field name="new_balance" optional="show"/>
<field name="description"/> <field name="description" optional="show"/>
</tree> </tree>
</field> </field>
</page> </page>

View File

@ -61,7 +61,7 @@
<group> <group>
<field name="date" attrs="{'readonly':[('state','!=','draft')]}" required="1"/> <field name="date" attrs="{'readonly':[('state','!=','draft')]}" required="1"/>
<field name="amount" attrs="{'readonly':[('state','!=','draft')],'invisible':[('operation_type','=','transfer')]}"/> <field name="amount" attrs="{'readonly':[('state','!=','draft')],'invisible':[('operation_type','=','transfer')]}"/>
<field name="purchase_remind" attrs="{'readonly':[('state','!=','draft')]}"/> <field name="purchase_remind" attrs="{'invisible':[('operation_type','!=','transfer')]}" string="Amount"/>
</group> </group>
</group> </group>
<group> <group>

View File

@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 14.0\n" "Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-28 11:05+0000\n" "POT-Creation-Date: 2024-06-26 18:16+0000\n"
"PO-Revision-Date: 2022-07-28 11:05+0000\n" "PO-Revision-Date: 2024-06-26 18:16+0000\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -21,28 +21,27 @@ msgid "Analytic Account"
msgstr "الحساب التحليلي" msgstr "الحساب التحليلي"
#. module: exp_budget_check #. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__budget_approve #: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__budget_approve
#, python-format #: model:ir.model.fields.selection,name:exp_budget_check.selection__hr_expense__state__budget_approve
msgid "Approved" msgid "Approved"
msgstr "موافقة" msgstr "موافقة"
#. module: exp_budget_check #. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0 #: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account__is_auto_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__budget_check #: model:ir.model.fields,field_description:exp_budget_check.field_grant_project__is_auto_check
#, python-format msgid "Auto Check"
msgid "Budget Check" msgstr ""
msgstr "فحص الموازنة"
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model,name:exp_budget_check.model_budget_confirmation #: model:ir.model,name:exp_budget_check.model_budget_confirmation
#: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form
msgid "Budget Confirmation" msgid "Budget Confirmation"
msgstr "تصديق الموازنة" msgstr "تعميد الموازنة"
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model,name:exp_budget_check.model_crossovered_budget_lines #: model:ir.model,name:exp_budget_check.model_crossovered_budget_lines
msgid "Budget Line" msgid "Budget Line"
msgstr "خط الموازنة" msgstr "بند الموازنة"
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__cancel #: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__cancel
@ -54,10 +53,13 @@ msgstr "ملغي"
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__budget_check #: model:ir.model.fields,field_description:exp_budget_check.field_account_move__budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__budget_check #: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__budget_check
#: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form #: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form
#: model_terms:ir.ui.view,arch_db:exp_budget_check.hr_expense_view_form_inherit
msgid "Check Budget" msgid "Check Budget"
msgstr "فحص الموازنة" msgstr "فحص الموازنة"
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__confirm
#: model:ir.model.fields.selection,name:exp_budget_check.selection__hr_expense__state__confirm
#: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form #: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form
msgid "Confirm" msgid "Confirm"
msgstr "تأكيد" msgstr "تأكيد"
@ -66,7 +68,7 @@ msgstr "تأكيد"
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__confirm #: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__confirm
#: model_terms:ir.ui.view,arch_db:exp_budget_check.crossovered_budget_view_form_inherit #: model_terms:ir.ui.view,arch_db:exp_budget_check.crossovered_budget_view_form_inherit
msgid "Confirm Amount" msgid "Confirm Amount"
msgstr "المبلغ المصدق" msgstr "المبلغ التعميد"
#. module: exp_budget_check #. module: exp_budget_check
#: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form #: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form
@ -79,6 +81,7 @@ msgstr "تأكيد الفاتورة"
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line__display_name #: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line__display_name
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__display_name #: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__display_name
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__display_name #: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__display_name
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__display_name
msgid "Display Name" msgid "Display Name"
msgstr "الاسم المعروض" msgstr "الاسم المعروض"
@ -94,12 +97,33 @@ msgstr "مسودة"
msgid "Exceed Budget" msgid "Exceed Budget"
msgstr "تخطي الموازنة" msgstr "تخطي الموازنة"
#. module: exp_budget_check
#: model:ir.model,name:exp_budget_check.model_hr_expense
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__expense_id
#: model:ir.model.fields.selection,name:exp_budget_check.selection__budget_confirmation__type__expense
msgid "Expense"
msgstr "المصروف"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "Expense :%s"
msgstr ""
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__hide_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__hide_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__hide_budget
msgid "Hide Budget"
msgstr ""
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account__id #: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account__id
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__id #: model:ir.model.fields,field_description:exp_budget_check.field_account_move__id
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line__id #: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line__id
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__id #: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__id
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__id #: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__id
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__id
msgid "ID" msgid "ID"
msgstr "المُعرف" msgstr "المُعرف"
@ -112,6 +136,7 @@ msgstr ""
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__is_approve #: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__is_approve
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__is_approve #: model:ir.model.fields,field_description:exp_budget_check.field_account_move__is_approve
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__is_approve #: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__is_approve
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__is_approve
msgid "Is Approve" msgid "Is Approve"
msgstr "" msgstr ""
@ -126,18 +151,14 @@ msgstr ""
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__is_check #: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__is_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__is_check #: model:ir.model.fields,field_description:exp_budget_check.field_account_move__is_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__is_check #: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__is_check
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__is_check
msgid "Is Check" msgid "Is Check"
msgstr "" msgstr ""
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__is_reject
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__is_reject
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__is_reject
msgid "Is Reject"
msgstr ""
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account__is_analytic_budget #: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account__is_analytic_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_grant_project__is_analytic_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__is_budget
msgid "Is Use In Budget" msgid "Is Use In Budget"
msgstr "يستخدم في الموازنة" msgstr "يستخدم في الموازنة"
@ -157,9 +178,22 @@ msgstr "عنصر اليومية"
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line____last_update #: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line____last_update
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation____last_update #: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation____last_update
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines____last_update #: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines____last_update
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense____last_update
msgid "Last Modified on" msgid "Last Modified on"
msgstr "آخر تعديل في" msgstr "آخر تعديل في"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "New Expense Report"
msgstr ""
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "Please Check Budget First"
msgstr ""
#. module: exp_budget_check #. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0 #: code:addons/exp_budget_check/models/account_invoice.py:0
#, python-format #, python-format
@ -169,8 +203,8 @@ msgstr "الرجاء إختيار حسابات تحليلية لهذه الفا
#. module: exp_budget_check #. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0 #: code:addons/exp_budget_check/models/account_invoice.py:0
#, python-format #, python-format
msgid "Please Set An Expense Account For Product %s" msgid "Please insert Bill Date"
msgstr "الرجاء إختيار حساب للمنتج%s" msgstr "الرجاء إدخال تاريخ الفاتورة"
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__posted #: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__posted
@ -178,11 +212,11 @@ msgid "Posted"
msgstr "مُرحل" msgstr "مُرحل"
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__reject #: code:addons/exp_budget_check/models/account_invoice.py:0
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__reject #: code:addons/exp_budget_check/models/hr_expense.py:0
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__reject #, python-format
msgid "Reject" msgid "Rejected By : %s With Reject Reason : %s"
msgstr "رفض" msgstr "تم الرقض بواسطة %s . مع سبب الرقض : %s"
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__reserve #: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__reserve
@ -202,19 +236,39 @@ msgstr "المبلغ المحجوز"
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state_a #: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state_a
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state_b #: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state_b
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state_bill #: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state_bill
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__state
msgid "Status" msgid "Status"
msgstr "الحالة" msgstr "الحالة"
#. module: exp_budget_check
#: model:ir.model.fields,help:exp_budget_check.field_hr_expense__state
msgid "Status of the expense."
msgstr "حالة المصروف."
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line__price_tax #: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line__price_tax
msgid "Tax" msgid "Tax"
msgstr "ضريبة" msgstr "ضريبة"
#. module: exp_budget_check #. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0 #: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format #, python-format
msgid "The Budget Has Been Rejected" msgid "The Budget Confirmation Doesn't Approve yet"
msgstr "تم رفض الموازنة لهذه الفاتورة" msgstr ""
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_budget.py:0
#: model:ir.model.fields,help:exp_budget_check.field_crossovered_budget_lines__confirm
#, python-format
msgid "Total amount of confirmed purchase orders"
msgstr "المبلغ التعميد : هو عبارة قيمة التعميد ( أوامر الشراء)"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_budget.py:0
#: model:ir.model.fields,help:exp_budget_check.field_crossovered_budget_lines__reserve
#, python-format
msgid "Total amount of reserved purchase orders"
msgstr "المبلغ المحجوز وهو عبارة عن طلبات عروض الأسعار تم الموافقة عليها من الموازنة ( ارتباط مبدئى)"
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__budget_confirmation__type__vendor_bill #: model:ir.model.fields.selection,name:exp_budget_check.selection__budget_confirmation__type__vendor_bill
@ -228,39 +282,18 @@ msgid "Vendor Bill :%s"
msgstr "فاتورة المورد :%s" msgstr "فاتورة المورد :%s"
#. module: exp_budget_check #. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__wait_budget #: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__wait_budget
#, python-format #: model:ir.model.fields.selection,name:exp_budget_check.selection__hr_expense__state__wait_budget
msgid "Wait Budget" msgid "Wait Budget"
msgstr "إنتظار تحقق الموازنة" msgstr "إنتظار تحقق الموازنة"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "analytic account is %s not link with budget"
msgstr ""
#. module: exp_budget_check #. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__type #: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__type
msgid "type" msgid "type"
msgstr "النوع" msgstr "النوع"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0
#, python-format
msgid "analytic account is %s not link with budget"
msgstr "الحساب التحليلي %s ليس له موازنة"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0
#, python-format
msgid "Rejected By : %s With Reject Reason : %s"
msgstr "تم الرقض بواسطة %s . مع سبب الرقض : %s"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0
#, python-format
msgid "Please insert Bill Date"
msgstr "الرجاء إدخال تاريخ الفاتورة"
#. module: account_budget_custom
#: code:addons/account_budget_custom/models/budget_confirmation.py:0
#, python-format
msgid "Specify Reject Reason"
msgstr "تحديد سبب الرفض"

View File

@ -0,0 +1,299 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * exp_budget_check
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-06-26 18:16+0000\n"
"PO-Revision-Date: 2024-06-26 18:16+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: exp_budget_check
#: model:ir.model,name:exp_budget_check.model_account_analytic_account
msgid "Analytic Account"
msgstr "الحساب التحليلي"
#. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__budget_approve
#: model:ir.model.fields.selection,name:exp_budget_check.selection__hr_expense__state__budget_approve
msgid "Approved"
msgstr "موافقة"
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account__is_auto_check
#: model:ir.model.fields,field_description:exp_budget_check.field_grant_project__is_auto_check
msgid "Auto Check"
msgstr ""
#. module: exp_budget_check
#: model:ir.model,name:exp_budget_check.model_budget_confirmation
#: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form
msgid "Budget Confirmation"
msgstr "تعميد الموازنة"
#. module: exp_budget_check
#: model:ir.model,name:exp_budget_check.model_crossovered_budget_lines
msgid "Budget Line"
msgstr "بند الموازنة"
#. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__cancel
msgid "Cancelled"
msgstr "ملغي"
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__budget_check
#: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form
#: model_terms:ir.ui.view,arch_db:exp_budget_check.hr_expense_view_form_inherit
msgid "Check Budget"
msgstr "فحص الموازنة"
#. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__confirm
#: model:ir.model.fields.selection,name:exp_budget_check.selection__hr_expense__state__confirm
#: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form
msgid "Confirm"
msgstr "تأكيد"
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__confirm
#: model_terms:ir.ui.view,arch_db:exp_budget_check.crossovered_budget_view_form_inherit
msgid "Confirm Amount"
msgstr "المبلغ التعميد"
#. module: exp_budget_check
#: model_terms:ir.ui.view,arch_db:exp_budget_check.budget_check_view_move_form
msgid "Confirm Bill"
msgstr "تأكيد الفاتورة"
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account__display_name
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__display_name
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line__display_name
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__display_name
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__display_name
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__display_name
msgid "Display Name"
msgstr "الاسم المعروض"
#. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__draft
msgid "Draft"
msgstr "مسودة"
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__exceed_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__exceed_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__exceed_budget
msgid "Exceed Budget"
msgstr "تخطي الموازنة"
#. module: exp_budget_check
#: model:ir.model,name:exp_budget_check.model_hr_expense
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__expense_id
#: model:ir.model.fields.selection,name:exp_budget_check.selection__budget_confirmation__type__expense
msgid "Expense"
msgstr "المصروف"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "Expense :%s"
msgstr ""
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__hide_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__hide_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__hide_budget
msgid "Hide Budget"
msgstr ""
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account__id
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__id
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line__id
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__id
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__id
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__id
msgid "ID"
msgstr "المُعرف"
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__invoice_id
msgid "Invoice"
msgstr ""
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__is_approve
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__is_approve
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__is_approve
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__is_approve
msgid "Is Approve"
msgstr ""
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__is_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__is_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__is_budget
msgid "Is Budget"
msgstr ""
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__is_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__is_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__is_check
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__is_check
msgid "Is Check"
msgstr ""
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account__is_analytic_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_grant_project__is_analytic_budget
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__is_budget
msgid "Is Use In Budget"
msgstr "يستخدم في الموازنة"
#. module: exp_budget_check
#: model:ir.model,name:exp_budget_check.model_account_move
msgid "Journal Entry"
msgstr "قيد اليومية"
#. module: exp_budget_check
#: model:ir.model,name:exp_budget_check.model_account_move_line
msgid "Journal Item"
msgstr "عنصر اليومية"
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_analytic_account____last_update
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move____last_update
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line____last_update
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation____last_update
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines____last_update
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense____last_update
msgid "Last Modified on"
msgstr "آخر تعديل في"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "New Expense Report"
msgstr ""
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "Please Check Budget First"
msgstr ""
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0
#, python-format
msgid "Please Choose Analytic account for This Bill"
msgstr "الرجاء إختيار حسابات تحليلية لهذه الفاتورة"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0
#, python-format
msgid "Please insert Bill Date"
msgstr "الرجاء إدخال تاريخ الفاتورة"
#. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__posted
msgid "Posted"
msgstr "مُرحل"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "Rejected By : %s With Reject Reason : %s"
msgstr "تم الرقض بواسطة %s . مع سبب الرقض : %s"
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_crossovered_budget_lines__reserve
#: model_terms:ir.ui.view,arch_db:exp_budget_check.crossovered_budget_view_form_inherit
msgid "Reserve Amount"
msgstr "المبلغ المحجوز"
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__state_a
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__state_b
#: model:ir.model.fields,field_description:exp_budget_check.field_account_bank_statement_line__state_bill
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__state
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__state_a
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__state_b
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move__state_bill
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state_a
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state_b
#: model:ir.model.fields,field_description:exp_budget_check.field_account_payment__state_bill
#: model:ir.model.fields,field_description:exp_budget_check.field_hr_expense__state
msgid "Status"
msgstr "الحالة"
#. module: exp_budget_check
#: model:ir.model.fields,help:exp_budget_check.field_hr_expense__state
msgid "Status of the expense."
msgstr "حالة المصروف."
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_account_move_line__price_tax
msgid "Tax"
msgstr "ضريبة"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "The Budget Confirmation Doesn't Approve yet"
msgstr ""
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_budget.py:0
#: model:ir.model.fields,help:exp_budget_check.field_crossovered_budget_lines__confirm
#, python-format
msgid "Total amount of confirmed purchase orders"
msgstr "المبلغ التعميد : هو عبارة قيمة التعميد ( أوامر الشراء)"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_budget.py:0
#: model:ir.model.fields,help:exp_budget_check.field_crossovered_budget_lines__reserve
#, python-format
msgid "Total amount of reserved purchase orders"
msgstr "المبلغ المحجوز وهو عبارة عن طلبات عروض الأسعار تم الموافقة عليها من الموازنة ( ارتباط مبدئى)"
#. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__budget_confirmation__type__vendor_bill
msgid "Vendor Bill"
msgstr "فاتورة مورد"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/account_invoice.py:0
#, python-format
msgid "Vendor Bill :%s"
msgstr "فاتورة المورد :%s"
#. module: exp_budget_check
#: model:ir.model.fields.selection,name:exp_budget_check.selection__account_move__state__wait_budget
#: model:ir.model.fields.selection,name:exp_budget_check.selection__hr_expense__state__wait_budget
msgid "Wait Budget"
msgstr "إنتظار تحقق الموازنة"
#. module: exp_budget_check
#: code:addons/exp_budget_check/models/hr_expense.py:0
#, python-format
msgid "analytic account is %s not link with budget"
msgstr ""
#. module: exp_budget_check
#: model:ir.model.fields,field_description:exp_budget_check.field_budget_confirmation__type
msgid "type"
msgstr "النوع"

View File

@ -4,8 +4,30 @@ from odoo import api, fields, models, _
class CrossoveredBudgetLines(models.Model): class CrossoveredBudgetLines(models.Model):
_inherit = "crossovered.budget.lines" _inherit = "crossovered.budget.lines"
reserve = fields.Float(string='Reserve Amount') reserve = fields.Float(string='Reserve Amount', compute='_compute_reserve',
confirm = fields.Float(string='Confirm Amount') help=_('Total amount of reserved purchase orders'))
confirm = fields.Float(string='Confirm Amount', compute='_compute_confirm',
help=_('Total amount of confirmed purchase orders'))
@api.depends('analytic_account_id')
def _compute_confirm(self):
for rec in self:
orders = self.env['purchase.order.line'].search(
[('account_analytic_id', '=', rec.analytic_account_id.id),
('order_id.state', 'in', ['purchase'])]).mapped('order_id')
total_orders = sum(orders.mapped('amount_total'))
invoiced = self.env['account.move'].search(
[('purchase_id', 'in', orders.ids), ('state', 'not in', ['draft', 'cancel'])]).mapped('amount_total')
rec.confirm = (total_orders - sum(invoiced)) * -1
@api.depends('analytic_account_id')
def _compute_reserve(self):
for rec in self:
orders = self.env['purchase.order.line'].search(
[('account_analytic_id', '=', rec.analytic_account_id.id),
('order_id.state', 'in', ['draft', 'sent', 'to approve'])]).mapped('order_id')
total_orders = sum(orders.mapped('amount_total'))
rec.reserve = total_orders * -1
def _compute_operations_amount(self): def _compute_operations_amount(self):
if not self.ids: return if not self.ids: return
@ -58,7 +80,3 @@ class CrossoveredBudgetLines(models.Model):
line.pull_out = abs(pull_out) line.pull_out = abs(pull_out)
line.provide = abs(provide) line.provide = abs(provide)
line.budget_confirm_amount = budget_confirm_amount line.budget_confirm_amount = budget_confirm_amount
line.remain = abs(line.planned_amount) + provide - abs(pull_out) - abs(line.practical_amount) - abs(
line.reserved_amount) + line.reserve
if line.planned_amount < 0:
line.remain = -line.remain

View File

@ -14,7 +14,7 @@ class BudgetConfirmationCustom(models.Model):
if self.invoice_id and self.type == 'vendor.bill': if self.invoice_id and self.type == 'vendor.bill':
self.invoice_id.write({'state': 'draft'}) self.invoice_id.write({'state': 'draft'})
self.invoice_id.message_post(body=_( self.invoice_id.message_post(body=_(
"Rejected By : %s With Reject Reason : %s" % (str(self.env.user.name), str(self.reject_reason)))) "Rejected By : %s With Reject Reason : %s" % (str(self.env.user.name), str(self.reject_reason or self.env.context.get('reject_reason','')))))
def done(self): def done(self):
super(BudgetConfirmationCustom, self).done() super(BudgetConfirmationCustom, self).done()
@ -30,6 +30,8 @@ class BudgetConfirmationCustom(models.Model):
lambda x: x.general_budget_id in budget_post and lambda x: x.general_budget_id in budget_post and
x.crossovered_budget_id.state == 'done' and x.crossovered_budget_id.state == 'done' and
x.date_from <= self.date <= x.date_to) x.date_from <= self.date <= x.date_to)
if len(budget_lines) > 1:
budget_lines = budget_lines[0]
print("budget_lines.reserve budget_lines.reserve budget_lines.reserve", budget_lines.reserve) print("budget_lines.reserve budget_lines.reserve budget_lines.reserve", budget_lines.reserve)
amount = budget_lines.reserve amount = budget_lines.reserve
amount += line.amount amount += line.amount
@ -51,13 +53,13 @@ class AccountMove(models.Model):
state_a = fields.Selection(related='state') state_a = fields.Selection(related='state')
state_b = fields.Selection(related='state') state_b = fields.Selection(related='state')
is_budget = fields.Boolean(default=True) is_budget = fields.Boolean(defaul=True)
state_bill = fields.Selection(related='state') state_bill = fields.Selection(related='state')
budget_check = fields.Boolean(string="Check Budget", default=False, readonly=True) budget_check = fields.Boolean(string="Check Budget", default=False, readonly=True)
exceed_budget = fields.Boolean(default=False) exceed_budget = fields.Boolean(defaul=False)
is_check = fields.Boolean(default=False) is_check = fields.Boolean(defaul=False)
is_approve = fields.Boolean(default=False) is_approve = fields.Boolean(defaul=False)
hide_budget = fields.Boolean(defaul=False,copy=False)
def copy(self): def copy(self):
self.write({'budget_check': False}) self.write({'budget_check': False})
# self.write({'is_check':False}) # self.write({'is_check':False})
@ -76,6 +78,22 @@ class AccountMove(models.Model):
self.write({ self.write({
'state': 'budget_approve' 'state': 'budget_approve'
}) })
other_confirms = self.env['budget.confirmation'].search(
[('invoice_id', '=', self.id), ('state', '=', 'cancel')], limit=1,
order='id desc')
if other_confirms:
other_confirms.state='draft'
return
if self.purchase_id:
confirm_budget = self.env['budget.confirmation'].search([('po_id', '=', self.purchase_id.id)], limit=1,
order='id desc')
if confirm_budget:
confirm_budget.invoice_id = self.id
self.write({
'is_check': True,
'state': 'budget_approve' if confirm_budget.state == 'done' else 'wait_budget'
})
return True
def button_cancel(self): def button_cancel(self):
res = super(AccountMove, self).button_cancel() res = super(AccountMove, self).button_cancel()
@ -133,20 +151,38 @@ class AccountMove(models.Model):
def action_budget(self): def action_budget(self):
confirmation_lines = [] confirmation_lines = []
self.hide_budget = True
if not self.budget_check: if not self.budget_check:
other_confirms = self.env['budget.confirmation'].search(
[('invoice_id', '=', self.id), ('state', '!=', 'cancel')], limit=1,
order='id desc')
if other_confirms:
return
amount = 0 amount = 0
if self.purchase_id:
confirm_budget = self.env['budget.confirmation'].search([('po_id', '=', self.purchase_id.id)], limit=1,
order='id desc')
if confirm_budget:
confirm_budget.invoice_id = self.id
self.write({
'is_check': True,
'state': 'budget_approve' if confirm_budget.state == 'done' else 'wait_budget'
})
if confirm_budget.state =='cancel':
confirm_budget.state='draft'
return True
for line in self.invoice_line_ids.filtered(lambda r: r.analytic_account_id.is_analytic_budget == True): for line in self.invoice_line_ids.filtered(lambda r: r.analytic_account_id.is_analytic_budget == True):
if line.analytic_account_id: if line.analytic_account_id:
if not line.analytic_account_id: if not line.analytic_account_id:
raise ValidationError(_('Please Choose Analytic account for This Bill')) raise ValidationError(_('Please Choose Analytic account for This Bill'))
budget_lines = line.analytic_account_id.crossovered_budget_line.filtered( budget_lines = self.env['crossovered.budget.lines'].search(
lambda x: [('analytic_account_id', '=', line.analytic_account_id.id),
x.crossovered_budget_id.state == 'done' and ('general_budget_id.account_ids', 'in', [line.account_id.id]),
fields.Date.from_string(x.date_from) <= fields.Date.from_string( ('crossovered_budget_id.state', '=', 'done'),
self.invoice_date) <= fields.Date.from_string(x.date_to)) ('crossovered_budget_id.date_from', '<=', self.invoice_date),
('crossovered_budget_id.date_to', '>=', self.invoice_date)])
if not budget_lines: if not budget_lines:
raise UserError( confirmation_lines=[]
_('analytic account is %s not link with budget') % line.analytic_account_id.name)
else: else:
remain = abs(budget_lines[0].remain) remain = abs(budget_lines[0].remain)
amount = amount + (line.price_subtotal + line.price_tax) amount = amount + (line.price_subtotal + line.price_tax)
@ -174,23 +210,25 @@ class AccountMove(models.Model):
'invoice_id': self.id 'invoice_id': self.id
} }
self.env['budget.confirmation'].create(data) self.env['budget.confirmation'].create(data)
self.write({
'is_check': True
})
self.write({ self.write({
'state': 'wait_budget' 'state': 'wait_budget'
}) })
def open_confirmation(self):
def action_open_budget_confirmation(self): formview_ref = self.env.ref('account_budget_custom.view_budget_confirmation_form', False)
self.ensure_one() treeview_ref = self.env.ref('account_budget_custom.view_budget_confirmation_tree', False)
confirm_budget = self.env['budget.confirmation'].search([('invoice_id', '=', self.id)])
return { return {
"name": _('Budget Confirmation'), 'name': ("Budget Confirmation"),
"type": "ir.actions.act_window", 'view_mode': 'tree, form',
"res_model": "budget.confirmation", 'view_id': False,
"view_mode": "form", 'view_type': 'form',
"target": "new", 'res_model': 'budget.confirmation',
"domain": [('invoice_id', '=', self.id)] 'type': 'ir.actions.act_window',
'target': 'current',
'domain': "[('id', 'in', %s)]" % confirm_budget.ids,
'views': [(treeview_ref and treeview_ref.id or False, 'tree'),
(formview_ref and formview_ref.id or False, 'form')],
'context': {'create': False}
} }

View File

@ -46,8 +46,8 @@ class AccountMove(models.Model):
]) ])
is_budget = fields.Boolean(related='analytic_account_id.is_analytic_budget') is_budget = fields.Boolean(related='analytic_account_id.is_analytic_budget')
is_check = fields.Boolean(default=False, copy=False) is_check = fields.Boolean(defaul=False, copy=False)
is_approve = fields.Boolean(default=False, copy=False) is_approve = fields.Boolean(defaul=False, copy=False)
def action_submit_expenses(self): def action_submit_expenses(self):
if self.analytic_account_id.is_analytic_budget: if self.analytic_account_id.is_analytic_budget:

View File

@ -27,25 +27,12 @@
</xpath> </xpath>
<field name="final_amount" position="after"> <field name="final_amount" position="after">
<field name="confirm" readonly="1" sum="Confirm Amount" widget="monetary"/> <field name="reserve" readonly="1" sum="Reserve Amount" widget="monetary" optional="show"/>
<field name="confirm" readonly="1" sum="Confirm Amount" widget="monetary" optional="show"/>
</field> </field>
<!-- <field name="budget_confirm_amount" position="attributes">
<attribute name="invisible">1</attribute>
</field> -->
</field> </field>
</record> </record>
<!-- <record id="check_budget_purchase_view_form" model="ir.ui.view">-->
<!-- <field name="name">check.budget.purchase.form</field>-->
<!-- <field name="model">purchase.order</field>-->
<!-- <field name="inherit_id" ref="purchase.purchase_order_form"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//field[@name='amount_tax']" position="after">-->
<!-- <field name="budget_check" invisible="1"/>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<record id="budget_check_view_move_form" model="ir.ui.view"> <record id="budget_check_view_move_form" model="ir.ui.view">
<field name="name">budget.account.view.move.inherit.form</field> <field name="name">budget.account.view.move.inherit.form</field>
@ -62,15 +49,20 @@
<xpath expr="//button[@name='action_post']" position="before"> <xpath expr="//button[@name='action_post']" position="before">
<field name="hide_budget" invisible="1"/>
<button name="action_confirm" type="object" string="Confirm Bill" class="oe_highlight" <button name="action_confirm" type="object" string="Confirm Bill" class="oe_highlight"
attrs="{'invisible': ['|', ('state', '!=', 'draft'),('move_type', '!=', 'in_invoice')]}"/> attrs="{'invisible': ['|', ('state', '!=', 'draft'),('move_type', '!=', 'in_invoice')]}"/>
<button name="action_budget" type="object" string="Check Budget" class="oe_highlight" <button name="action_budget" type="object" string="Check Budget" class="oe_highlight"
attrs="{'invisible': ['|', ('state', '!=', 'confirm'),('move_type', '!=', 'in_invoice')]}"/> attrs="{'invisible': ['|','|',('move_type', '!=', 'in_invoice'), ('state', '!=', 'confirm'),('hide_budget','=',True)]}"/>
<button name="action_post" string="Confirm" class="oe_highlight" <button name="action_post" string="Confirm" class="oe_highlight"
type="object" groups="account.group_account_invoice" type="object" groups="account.group_account_invoice"
attrs="{'invisible': ['|', '|', ('state', '!=', 'budget_approve'), ('auto_post', '=', True), ('move_type', '=', 'entry')]}"/> attrs="{'invisible': ['|', '|', ('state', '!=', 'budget_approve'), ('auto_post', '=', True), ('move_type', '=', 'entry')]}"/>
</xpath> </xpath>
<xpath expr="//div[hasclass('oe_button_box')]" position="inside">
<button class="oe_stat_button" name="open_confirmation" type="object" string="Budget Confirmation"/>
</xpath>
<button name="button_cancel" position="attributes"> <button name="button_cancel" position="attributes">
<attribute name="attrs">{'invisible' : ['|', ('id', '=', False), ('state', 'not in', <attribute name="attrs">{'invisible' : ['|', ('id', '=', False), ('state', 'not in',
('draft','confirm','budget_approve'))]} ('draft','confirm','budget_approve'))]}
@ -93,13 +85,6 @@
<field name="is_approve" invisible="1"/> <field name="is_approve" invisible="1"/>
<field name="is_check" invisible="1"/> <field name="is_check" invisible="1"/>
</xpath> </xpath>
<xpath expr="//div[hasclass('oe_button_box')]" position="inside">
<button class="oe_stat_button" name="action_open_budget_confirmation" type="object" string="Budget Confirmation"
icon="fa-list-ol" attrs="{'invisible':[('state','not in',('wait_budget','budget_approve'))]}" />
</xpath>
</field> </field>
</record> </record>

View File

@ -14,5 +14,54 @@
</xpath> </xpath>
</field> </field>
</record> </record>
<record id="view_budget_confirmation_form" model="ir.ui.view">
<field name="name">expert.budget.confirmation.tree</field>
<field name="model">budget.confirmation</field>
<field name="inherit_id" ref="account_budget_custom.view_budget_confirmation_form"/>
<field name="arch" type="xml">
<field name="ref" position="after">
<field name="expense_id" attrs="{'invisible': [('expense_id', '=', False)]}" optional="show"/>
<field name="invoice_id" attrs="{'invisible': [('invoice_id', '=', False)]}" optional="show"/>
</field>
</field>
</record>
<record id="view_crossovered_budget_line_tree" model="ir.ui.view">
<field name="name">crossovered.budget.lines.tree</field>
<field name="model">crossovered.budget.lines</field>
<field name="inherit_id" ref="account_budget_custom.view_crossovered_budget_line_tree"/>
<field name="arch" type="xml">
<field name="final_amount" position="after">
<field name="reserve" optional="show"/>
<field name="confirm" optional="show"/>
</field>
</field>
</record>
<record id="view_crossovered_budget_line_pivot" model="ir.ui.view">
<field name="name">crossovered.budget.lines.tree</field>
<field name="model">crossovered.budget.lines</field>
<field name="inherit_id" ref="account_budget_custom.view_crossovered_budget_line_pivot"/>
<field name="arch" type="xml">
<field name="final_amount" position="after">
<field name="reserve" optional="show"/>
<field name="confirm" optional="show"/>
</field>
</field>
</record>
<record id="view_crossovered_budget_line_graph" model="ir.ui.view">
<field name="name">crossovered.budget.lines.tree</field>
<field name="model">crossovered.budget.lines</field>
<field name="inherit_id" ref="account_budget_custom.view_crossovered_budget_line_graph"/>
<field name="arch" type="xml">
<field name="final_amount" position="after">
<field name="reserve" optional="show"/>
<field name="confirm" optional="show"/>
</field>
</field>
</record>
</data> </data>
</odoo> </odoo>

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
{
'name': "Initial engagement budget",
'description': """
Add new features to budget :
- Initial engagement budget workflow.
- Budget Confirmation.
""",
'author': "Expert Co. Ltd.",
'website': "http://www.exp-sa.com",
'category': 'Odex25 Accounting/Accounting',
# any module necessary for this one to work correctly
'depends': ['account_budget_custom','purchase_requisition_custom','exp_budget_check'],
# always loaded
'data': [
'views/account_budget_views.xml',
'views/purchase_request_view.xml',
'views/res_config_view.xml',
],
}

View File

@ -0,0 +1,224 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * initial_engagement_budget
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-17 00:08+0000\n"
"PO-Revision-Date: 2024-07-17 00:08+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_res_company__activate_initial_engagement
#: model:ir.model.fields,field_description:initial_engagement_budget.field_res_config_settings__activate_initial_engagement
msgid "Activate Initial Engagement"
msgstr "تفعيل الربط المبدئي بالموازنات"
#. module: initial_engagement_budget
#: model_terms:ir.ui.view,arch_db:initial_engagement_budget.purchase_requisition_custom_setting
msgid "Activate Initial Engagement Budget"
msgstr "تفعيل الربط المبدئي بالموازنات"
#. module: initial_engagement_budget
#: code:addons/initial_engagement_budget/models/account_budget.py:0
#, python-format
msgid "Amount of money that has been exceeded"
msgstr "تم تجاوز المبلغ المالي"
#. module: initial_engagement_budget
#: code:addons/initial_engagement_budget/models/account_budget.py:0
#, python-format
msgid "Amount of money that has been remained"
msgstr "تم البقاء على المبلغ المالي"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request_line__analytic_account_id
msgid "Analytic Account"
msgstr "حساب تحليلي"
#. module: initial_engagement_budget
#: model:ir.model,name:initial_engagement_budget.model_crossovered_budget_lines
msgid "Budget Line"
msgstr "بند الموازنة"
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__state__cancel
msgid "Cancel"
msgstr "إلغاء"
#. module: initial_engagement_budget
#: model:ir.model,name:initial_engagement_budget.model_res_company
msgid "Companies"
msgstr "شركات"
#. module: initial_engagement_budget
#: model:ir.model,name:initial_engagement_budget.model_res_config_settings
msgid "Config Settings"
msgstr "ضبط الاعدادات"
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__purchase_cost__default
msgid "Default Cost Center"
msgstr "حساب تحليلي مرتبط بالشركة"
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__purchase_cost__department
msgid "Department"
msgstr "الإدارة"
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__state__direct_manager
msgid "Direct Manager"
msgstr "المدير المباشر"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_crossovered_budget_lines__display_name
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request__display_name
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request_line__display_name
#: model:ir.model.fields,field_description:initial_engagement_budget.field_res_company__display_name
#: model:ir.model.fields,field_description:initial_engagement_budget.field_res_config_settings__display_name
msgid "Display Name"
msgstr "الاسم المعروض"
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__state__done
msgid "Done"
msgstr "تم"
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__state__draft
msgid "Draft"
msgstr "مبدئي"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request_line__expected_price
msgid "Expected Price"
msgstr "السعر التقديري شامل الضريبة "
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_crossovered_budget_lines__id
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request__id
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request_line__id
#: model:ir.model.fields,field_description:initial_engagement_budget.field_res_company__id
#: model:ir.model.fields,field_description:initial_engagement_budget.field_res_config_settings__id
msgid "ID"
msgstr "المُعرف"
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__state__waiting
msgid "In Purchase"
msgstr "في الشراء"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_crossovered_budget_lines__initial_engagement_amount
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__state__initial
#: model_terms:ir.ui.view,arch_db:initial_engagement_budget.crossovered_budget_view_form
#: model_terms:ir.ui.view,arch_db:initial_engagement_budget.purchase_request_form
#: model_terms:ir.ui.view,arch_db:initial_engagement_budget.view_crossovered_budget_line_tree
msgid "Initial Engagement"
msgstr "الربط المبدئي"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request__initial_engagement_activate
msgid "Initial Engagement Activate"
msgstr "وضع الربط المبدئي"
#. module: initial_engagement_budget
#: model_terms:ir.ui.view,arch_db:initial_engagement_budget.purchase_requisition_custom_setting
msgid "Initial Engagement Budget"
msgstr "الربط المبدئي للموازنات"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_crossovered_budget_lines____last_update
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request____last_update
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request_line____last_update
#: model:ir.model.fields,field_description:initial_engagement_budget.field_res_company____last_update
#: model:ir.model.fields,field_description:initial_engagement_budget.field_res_config_settings____last_update
msgid "Last Modified on"
msgstr "آخر تعديل في"
#. module: initial_engagement_budget
#: code:addons/initial_engagement_budget/models/purchase_request.py:0
#, python-format
msgid "Please put cost center to the product line"
msgstr "برجاء ادخال حساب تحليلي للمنتج"
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__purchase_cost__product_line
msgid "Product Line"
msgstr "على مستوي سطر الشراء"
#. module: initial_engagement_budget
#: model:ir.model,name:initial_engagement_budget.model_purchase_request
msgid "Purchase Request"
msgstr "طلبات الشراء"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request__purchase_cost
msgid "Purchase Request Cost"
msgstr "نوع الحساب التحليلي"
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__state__refuse
msgid "Refuse"
msgstr "رفض"
#. module: initial_engagement_budget
#: model:ir.actions.act_window,name:initial_engagement_budget.action_budget_confirmation_form
#: model:ir.ui.menu,name:initial_engagement_budget.menu_budget_confirmation
msgid "Request Budget Confirmations"
msgstr "الربط المبدئي"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request__state
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request__state_a
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request__state_b
msgid "State"
msgstr "الحالة"
#. module: initial_engagement_budget
#: code:addons/initial_engagement_budget/models/purchase_request.py:0
#, python-format
msgid "This product has no expense account"
msgstr "هذا المنتج ليس له حساب مصروف"
#. module: initial_engagement_budget
#: model:ir.model.fields,field_description:initial_engagement_budget.field_purchase_request_line__line_total
msgid "Total"
msgstr "إجمالي"
#. module: initial_engagement_budget
#: code:addons/initial_engagement_budget/models/purchase_request.py:0
#, python-format
msgid "Total Amount MUST be greater than 0 !!!"
msgstr "برجاء ادخال قيمة اكبر من 0"
#. module: initial_engagement_budget
#: code:addons/initial_engagement_budget/models/account_budget.py:0
#: model:ir.model.fields,help:initial_engagement_budget.field_crossovered_budget_lines__initial_engagement_amount
#, python-format
msgid "Total amount of confirmed purchase requests for this budget line."
msgstr "المبلغ الإجمالي لطلبات الشراء المؤكدة لهذا البند الميزاني."
#. module: initial_engagement_budget
#: model:ir.model.fields.selection,name:initial_engagement_budget.selection__purchase_request__state__wait_for_send
msgid "Wait For Sent"
msgstr "فى انتظار الارسال"
#. module: initial_engagement_budget
#: code:addons/initial_engagement_budget/models/purchase_request.py:0
#, python-format
msgid "You must set a Vendor this PO"
msgstr "برجاء ادخال مورد لهذا الطلب"
#. module: initial_engagement_budget
#: model:ir.model,name:initial_engagement_budget.model_purchase_request_line
msgid "purchase request line"
msgstr "بند طلب الشراء"

View File

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
from . import account_budget
from . import purchase_request
from . import res_config

View File

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, _
class CrossoveredBudgetLines(models.Model):
_inherit = "crossovered.budget.lines"
initial_engagement_amount = fields.Float(string='Initial Engagement', compute='_compute_initial_engagement_amount',
help=_(
'Total amount of confirmed purchase requests for this budget line.'))
remain = fields.Float(string='Remain of Christening', compute='_compute_remain_new',
help=_('Amount of money that has been remained'))
above_remain = fields.Float(string='Exceed Amount', compute='_compute_remain_new',
help=_('Amount of money that has been exceeded'))
@api.depends('to_operation_ids', 'from_operation_ids')
def _compute_remain_new(self):
for line in self:
remain_value = ((abs(line.final_amount) - abs(line.reserve) - abs(line.confirm) - abs(
line.practical_amount)- abs(line.initial_engagement_amount)) * -1)
line.remain = 0 if remain_value > 0 else remain_value
line.above_remain = remain_value if remain_value > 0 else 0
@api.depends('analytic_account_id')
def _compute_initial_engagement_amount(self) -> None:
for rec in self:
rec.initial_engagement_amount = sum(
self.env['budget.confirmation.line'].search([('confirmation_id.state', '=', 'done'),
('confirmation_id.request_id.state', '!=', 'done'),
('confirmation_id.request_id.purchase_create', '!=', True),
('confirmation_id.type', '=',
'purchase.request'),
('account_id', 'in',
rec.general_budget_id.account_ids.ids),
('analytic_account_id', '=',
rec.analytic_account_id.id)]).mapped(
'amount'))

View File

@ -0,0 +1,152 @@
# -*- coding: utf-8 -*-
from datetime import datetime
from typing import Optional
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError, UserError
class PurchaseRequest(models.Model):
_inherit = 'purchase.request'
state = fields.Selection(
selection=[('draft', 'Draft'), ('direct_manager', 'Direct Manager'), ('wait_for_send', 'Wait For Sent'),
('initial', 'Initial Engagement'),
('waiting', 'In Purchase'), ('done', 'Done'), ('cancel', 'Cancel'), ('refuse', 'Refuse')],
default="draft",
tracking=True
)
state_a = fields.Selection(related='state')
state_b = fields.Selection(related='state')
initial_engagement_activate = fields.Boolean(compute='_check_initial_engagement_activate', store=True,
default=False)
@api.depends('name', 'date', 'department_id', 'state')
def _check_initial_engagement_activate(self):
for rec in self:
rec.initial_engagement_activate = rec.company_id.activate_initial_engagement
def action_confirm(self) -> Optional[bool]:
if self.env.user.company_id.activate_initial_engagement:
for rec in self:
rec.state = 'wait_for_send'
return
return super(PurchaseRequest, self).action_confirm()
def initial_engagement(self) -> None:
for rec in self:
rec.action_budget_initial()
rec.state = 'initial'
def action_refuse(self):
res = super(PurchaseRequest, self).action_refuse()
for rec in self:
budget_confs = self.env['budget.confirmation'].search([('request_id', '=', rec.id)])
budget_confs.write({'state': 'cancel'})
return res
def action_budget_initial(self):
confirmation_lines = []
amount = 0
total_amount = sum(line.line_total for line in self.line_ids)
if total_amount <= 0:
raise ValidationError(_("Total Amount MUST be greater than 0 !!!"))
if self.use_analytic:
analytic_account = self.account_analytic_id
else:
analytic_account = self.department_id.analytic_account_id
for order in self:
for rec in order.line_ids:
if not (
rec.product_id.property_account_expense_id.id and rec.product_id.property_account_expense_id.id or rec.product_id.categ_id.property_account_expense_categ_id.id):
raise ValidationError(
_("This product has no expense account") + ': {}'.format(rec.product_id.name))
budget_lines = analytic_account.crossovered_budget_line.filtered(
lambda x:
x.crossovered_budget_id.state == 'done' and
rec.product_id.property_account_expense_id.id in x.general_budget_id.account_ids.ids and
fields.Date.from_string(x.date_from) <= fields.Date.from_string(self.date) and
fields.Date.from_string(x.date_to) >= fields.Date.from_string(self.date))
budget_line = budget_lines.mapped('crossovered_budget_id')
if len(budget_line) > 1:
self.budget_id = budget_line[0].id
if budget_lines:
remain = abs(budget_lines[0].remain)
amount = amount + rec.line_total
new_balance = remain - amount
confirmation_lines.append((0, 0, {
'amount': rec.line_total,
'analytic_account_id': analytic_account.id,
'description': rec.product_id.name,
'budget_line_id': budget_lines[0].id,
'remain': remain,
'new_balance': new_balance,
'account_id': rec.product_id.property_account_expense_id.id and rec.product_id.property_account_expense_id.id or rec.product_id.categ_id.property_account_expense_categ_id.id
}))
data = {
'name': self.name,
'date': self.date,
'beneficiary_id': self.partner_id.id,
'department_id': self.department_id.id,
'type': 'purchase.request',
'ref': self.name,
'description': self.name,
'total_amount': total_amount,
'lines_ids': confirmation_lines or False,
'request_id': self.id
}
self.env['budget.confirmation'].create(data)
def create_purchase_order2(self):
if not self.partner_id:
raise UserError(_("You must set a Vendor this PO"))
if self.use_analytic:
analytic_account = self.account_analytic_id.id
else:
analytic_account = self.department_id.analytic_account_id.id
line_ids = []
for line in self.line_ids:
line_ids.append((0, 6, {
'product_id': line.product_id.id,
'product_qty': line.qty,
'name': line.description or line.product_id.name,
'department_name': self.employee_id.department_id.id,
'account_analytic_id':analytic_account,
'date_planned': datetime.today(),
'price_unit': 0,
}))
purchase_order = self.env['purchase.order'].sudo().create({
'category_ids': self.product_category_ids.ids,
'origin': self.name,
'request_id': self.id,
'partner_id': self.partner_id.id,
'department_id': self.department_id.id,
'purpose': self.purchase_purpose,
'purchase_cost': 'product_line',
'order_line': line_ids,
})
self.write({'purchase_create': True})
return {
'name': "Purchase orders from employee",
'type': 'ir.actions.act_window',
'res_model': 'purchase.order',
'view_mode': 'form',
'res_id': purchase_order.id}
class PurchaseRequestLine(models.Model):
_inherit = 'purchase.request.line'
expected_price = fields.Float(string='Expected Price', tracking=True, )
line_total = fields.Float(string='Total', compute='_compute_line_total', store=True)
@api.depends('qty', 'expected_price')
def _compute_line_total(self) -> None:
for line in self:
line.line_total = line.qty * line.expected_price

View File

@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
from odoo import fields, models
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
activate_initial_engagement = fields.Boolean(related='company_id.activate_initial_engagement', readonly=False)
class ResCompany(models.Model):
_inherit = 'res.company'
activate_initial_engagement = fields.Boolean(string='Activate Initial Engagement', default=False)

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="crossovered_budget_view_form">
<field name="name">crossovered.budget.view.inherit.form</field>
<field name="model">crossovered.budget</field>
<field name="inherit_id" ref="account_budget_custom.crossovered_budget_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='crossovered_budget_line']/tree/field[@name='final_amount']"
position="after">
<field name="initial_engagement_amount" readonly="1" sum="Initial Engagement" widget="monetary"
optional="show"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_crossovered_budget_line_tree">
<field name="name">crossovered.budget.lines.inherit.tree</field>
<field name="model">crossovered.budget.lines</field>
<field name="inherit_id" ref="account_budget_custom.view_crossovered_budget_line_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='final_amount']"
position="after">
<field name="initial_engagement_amount" readonly="1" sum="Initial Engagement" widget="monetary"
optional="show"/>
</xpath>
</field>
</record>
<record id="action_budget_confirmation_form" model="ir.actions.act_window">
<field name="name">Request Budget Confirmations</field>
<field name="res_model">budget.confirmation</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree'}),(0, 0, {'view_mode': 'kanban'}),
(0, 0, {'view_mode': 'form', 'view_id': ref('account_budget_custom.view_budget_confirmation_form')})]"/>
<field name="view_mode">tree,kanban,form</field>
<field name="domain">[('type','=','purchase.request')]</field>
</record>
<menuitem action="action_budget_confirmation_form" id="menu_budget_confirmation"
parent="account_budget_custom.main_budgets_menu" sequence="5"/>
</odoo>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="purchase_request_form">
<field name="name">purchase.request.inherit.form</field>
<field name="model">purchase.request</field>
<field name="inherit_id" ref="purchase_requisition_custom.purchase_request_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_submit']" position="after">
<button name="initial_engagement"
type="object" string="Initial Engagement" states="wait_for_send" class="oe_highlight"/>
</xpath>
<xpath expr="//button[@name='action_refuse']" position="attributes">
<attribute name="states">direct_manager,wait_for_send,initial</attribute>
</xpath>
<xpath expr="//field[@name='date']" position="after">
<field name="initial_engagement_activate" invisible="1"/>
</xpath>
<xpath expr="//field[@name='state']" position="replace">
<field name="state" invisible="1"/>
<field name="state_a" widget="statusbar"
statusbar_visible="draft,direct_manager,wait_for_send,initial,waiting,done"
attrs="{'invisible': [('initial_engagement_activate', '=', False)]}"/>
<field name="state_b" widget="statusbar" statusbar_visible="draft,direct_manager,waiting,done"
attrs="{'invisible': [('initial_engagement_activate', '=', True)]}"/>
</xpath>
<field name="state" widget="statusbar"/>
<xpath expr="//field[@name='line_ids']/tree" position="inside">
<field name="expected_price"
attrs="{'column_invisible': [('parent.initial_engagement_activate', '!=', True)]}"/>
<field name="line_total"
attrs="{'column_invisible': [('parent.initial_engagement_activate', '!=', True)]}"/>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,30 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<!-- model.name inherit form view -->
<record id="purchase_requisition_custom_setting" model="ir.ui.view">
<field name="name">model.name.inherit.view.form</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="purchase_requisition_custom.purchase_requisition_custom_setting"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-string='Purchase']" position="inside">
<h2>Initial Engagement Budget</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-md-6 o_setting_box" title="Activate Initial Engagement Budget">
<div class="o_setting_left_pane">
<div class="mt16">
<field name="activate_initial_engagement" class="o_light_label"/>
</div>
</div>
<div class="o_setting_right_pane">
<label for="activate_initial_engagement"/>
<div class="text-muted">
Initial Engagement Budget
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

0
odex25_accounting/odex25_account_budget/__init__.py Normal file → Executable file
View File

View File

@ -2,7 +2,7 @@
{ {
'name': 'Budget Management', 'name': 'Budget Management',
'category': 'Odex25-Accounting/Odex25-Accounting', 'category': 'Odex25 Accounting/Accounting',
'description': """ 'description': """
Use budgets to compare actual with expected revenues and costs Use budgets to compare actual with expected revenues and costs
-------------------------------------------------------------- --------------------------------------------------------------
@ -17,4 +17,5 @@ Use budgets to compare actual with expected revenues and costs
'views/account_budget_views.xml', 'views/account_budget_views.xml',
'views/account_analytic_account_views.xml', 'views/account_analytic_account_views.xml',
], ],
'demo': ['data/account_budget_demo.xml'],
} }

View File

163
odex25_accounting/odex25_account_budget/i18n/ar.po Normal file → Executable file
View File

@ -2,35 +2,18 @@
# This file contains the translation of the following modules: # This file contains the translation of the following modules:
# * odex25_account_budget # * odex25_account_budget
# #
# Translators:
# Sherif Abd Ekmoniem <sherif.tsupport@gmail.com>, 2020
# Mustafa Rawi <mustafa@cubexco.com>, 2020
# Sadig Adam <sadig41@gmail.com>, 2020
# amrnegm <amrnegm.01@gmail.com>, 2020
# Martin Trigaux, 2020
# Osoul <baruni@osoul.ly>, 2020
# Osama Ahmaro <osamaahmaro@gmail.com>, 2020
# amal ahmed <amalalhashemy88@hotmail.com>, 2020
# Shaima Safar <shaima.safar@open-inside.com>, 2020
# Islam Eldeeb <islameldeb@gmail.com>, 2020
# Mostafa Hanafy <mostafa.s.hanafy@gmail.com>, 2020
# Nisrine Tagri <nta@odoo.com>, 2020
# Tasneem Sarhan <tsa@odoo.com>, 2020
# Talal Albahra <talal.albahra@outlook.com>, 2020
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 14.0\n" "Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-11-16 13:44+0000\n" "POT-Creation-Date: 2024-07-01 07:42+0000\n"
"PO-Revision-Date: 2020-09-07 08:17+0000\n" "PO-Revision-Date: 2024-07-01 07:42+0000\n"
"Last-Translator: Talal Albahra <talal.albahra@outlook.com>, 2020\n" "Last-Translator: \n"
"Language-Team: Arabic (https://www.transifex.com/odoo/teams/41243/ar/)\n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n" "Content-Transfer-Encoding: \n"
"Language: ar\n" "Plural-Forms: \n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#. module: odex25_account_budget #. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0 #: code:addons/odex25_account_budget/models/account_budget.py:0
@ -51,7 +34,7 @@ msgstr "يجب أن تتضمن فترة الموازنة تاريخ بدء بن
#. module: odex25_account_budget #. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_kanban #: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_kanban
msgid "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Period\" title=\"Period\"/>" msgid "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Period\" title=\"Period\"/>"
msgstr "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Period\" title=\"Period\"/>" msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__account_ids #: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__account_ids
@ -62,7 +45,7 @@ msgstr "الحسابات"
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__percentage #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__percentage
msgid "Achievement" msgid "Achievement"
msgstr "الإنجاز" msgstr "نسبة الصرف"
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_needaction #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_needaction
@ -89,16 +72,6 @@ msgstr "حالة النشاط"
msgid "Activity Type Icon" msgid "Activity Type Icon"
msgstr "أيقونة نوع النشاط" msgstr "أيقونة نوع النشاط"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__practical_amount
msgid "Amount really earned/spent."
msgstr "الإيرادات/المصروفات الفعلية."
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__theoritical_amount
msgid "Amount you are supposed to have earned/spent at this date."
msgstr "المبلغ الذي يُفترض أن تكون ربحته/أنفقته في هذا التاريخ."
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__planned_amount #: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__planned_amount
msgid "" msgid ""
@ -111,9 +84,16 @@ msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_account_analytic_account #: model:ir.model,name:odex25_account_budget.model_account_analytic_account
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__analytic_account_id #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__analytic_account_id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__analytic_account_id
msgid "Analytic Account" msgid "Analytic Account"
msgstr "الحساب التحليلي" msgstr "الحساب التحليلي"
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/wizard/crossovered_budget_percentage_wizard.py:0
#, python-format
msgid "Analytic Accounts"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__analytic_group_id #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__analytic_group_id
msgid "Analytic Group" msgid "Analytic Group"
@ -148,7 +128,7 @@ msgstr "بنود الموازنة"
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_crossovered_budget_lines #: model:ir.model,name:odex25_account_budget.model_crossovered_budget_lines
msgid "Budget Line" msgid "Budget Line"
msgstr "خط الموازنة" msgstr "بند الموازنة"
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__crossovered_budget_line #: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__crossovered_budget_line
@ -176,11 +156,12 @@ msgstr "حالة الموازنة"
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_account_budget_post #: model:ir.model,name:odex25_account_budget.model_account_budget_post
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__general_budget_id #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__general_budget_id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__budget_post_id
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_form #: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_form
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_search #: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_search
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_tree #: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_tree
msgid "Budgetary Position" msgid "Budgetary Position"
msgstr "وضع الموازنة" msgstr "بند الموازنة"
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.actions.act_window,name:odex25_account_budget.open_budget_post_form #: model:ir.actions.act_window,name:odex25_account_budget.open_budget_post_form
@ -242,10 +223,22 @@ msgstr "تأكيد"
msgid "Confirmed" msgid "Confirmed"
msgstr "مؤكد" msgstr "مؤكد"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_percentage_wizard_form
msgid "Copy"
msgstr ""
#. module: odex25_account_budget
#: model:ir.actions.act_window,name:odex25_account_budget.crossovered_budget_percentage_wizard_action
msgid "Copy Budgetary Positions"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__create_uid #: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__create_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__create_uid #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__create_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__create_uid #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__create_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__create_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__create_uid
msgid "Created by" msgid "Created by"
msgstr "أنشئ بواسطة" msgstr "أنشئ بواسطة"
@ -253,9 +246,21 @@ msgstr "أنشئ بواسطة"
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__create_date #: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__create_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__create_date #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__create_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__create_date #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__create_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__create_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__create_date
msgid "Created on" msgid "Created on"
msgstr "أنشئ في" msgstr "أنشئ في"
#. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_crossovered_budget_percentage_line_wizard
msgid "CrossOvered Budget Percentage Lines Wizard"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_crossovered_budget_percentage_wizard
msgid "CrossOvered Budget Percentage Wizard"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__currency_id #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__currency_id
msgid "Currency" msgid "Currency"
@ -266,11 +271,18 @@ msgstr "العملة"
msgid "Date" msgid "Date"
msgstr "التاريخ" msgstr "التاريخ"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_percentage_wizard_form
msgid "Discard"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__display_name #: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__display_name #: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__display_name #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__display_name #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__display_name
msgid "Display Name" msgid "Display Name"
msgstr "الاسم المعروض" msgstr "الاسم المعروض"
@ -291,6 +303,11 @@ msgstr "مسودة"
msgid "Draft Budgets" msgid "Draft Budgets"
msgstr "موازنة مؤقتة" msgstr "موازنة مؤقتة"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_account_analytic_account_form_inherit_budget
msgid "Duplicate"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__date_to #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__date_to
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__date_to #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__date_to
@ -337,6 +354,8 @@ msgstr "تجميع حسب"
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__id #: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__id #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__id #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__id
msgid "ID" msgid "ID"
msgstr "المُعرف" msgstr "المُعرف"
@ -377,6 +396,8 @@ msgstr "متابع"
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post____last_update #: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post____last_update
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget____last_update #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget____last_update
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines____last_update #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines____last_update
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard____last_update
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard____last_update
msgid "Last Modified on" msgid "Last Modified on"
msgstr "آخر تعديل في" msgstr "آخر تعديل في"
@ -384,6 +405,8 @@ msgstr "آخر تعديل في"
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__write_uid #: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__write_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__write_uid #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__write_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__write_uid #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__write_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__write_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__write_uid
msgid "Last Updated by" msgid "Last Updated by"
msgstr "آخر تحديث بواسطة" msgstr "آخر تحديث بواسطة"
@ -391,6 +414,8 @@ msgstr "آخر تحديث بواسطة"
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__write_date #: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__write_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__write_date #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__write_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__write_date #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__write_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__write_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__write_date
msgid "Last Updated on" msgid "Last Updated on"
msgstr "آخر تحديث في" msgstr "آخر تحديث في"
@ -399,6 +424,11 @@ msgstr "آخر تحديث في"
msgid "Late Activities" msgid "Late Activities"
msgstr "الأنشطة المتأخرة" msgstr "الأنشطة المتأخرة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__line_ids
msgid "Lines"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_main_attachment_id #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_main_attachment_id
msgid "Main Attachment" msgid "Main Attachment"
@ -414,6 +444,11 @@ msgstr "خطأ في تسليم الرسائل"
msgid "Messages" msgid "Messages"
msgstr "الرسائل" msgstr "الرسائل"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__name #: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__name #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__name
@ -470,6 +505,21 @@ msgstr "عدد الرسائل الجديدة"
msgid "Paid Date" msgid "Paid Date"
msgstr "تاريخ السداد" msgstr "تاريخ السداد"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__parent_id
msgid "Parent"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__parent_path
msgid "Parent Path"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__percentage
msgid "Percentage"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form #: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Period" msgid "Period"
@ -487,6 +537,11 @@ msgstr "المبلغ المخطط"
msgid "Planned amount" msgid "Planned amount"
msgstr "المبلغ المخطط" msgstr "المبلغ المخطط"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_percentage_wizard_form
msgid "Please Select Budgetary Positions Percentage"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__practical_amount #: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__practical_amount
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form #: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
@ -566,7 +621,13 @@ msgstr "القيمة النظرية"
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_graph #: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_graph
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_pivot #: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_pivot
msgid "Theoretical amount" msgid "Theoretical amount"
msgstr "" msgstr "القيمة النظرية"
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#, python-format
msgid "This Account %s is already exist in another budget."
msgstr "هذا الحساب %s موجود بالفعل في ميزانية أخرى."
#. module: odex25_account_budget #. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search #: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
@ -583,6 +644,11 @@ msgstr "للموافقة علي الموازنة"
msgid "Today Activities" msgid "Today Activities"
msgstr "نشاطات اليوم" msgstr "نشاطات اليوم"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__practical_amount
msgid "Total amount of money that has been spent"
msgstr ""
#. module: odex25_account_budget #. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__activity_exception_decoration #: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__activity_exception_decoration
msgid "Type of the exception activity on record." msgid "Type of the exception activity on record."
@ -618,6 +684,17 @@ msgstr "رسائل الموقع"
msgid "Website communication history" msgid "Website communication history"
msgstr "سجل تواصل الموقع" msgstr "سجل تواصل الموقع"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__wizard_id
msgid "Wizard"
msgstr ""
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#, python-format
msgid "You cannot delete a budget that is used in a budget line."
msgstr "لا يمكنك حذف الميزانية المستخدمة في بند الميزانية"
#. module: odex25_account_budget #. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0 #: code:addons/odex25_account_budget/models/account_budget.py:0
#, python-format #, python-format
@ -627,3 +704,15 @@ msgid ""
msgstr "" msgstr ""
"يجب أن تُدرج على الأقل موقفًا موازنيًا أو حسابًا تحليلًا واحدًا في بند " "يجب أن تُدرج على الأقل موقفًا موازنيًا أو حسابًا تحليلًا واحدًا في بند "
"الموازنة." "الموازنة."
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_percentage_wizard_form
msgid "or"
msgstr "أو"
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__analytic_account_id
#, python-format
msgid "الحساب التحليلي المرتبط بالميزانية"
msgstr ""

View File

@ -0,0 +1,718 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * odex25_account_budget
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-01 07:42+0000\n"
"PO-Revision-Date: 2024-07-01 07:42+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#, python-format
msgid ""
"\"End Date\" of the budget line should be included in the Period of the "
"budget"
msgstr "يجب أن تتضمن فترة الموازنة تاريخ انتهاء بند الموازنة"
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#, python-format
msgid ""
"\"Start Date\" of the budget line should be included in the Period of the "
"budget"
msgstr "يجب أن تتضمن فترة الموازنة تاريخ بدء بند الموازنة"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_kanban
msgid "<i class=\"fa fa-clock-o\" role=\"img\" aria-label=\"Period\" title=\"Period\"/>"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__account_ids
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_form
msgid "Accounts"
msgstr "الحسابات"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__percentage
msgid "Achievement"
msgstr "نسبة الصرف"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_needaction
msgid "Action Needed"
msgstr "إجراء مطلوب"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__activity_ids
msgid "Activities"
msgstr "الأنشطة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "زخرفة استثناء النشاط"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__activity_state
msgid "Activity State"
msgstr "حالة النشاط"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__activity_type_icon
msgid "Activity Type Icon"
msgstr "أيقونة نوع النشاط"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__planned_amount
msgid ""
"Amount you plan to earn/spend. Record a positive amount if it is a revenue "
"and a negative amount if it is a cost."
msgstr ""
"المبلغ الذي تخطط لربحه/إنفاقه. سجله كقيمة موجبة إذا كان ربحًا وسالبة إذا "
"كانت تكلفة."
#. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_account_analytic_account
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__analytic_account_id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__analytic_account_id
msgid "Analytic Account"
msgstr "الحساب التحليلي"
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/wizard/crossovered_budget_percentage_wizard.py:0
#, python-format
msgid "Analytic Accounts"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__analytic_group_id
msgid "Analytic Group"
msgstr "مجموعة تحليلية"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Approve"
msgstr "موافقة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_attachment_count
msgid "Attachment Count"
msgstr "عدد المرفقات"
#. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_crossovered_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__crossovered_budget_id
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_tree
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_account_analytic_account_form_inherit_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
msgid "Budget"
msgstr "الموازنة"
#. module: odex25_account_budget
#: model:ir.actions.act_window,name:odex25_account_budget.act_account_analytic_account_cb_lines
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_account_analytic_account_form_inherit_budget
msgid "Budget Items"
msgstr "بنود الموازنة"
#. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_crossovered_budget_lines
msgid "Budget Line"
msgstr "بند الموازنة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__crossovered_budget_line
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__crossovered_budget_line
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_form
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_graph
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_pivot
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_search
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_tree
msgid "Budget Lines"
msgstr "خطوط الموازنة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__name
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Budget Name"
msgstr "اسم الموازنة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__crossovered_budget_state
msgid "Budget State"
msgstr "حالة الموازنة"
#. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_account_budget_post
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__general_budget_id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__budget_post_id
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_form
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_search
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_budget_post_tree
msgid "Budgetary Position"
msgstr "بند الموازنة"
#. module: odex25_account_budget
#: model:ir.actions.act_window,name:odex25_account_budget.open_budget_post_form
#: model:ir.ui.menu,name:odex25_account_budget.menu_budget_post_form
msgid "Budgetary Positions"
msgstr "مراكز الموازنة"
#. module: odex25_account_budget
#: model:ir.actions.act_window,name:odex25_account_budget.act_crossovered_budget_view
#: model:ir.ui.menu,name:odex25_account_budget.menu_act_crossovered_budget_view
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_search
msgid "Budgets"
msgstr "الموازنات"
#. module: odex25_account_budget
#: model:ir.actions.act_window,name:odex25_account_budget.act_crossovered_budget_lines_view
#: model:ir.ui.menu,name:odex25_account_budget.menu_act_crossovered_budget_lines_view
msgid "Budgets Analysis"
msgstr "تحليل الموازنات"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Cancel Budget"
msgstr "إلغاء الموازنة"
#. module: odex25_account_budget
#: model:ir.model.fields.selection,name:odex25_account_budget.selection__crossovered_budget__state__cancel
msgid "Cancelled"
msgstr "ملغي"
#. module: odex25_account_budget
#: model_terms:ir.actions.act_window,help:odex25_account_budget.act_crossovered_budget_view
msgid "Click to create a new budget."
msgstr "اضغط لإنشاء موازنة جديدة."
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__company_id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__company_id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__company_id
msgid "Company"
msgstr "شركة"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__percentage
msgid ""
"Comparison between practical and theoretical amount. This measure tells you "
"if you are below or over budget."
msgstr ""
"المقارنة بين القيمة الفعلية والنظرية. تحدد نسبة الانحراف في الإيرادات أو "
"المصروفات في الموازنة."
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Confirm"
msgstr "تأكيد"
#. module: odex25_account_budget
#: model:ir.model.fields.selection,name:odex25_account_budget.selection__crossovered_budget__state__confirm
msgid "Confirmed"
msgstr "مؤكد"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_percentage_wizard_form
msgid "Copy"
msgstr ""
#. module: odex25_account_budget
#: model:ir.actions.act_window,name:odex25_account_budget.crossovered_budget_percentage_wizard_action
msgid "Copy Budgetary Positions"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__create_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__create_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__create_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__create_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__create_uid
msgid "Created by"
msgstr "أنشئ بواسطة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__create_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__create_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__create_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__create_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__create_date
msgid "Created on"
msgstr "أنشئ في"
#. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_crossovered_budget_percentage_line_wizard
msgid "CrossOvered Budget Percentage Lines Wizard"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model,name:odex25_account_budget.model_crossovered_budget_percentage_wizard
msgid "CrossOvered Budget Percentage Wizard"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__currency_id
msgid "Currency"
msgstr "العملة"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_search
msgid "Date"
msgstr "التاريخ"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_percentage_wizard_form
msgid "Discard"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__display_name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__display_name
msgid "Display Name"
msgstr "الاسم المعروض"
#. module: odex25_account_budget
#: model:ir.model.fields.selection,name:odex25_account_budget.selection__crossovered_budget__state__done
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Done"
msgstr "الإعتماد النهائي"
#. module: odex25_account_budget
#: model:ir.model.fields.selection,name:odex25_account_budget.selection__crossovered_budget__state__draft
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
msgid "Draft"
msgstr "مسودة"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
msgid "Draft Budgets"
msgstr "موازنة مؤقتة"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_account_analytic_account_form_inherit_budget
msgid "Duplicate"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__date_to
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__date_to
msgid "End Date"
msgstr "تاريخ الانتهاء"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Entries..."
msgstr "القيود..."
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_follower_ids
msgid "Followers"
msgstr "المتابعون"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_channel_ids
msgid "Followers (Channels)"
msgstr "المتابعون (القنوات)"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_partner_ids
msgid "Followers (Partners)"
msgstr "المتابعون (الشركاء)"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr ""
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
msgid "Future Activities"
msgstr "الأنشطة المستقبلية"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_search
msgid "Group By"
msgstr "تجميع حسب"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__id
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__id
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__id
msgid "ID"
msgstr "المُعرف"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__activity_exception_icon
msgid "Icon"
msgstr "الأيقونة"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "الأيقونة للإشارة إلى استثناء النشاط"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__message_needaction
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__message_unread
msgid "If checked, new messages require your attention."
msgstr "إذا كان محددًا، فهناك رسائل جديدة تحتاج لرؤيتها."
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__message_has_error
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr "إذا كان محددًا، فقد حدث خطأ في تسليم بعض الرسائل."
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__is_above_budget
msgid "Is Above Budget"
msgstr "يفوق الموازنة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_is_follower
msgid "Is Follower"
msgstr "متابع"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account____last_update
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post____last_update
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget____last_update
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines____last_update
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard____last_update
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard____last_update
msgid "Last Modified on"
msgstr "آخر تعديل في"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__write_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__write_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__write_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__write_uid
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__write_uid
msgid "Last Updated by"
msgstr "آخر تحديث بواسطة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__write_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__write_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__write_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__write_date
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__write_date
msgid "Last Updated on"
msgstr "آخر تحديث في"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
msgid "Late Activities"
msgstr "الأنشطة المتأخرة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_wizard__line_ids
msgid "Lines"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_main_attachment_id
msgid "Main Attachment"
msgstr "المرفق الرئيسي"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_has_error
msgid "Message Delivery error"
msgstr "خطأ في تسليم الرسائل"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_ids
msgid "Messages"
msgstr "الرسائل"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_budget_post__name
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__name
msgid "Name"
msgstr "الاسم"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "الموعد النهائي للنشاط التالي"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__activity_summary
msgid "Next Activity Summary"
msgstr "ملخص النشاط التالي"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__activity_type_id
msgid "Next Activity Type"
msgstr "نوع النشاط التالي"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_search
msgid "Not Cancelled"
msgstr "ليس ملغيًا"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_needaction_counter
msgid "Number of Actions"
msgstr "عدد الإجراءات"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_has_error_counter
msgid "Number of errors"
msgstr "عدد الاخطاء"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr "عدد الرسائل التي تتطلب إجراء"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "عدد الرسائل الحادث بها خطأ في التسليم"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__message_unread_counter
msgid "Number of unread messages"
msgstr "عدد الرسائل الجديدة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__paid_date
msgid "Paid Date"
msgstr "تاريخ السداد"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__parent_id
msgid "Parent"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_account_analytic_account__parent_path
msgid "Parent Path"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__percentage
msgid "Percentage"
msgstr ""
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Period"
msgstr "الفترة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__planned_amount
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Planned Amount"
msgstr "المبلغ المخطط"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_graph
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_pivot
msgid "Planned amount"
msgstr "المبلغ المخطط"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_percentage_wizard_form
msgid "Please Select Budgetary Positions Percentage"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__practical_amount
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_account_analytic_account_form_inherit_budget
msgid "Practical Amount"
msgstr "المبلغ الفعلي"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_graph
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_pivot
msgid "Practical amount"
msgstr "المبلغ الفعلي"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
msgid "Reset to Draft"
msgstr "إعادة التعيين لحالة مسودة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__user_id
msgid "Responsible"
msgstr "المسئول"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__activity_user_id
msgid "Responsible User"
msgstr "المستخدم المسؤول"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_has_sms_error
msgid "SMS Delivery error"
msgstr "خطأ في تسليم الرسائل القصيرة"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
msgid "Show all records which has next action date is before today"
msgstr "عرض كافة السجلات المُعين لها تاريخ إجراء تالي يسبق تاريخ اليوم الجاري"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__date_from
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__date_from
msgid "Start Date"
msgstr "تاريخ البداية"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__state
msgid "Status"
msgstr "الحالة"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
"الحالة على أساس الأنشطة\n"
"المتأخرة: تاريخ الاستحقاق مر\n"
"اليوم: تاريخ النشاط هو اليوم\n"
"المخطط: الأنشطة المستقبلية."
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#, python-format
msgid "The budget must have at least one account."
msgstr "يجب أن تحتوي الموازنة على حساب واحد على الأقل."
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_lines__theoritical_amount
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_view_form
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_account_analytic_account_form_inherit_budget
msgid "Theoretical Amount"
msgstr "القيمة النظرية"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_graph
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_line_pivot
msgid "Theoretical amount"
msgstr "القيمة النظرية"
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#, python-format
msgid "This Account %s is already exist in another budget."
msgstr "هذا الحساب %s موجود بالفعل في ميزانية أخرى."
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
msgid "To Approve"
msgstr "للاعتماد"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
msgid "To Approve Budgets"
msgstr "للموافقة علي الموازنة"
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.view_crossovered_budget_search
msgid "Today Activities"
msgstr "نشاطات اليوم"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__practical_amount
msgid "Total amount of money that has been spent"
msgstr ""
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "نوع النشاط الاستثنائي المسجل."
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_unread
msgid "Unread Messages"
msgstr "الرسائل الجديدة"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__message_unread_counter
msgid "Unread Messages Counter"
msgstr "عدد الرسائل الجديدة"
#. module: odex25_account_budget
#: model_terms:ir.actions.act_window,help:odex25_account_budget.act_crossovered_budget_view
msgid "Use budgets to compare actual with expected revenues and costs"
msgstr "استخدم موازنات لمقارنة الربح الحقيقي مع الربح المتوقع والتكاليف"
#. module: odex25_account_budget
#: model:ir.model.fields.selection,name:odex25_account_budget.selection__crossovered_budget__state__validate
msgid "Validated"
msgstr "تم الاعتماد"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget__website_message_ids
msgid "Website Messages"
msgstr "رسائل الموقع"
#. module: odex25_account_budget
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget__website_message_ids
msgid "Website communication history"
msgstr "سجل تواصل الموقع"
#. module: odex25_account_budget
#: model:ir.model.fields,field_description:odex25_account_budget.field_crossovered_budget_percentage_line_wizard__wizard_id
msgid "Wizard"
msgstr ""
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#, python-format
msgid "You cannot delete a budget that is used in a budget line."
msgstr "لا يمكنك حذف الميزانية المستخدمة في بند الميزانية"
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#, python-format
msgid ""
"You have to enter at least a budgetary position or analytic account on a "
"budget line."
msgstr ""
"يجب أن تُدرج على الأقل موقفًا موازنيًا أو حسابًا تحليلًا واحدًا في بند "
"الموازنة."
#. module: odex25_account_budget
#: model_terms:ir.ui.view,arch_db:odex25_account_budget.crossovered_budget_percentage_wizard_form
msgid "or"
msgstr "أو"
#. module: odex25_account_budget
#: code:addons/odex25_account_budget/models/account_budget.py:0
#: model:ir.model.fields,help:odex25_account_budget.field_crossovered_budget_lines__analytic_account_id
#, python-format
msgid "الحساب التحليلي المرتبط بالميزانية"
msgstr ""

View File

View File

@ -17,7 +17,7 @@ class AccountBudgetPost(models.Model):
name = fields.Char('Name', required=True) name = fields.Char('Name', required=True)
account_ids = fields.Many2many('account.account', 'account_budget_rel', 'budget_id', 'account_id', 'Accounts', account_ids = fields.Many2many('account.account', 'account_budget_rel', 'budget_id', 'account_id', 'Accounts',
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]") domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",copy=False)
company_id = fields.Many2one('res.company', 'Company', required=True, company_id = fields.Many2one('res.company', 'Company', required=True,
default=lambda self: self.env.company) default=lambda self: self.env.company)
@ -38,7 +38,19 @@ class AccountBudgetPost(models.Model):
account_ids = self.account_ids account_ids = self.account_ids
if not account_ids: if not account_ids:
raise ValidationError(_('The budget must have at least one account.')) raise ValidationError(_('The budget must have at least one account.'))
def unlink(self):
# raise an error if the budget is used in a crossovered.budget.lines
for budget in self:
if self.env['crossovered.budget.lines'].search_count([('general_budget_id', '=', budget.id)]):
raise ValidationError(_('You cannot delete a budget that is used in a budget line.'))
@api.constrains('account_ids')
def check_account_only_exist_in_one_budget(self):
for budget in self.search([]):
for account in self.account_ids:
if budget.account_ids == account and budget.id != self.id:
raise ValidationError(_('This Account %s is already exist in another budget.', account.name))
# _('%s (rounding)', biggest_tax_line.name),
@api.model @api.model
def create(self, vals): def create(self, vals):
self._check_account_ids(vals) self._check_account_ids(vals)
@ -57,8 +69,8 @@ class CrossoveredBudget(models.Model):
name = fields.Char('Budget Name', required=True, tracking=True) name = fields.Char('Budget Name', required=True, tracking=True)
user_id = fields.Many2one('res.users', 'Responsible', default=lambda self: self.env.user, tracking=True) user_id = fields.Many2one('res.users', 'Responsible', default=lambda self: self.env.user, tracking=True)
date_from = fields.Date('Start Date', required=True, tracking=True, copy=True) date_from = fields.Date('Start Date', required=True, tracking=True)
date_to = fields.Date('End Date', required=True, tracking=True, copy=True) date_to = fields.Date('End Date', required=True, tracking=True)
state = fields.Selection([ state = fields.Selection([
('draft', 'Draft'), ('draft', 'Draft'),
('cancel', 'Cancelled'), ('cancel', 'Cancelled'),
@ -86,10 +98,6 @@ class CrossoveredBudget(models.Model):
def action_budget_done(self): def action_budget_done(self):
self.write({'state': 'done'}) self.write({'state': 'done'})
def copy(self, default=None):
default = dict(default or {}, name=_("%s (copy)") % (self.name))
return super(CrossoveredBudget, self).copy(default)
class CrossoveredBudgetLines(models.Model): class CrossoveredBudgetLines(models.Model):
_name = "crossovered.budget.lines" _name = "crossovered.budget.lines"
@ -98,14 +106,12 @@ class CrossoveredBudgetLines(models.Model):
name = fields.Char(compute='_compute_line_name') name = fields.Char(compute='_compute_line_name')
crossovered_budget_id = fields.Many2one('crossovered.budget', 'Budget', ondelete='cascade', index=True, crossovered_budget_id = fields.Many2one('crossovered.budget', 'Budget', ondelete='cascade', index=True,
required=True) required=True)
analytic_account_id = fields.Many2one('account.analytic.account', 'Analytic Account') analytic_account_id = fields.Many2one('account.analytic.account', 'Analytic Account',help=_("الحساب التحليلي المرتبط بالميزانية"))
analytic_group_id = fields.Many2one('account.analytic.group', 'Analytic Group', analytic_group_id = fields.Many2one('account.analytic.group', 'Analytic Group',
related='analytic_account_id.group_id', readonly=True) related='analytic_account_id.group_id', readonly=True)
general_budget_id = fields.Many2one('account.budget.post', 'Budgetary Position') general_budget_id = fields.Many2one('account.budget.post', 'Budgetary Position')
date_from = fields.Date('Start Date', related='crossovered_budget_id.date_from', readonly=False, date_from = fields.Date('Start Date', required=True ,related='crossovered_budget_id.date_from',readonly=False,store=True,default=fields.Date.today())
store=True) date_to = fields.Date('End Date', required=True , related='crossovered_budget_id.date_to',readonly=False,store=True,default=fields.Date.today())
date_to = fields.Date('End Date', related='crossovered_budget_id.date_to', readonly=False,
store=True)
paid_date = fields.Date('Paid Date') paid_date = fields.Date('Paid Date')
currency_id = fields.Many2one('res.currency', related='company_id.currency_id', readonly=True) currency_id = fields.Many2one('res.currency', related='company_id.currency_id', readonly=True)
planned_amount = fields.Monetary( planned_amount = fields.Monetary(

View File

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

View File

View File

View File

@ -25,7 +25,7 @@
<field name="crossovered_budget_line" widget="one2many" colspan="4" nolabel="1" mode="tree"> <field name="crossovered_budget_line" widget="one2many" colspan="4" nolabel="1" mode="tree">
<tree string="Budget Items" editable="top"> <tree string="Budget Items" editable="top">
<field name="crossovered_budget_id"/> <field name="crossovered_budget_id"/>
<field name="general_budget_id"/> <field name="general_budget_id" optional="show"/>
<field name="date_from"/> <field name="date_from"/>
<field name="date_to"/> <field name="date_to"/>
<field name="paid_date"/> <field name="paid_date"/>

View File

@ -86,8 +86,7 @@ Budgets
</div> </div>
<group> <group>
<group> <group>
<field name="user_id" attrs="{'readonly':[('state','!=','draft')]}" <field name="user_id" attrs="{'readonly':[('state','!=','draft')]}" domain="[('share', '=', False)]"/>
domain="[('share', '=', False)]"/>
</group> </group>
<group> <group>
<label for="date_from" string="Period"/> <label for="date_from" string="Period"/>
@ -106,14 +105,9 @@ Budgets
<field name="crossovered_budget_line" <field name="crossovered_budget_line"
context="{'default_date_from': date_from,'default_date_to': date_to}" colspan="4" context="{'default_date_from': date_from,'default_date_to': date_to}" colspan="4"
nolabel="1" attrs="{'readonly':[('state','!=','draft')]}"> nolabel="1" attrs="{'readonly':[('state','!=','draft')]}">
<tree string="Budget Lines" <tree string="Budget Lines" decoration-success="is_above_budget and planned_amount &gt; 0" decoration-danger="is_above_budget and planned_amount &lt; 0" editable="bottom">
decoration-success="is_above_budget and planned_amount &gt; 0" <field name="general_budget_id" domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]" optional="show"/>
decoration-danger="is_above_budget and planned_amount &lt; 0" editable="bottom"> <field name="analytic_account_id" domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]" groups="analytic.group_analytic_accounting"/>
<field name="general_budget_id"
domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
<field name="analytic_account_id"
domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"
groups="analytic.group_analytic_accounting"/>
<field name="date_from"/> <field name="date_from"/>
<field name="date_to"/> <field name="date_to"/>
<field name="paid_date" groups="base.group_no_one"/> <field name="paid_date" groups="base.group_no_one"/>
@ -274,13 +268,11 @@ Budgets
<search string="Budget Lines"> <search string="Budget Lines">
<field name="analytic_account_id"/> <field name="analytic_account_id"/>
<field name="crossovered_budget_id"/> <field name="crossovered_budget_id"/>
<filter name="filter_not_cancelled" string="Not Cancelled" <filter name="filter_not_cancelled" string="Not Cancelled" domain="[('crossovered_budget_state','!=','cancel')]"/>
domain="[('crossovered_budget_state','!=','cancel')]"/>
<separator/> <separator/>
<filter string="Date" name="filter_date_from" date="date_from"/> <filter string="Date" name="filter_date_from" date="date_from"/>
<group expand="0" string="Group By"> <group expand="0" string="Group By">
<filter name="group_crossevered_budgdet_id" string="Budgets" domain="[]" <filter name="group_crossevered_budgdet_id" string="Budgets" domain="[]" context="{'group_by':'crossovered_budget_id'}"/>
context="{'group_by':'crossovered_budget_id'}"/>
</group> </group>
</search> </search>
@ -316,65 +308,29 @@ Budgets
<group col="4"> <group col="4">
<field name="currency_id" invisible="1"/> <field name="currency_id" invisible="1"/>
<field name="crossovered_budget_state" invisible="1"/> <field name="crossovered_budget_state" invisible="1"/>
<field name="crossovered_budget_id" <field name="crossovered_budget_id" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/> <field name="analytic_account_id" domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="analytic_account_id" <field name="general_budget_id" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]"
attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="general_budget_id"
attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="date_from" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/> <field name="date_from" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="date_to" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/> <field name="date_to" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="paid_date" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/> <field name="paid_date" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="planned_amount" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/> <field name="planned_amount" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="practical_amount" <field name="practical_amount" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/> <field name="theoritical_amount" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="theoritical_amount" <field name="percentage" widget="percentage" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/> <field name="company_id" options="{'no_create': True}" groups="base.group_multi_company" attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="percentage" widget="percentage"
attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"
attrs="{'readonly':[('crossovered_budget_state','!=','draft')]}"/>
</group> </group>
</sheet> </sheet>
</form> </form>
</field> </field>
</record> </record>
<record model="ir.ui.view" id="view_crossovered_budget_line_pivot">
<field name="name">crossovered.budget.line.pivot</field>
<field name="model">crossovered.budget.lines</field>
<field name="arch" type="xml">
<pivot string="Budget Lines" sample="1">
<field name="crossovered_budget_id" type="row"/>
<field name="planned_amount" type="measure" string="Planned amount"/>
<field name="theoritical_amount" type="measure" string="Theoretical amount"/>
<field name="practical_amount" type="measure" string="Practical amount"/>
<field name="percentage" type="measure" widget="percentage"/>
</pivot>
</field>
</record>
<record model="ir.ui.view" id="view_crossovered_budget_line_graph">
<field name="name">crossovered.budget.line.graph</field>
<field name="model">crossovered.budget.lines</field>
<field name="arch" type="xml">
<graph string="Budget Lines" sample="1">
<field name="crossovered_budget_id" type="row"/>
<field name="planned_amount" type="measure" string="Planned amount"/>
<field name="theoritical_amount" type="measure" string="Theoretical amount"/>
<field name="practical_amount" type="measure" string="Practical amount"/>
</graph>
</field>
</record>
<record model="ir.actions.act_window" id="act_crossovered_budget_lines_view"> <record model="ir.actions.act_window" id="act_crossovered_budget_lines_view">
<field name="name">Budgets Analysis</field> <field name="name">Budgets Analysis</field>
<field name="res_model">crossovered.budget.lines</field> <field name="res_model">crossovered.budget.lines</field>
<field name="view_mode">tree,form,pivot,graph</field> <field name="view_mode">tree,form,pivot,graph</field>
<field name="view_id" eval="False"/> <field name="view_id" eval="False"/>
<field name="context">{'search_default_group_crossevered_budgdet_id': True, <field name="context">{'search_default_group_crossevered_budgdet_id': True, 'search_default_filter_not_cancelled':True}</field>
'search_default_filter_not_cancelled':True}
</field>
</record> </record>
<menuitem parent="account.account_reports_management_menu" <menuitem parent="account.account_reports_management_menu"
@ -385,9 +341,7 @@ Budgets
<record id="act_account_analytic_account_cb_lines" model="ir.actions.act_window"> <record id="act_account_analytic_account_cb_lines" model="ir.actions.act_window">
<field name="name">Budget Items</field> <field name="name">Budget Items</field>
<field name="res_model">crossovered.budget.lines</field> <field name="res_model">crossovered.budget.lines</field>
<field name="context">{'search_default_analytic_account_id': [active_id], 'default_analytic_account_id': <field name="context">{'search_default_analytic_account_id': [active_id], 'default_analytic_account_id': active_id}</field>
active_id}
</field>
</record> </record>
</odoo> </odoo>