diff --git a/odex25_hr/hr_training_payment/__init__.py b/odex25_hr/hr_training_payment/__init__.py
new file mode 100644
index 000000000..f5ba686bc
--- /dev/null
+++ b/odex25_hr/hr_training_payment/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+from . import models
\ No newline at end of file
diff --git a/odex25_hr/hr_training_payment/__manifest__.py b/odex25_hr/hr_training_payment/__manifest__.py
new file mode 100644
index 000000000..f469da183
--- /dev/null
+++ b/odex25_hr/hr_training_payment/__manifest__.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "HR Training Payment",
+
+ 'summary': """
+ HR Training Payment
+ """,
+
+ 'description': """
+ HR Training Payment
+ """,
+ 'category': 'Odex25-HR/Odex25-HR',
+ 'version': '1.0',
+ 'sequence': 6,
+ 'website': 'http://exp-sa.com',
+ 'license': 'GPL-3',
+ 'author': 'Expert Co. Ltd.',
+ 'depends': ['exp_official_mission','purchase_requisition_custom'],
+
+ 'data': [
+ "views/hr_official_mission.xml",
+ "views/mission_type.xml",
+
+ ],
+
+}
diff --git a/odex25_hr/hr_training_payment/i18n/ar_001.po b/odex25_hr/hr_training_payment/i18n/ar_001.po
new file mode 100644
index 000000000..a1c75070d
--- /dev/null
+++ b/odex25_hr/hr_training_payment/i18n/ar_001.po
@@ -0,0 +1,50 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * hr_training_payment
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-02-06 18:03+0000\n"
+"PO-Revision-Date: 2025-02-06 18:03+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: hr_training_payment
+#: code:addons/hr_training_payment/models/hr_official_mission.py:0
+#, python-format
+msgid ""
+"Employee \"%s\" has no contract Please create contract to add line to "
+"advantages"
+msgstr ""
+
+#. module: hr_training_payment
+#: model:ir.model,name:hr_training_payment.model_hr_official_mission
+msgid "Official mission"
+msgstr ""
+
+#. module: hr_training_payment
+#: model:ir.model.fields,field_description:hr_training_payment.field_hr_official_mission_type__pr_product_id
+msgid "PR Product"
+msgstr "منتج طلب الشراء"
+
+#. module: hr_training_payment
+#: model:ir.model.fields,field_description:hr_training_payment.field_hr_official_mission__purchase_request_id
+msgid "Purchase Request"
+msgstr "طلب الشراء"
+
+#. module: hr_training_payment
+#: code:addons/hr_training_payment/models/hr_official_mission.py:0
+#, python-format
+msgid "You do not have account or journal in mission type \"%s\" "
+msgstr ""
+
+#. module: hr_training_payment
+#: model:ir.model,name:hr_training_payment.model_hr_official_mission_type
+msgid "hr.official.mission.type"
+msgstr ""
diff --git a/odex25_hr/hr_training_payment/models/__init__.py b/odex25_hr/hr_training_payment/models/__init__.py
new file mode 100644
index 000000000..59af57ad5
--- /dev/null
+++ b/odex25_hr/hr_training_payment/models/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import hr_official_mission
+from . import mission_type
\ No newline at end of file
diff --git a/odex25_hr/hr_training_payment/models/hr_official_mission.py b/odex25_hr/hr_training_payment/models/hr_official_mission.py
new file mode 100644
index 000000000..b1f054d25
--- /dev/null
+++ b/odex25_hr/hr_training_payment/models/hr_official_mission.py
@@ -0,0 +1,141 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, fields, api, exceptions
+from datetime import datetime, date, timedelta
+import calendar
+
+
+class HrOfficialMission(models.Model):
+ _inherit = 'hr.official.mission'
+
+ purchase_request_id = fields.Many2one(comodel_name='purchase.request', string="Purchase Request")
+
+
+
+ def approve(self):
+ # check if there is dealing with financial
+ self.employee_ids.chick_not_overtime()
+ if self.mission_type.work_state == 'training':
+ product_line = {
+ 'product_id': self.mission_type.pr_product_id.id,
+ 'qty': 1,
+ 'expected_price': self.Training_cost,
+ }
+
+ purchase_request = self.env['purchase.request'].create({
+ 'state': 'draft',
+ 'department_id': self.department_id2.id,
+ 'date': date.today(),
+ 'employee_id': self.employee_id.id,
+ 'partner_id': self.partner_id.id,
+ 'product_category_ids':[(4, self.mission_type.pr_product_id.categ_id.id)] ,
+ 'purchase_purpose': self.mission_purpose,
+ 'line_ids': [(0, 0, product_line)]
+ })
+
+ self.purchase_request_id = purchase_request.id
+ else:
+
+ if self.employee_ids and self.mission_type.related_with_financial:
+ # move amounts to journal entries
+ if self.move_type == 'accounting':
+ if self.mission_type.account_id and self.mission_type.journal_id:
+ for item in self.employee_ids:
+ if item.amount > 0.0:
+ debit_line_vals = {
+ 'name': item.employee_id.name + ' in official mission "%s" ' % self.mission_type.name,
+ 'debit': item.amount,
+ 'account_id': self.mission_type.account_id.id,
+ 'partner_id': item.employee_id.user_id.partner_id.id
+ }
+ credit_line_vals = {
+ 'name': item.employee_id.name + ' in official mission "%s" ' % self.mission_type.name,
+ 'credit': item.amount,
+ 'account_id': self.mission_type.journal_id.default_account_id.id,
+ 'partner_id': item.employee_id.user_id.partner_id.id
+ }
+ move = self.env['account.move'].create({
+ 'state': 'draft',
+ 'journal_id': self.mission_type.journal_id.id,
+ 'date': date.today(),
+ 'ref': 'Official mission for employee "%s" ' % item.employee_id.name,
+ 'line_ids': [(0, 0, debit_line_vals), (0, 0, credit_line_vals)]
+ })
+ # fill account move for each employee
+ item.write({'account_move_id': move.id})
+ else:
+ raise exceptions.Warning(
+ _('You do not have account or journal in mission type "%s" ') % self.mission_type.name)
+
+ # move amounts to advantages of employee in contract
+ elif self.move_type == 'payroll':
+ # get start and end date of the current month
+ current_date = date.today()
+ month_start = date(current_date.year, current_date.month, 1)
+ month_end = date(current_date.year, current_date.month, calendar.mdays[current_date.month])
+ for line in self.employee_ids:
+ if line.employee_id.contract_id:
+
+ advantage_arc = line.env['contract.advantage'].create({
+ 'benefits_discounts': self.official_mission.id,
+ 'date_from': month_start,
+ 'date_to': month_end,
+ 'amount': line.amount,
+ 'official_mission_id': True,
+ 'employee_id': line.employee_id.id,
+ 'contract_advantage_id': line.employee_id.contract_id.id,
+ 'out_rule': True,
+ 'state': 'confirm',
+ 'comments': self.mission_purpose})
+ line.advantage_id = advantage_arc.id
+
+ print(advantage_arc,"the type is payroll advantage created>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
+ else:
+ raise exceptions.Warning(_(
+ 'Employee "%s" has no contract Please create contract to add line to advantages')
+ % line.employee_id.name)
+
+ for item in self:
+ # create ticket request from all employee
+ if item.issuing_ticket == 'yes':
+ for emp in item.employee_ids:
+ ticket = self.env['hr.ticket.request'].create({
+ 'employee_id': emp.employee_id.id,
+ 'mission_request_id': item.id,
+ 'mission_check': True,
+ 'request_for': item.ticket_cash_request_for,
+ 'request_type': item.ticket_cash_request_type.id,
+ 'cost_of_tickets': item.get_ticket_cost(emp.employee_id),
+ 'destination': item.destination.id,
+ })
+ item.write({'ticket_request_id': ticket.id})
+
+ # move invoice training cost our trining center
+ if item.Training_cost > 0:
+ invoice_line_vals = {
+ 'name': 'Training Cost for Course Name %s Training Center %s' % (
+ item.course_name.name, item.partner_id.name),
+ 'price_unit': item.Training_cost,
+ # 'account_id': self.mission_type.journal_id.default_credit_account_id.id,
+ 'account_id': item.partner_id.property_account_payable_id.id,
+ # 'partner_id': item.employee_id.user_id.partner_id.id
+ }
+ invoice = self.env['account.move'].create({
+ 'state': 'draft',
+ 'move_type': 'in_invoice',
+ 'journal_id': item.mission_type.journal_id.id,
+ 'partner_id': item.partner_id.id,
+ 'invoice_date': date.today(),
+ 'ref': 'Training Cost for Course Name %s ' % item.course_name.name,
+ 'invoice_line_ids': [(0, 0, invoice_line_vals)]
+ })
+ item.write({'Tra_cost_invo_id': invoice.id})
+
+ self.state = "approve"
+ if self.mission_type.work_state and self.mission_type.duration_type == 'days':
+ for emp in self.employee_ids:
+ if emp.date_to >= fields.Date.today() >= emp.date_from:
+ emp.employee_id.write({'work_state': self.mission_type.work_state, 'active_mission_id': emp.id})
+ self.call_cron_function()
+
+
diff --git a/odex25_hr/hr_training_payment/models/mission_type.py b/odex25_hr/hr_training_payment/models/mission_type.py
new file mode 100644
index 000000000..ee2328759
--- /dev/null
+++ b/odex25_hr/hr_training_payment/models/mission_type.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, fields, api
+
+
+class HrOfficialMissionType(models.Model):
+ _inherit = 'hr.official.mission.type'
+ pr_product_id = fields.Many2one(comodel_name='product.product', string="PR Product")
+
diff --git a/odex25_hr/hr_training_payment/views/hr_official_mission.xml b/odex25_hr/hr_training_payment/views/hr_official_mission.xml
new file mode 100644
index 000000000..17e9dd990
--- /dev/null
+++ b/odex25_hr/hr_training_payment/views/hr_official_mission.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ hr.official.mission.view.form
+ hr.official.mission
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
diff --git a/odex25_hr/hr_training_payment/views/mission_type.xml b/odex25_hr/hr_training_payment/views/mission_type.xml
new file mode 100644
index 000000000..b77937c1a
--- /dev/null
+++ b/odex25_hr/hr_training_payment/views/mission_type.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ hr.official.mission.type.view.form
+ hr.official.mission.type
+
+
+
+
+
+
+
+
+
+
+