diff --git a/odex25_benefit/odex_benefit/i18n/ar_001.po b/odex25_benefit/odex_benefit/i18n/ar_001.po index 247e92f45..5dd6806b3 100644 --- a/odex25_benefit/odex_benefit/i18n/ar_001.po +++ b/odex25_benefit/odex_benefit/i18n/ar_001.po @@ -18644,18 +18644,3 @@ msgid "" "requests: %s, Current request: %s, Total: %s)" msgstr "الجهاز '%s': لا يمكنك طلب أكثر من %s وحدة خلال %s %s. (الطلبات السابقة: %s، الطلب الحالي: %s، المجموع: %s)" -#. module: odex_benefit -#: code:addons/odex_benefit/models/service_request.py:0 -#, python-format -msgid "" -"Cannot create invoice: the following requests have no electrical device lines:\n" -"%s\n" -"All selected requests must contain at least one device line." -msgstr "لا يمكن إنشاء الفاتورة: الطلبات التالية لا تحتوي على أجهزة كهربائية:\n" - -#. module: odex_benefit -#: code:addons/odex_benefit/models/service_request.py:0 -#, python-format -msgid "No invoice lines could be created." -msgstr "لم يتم إنشاء أي بنود في الفاتورة." - diff --git a/odex25_benefit/odex_benefit/models/service_request.py b/odex25_benefit/odex_benefit/models/service_request.py index 3bca6d480..ff2b9856c 100644 --- a/odex25_benefit/odex_benefit/models/service_request.py +++ b/odex25_benefit/odex_benefit/models/service_request.py @@ -1276,47 +1276,70 @@ class ServiceRequest(models.Model): "• Not be linked to any invoice" ) % names) - empty_requests = self.filtered(lambda r: not r.electrical_device_line_ids) - if empty_requests: - names = ", ".join(empty_requests.mapped('name')) - raise UserError(_( - "Cannot create invoice: the following requests have no electrical device lines:\n%s\n" - "All selected requests must contain at least one device line." - ) % names) for rec in self: - line_ids = [] - for line in rec.electrical_device_line_ids: - invoice_line_vals = { - 'name': rec.name or _('Electrical Device Line'), - 'product_id': line.product_id.id or False, - 'account_id': line.device_id.account_id.id or False, - 'analytic_account_id': ( - rec.family_id.branch_family_id.branch.analytic_account_id.id - if rec.family_id.branch_family_id - and rec.family_id.branch_family_id.branch - and rec.family_id.branch_family_id.branch.analytic_account_id - else False - ), - 'quantity': line.quantity, - 'price_unit': line.unit_price, - 'benefit_family_id': rec.family_id.id, - } - line_ids.append((0, 0, invoice_line_vals)) - - if not line_ids: - raise UserError(_("No invoice lines could be created.")) + invoice_lines = rec._prepare_invoice_lines() + if not invoice_lines: + raise UserError(_( + "Cannot create invoice for request '%s': No invoice lines could be created." + ) % rec.name) vendor_bill = self.env['account.move'].create({ 'move_type': 'in_invoice', 'partner_id': rec.service_producer_id.id, 'partner_shipping_id': rec.family_id.partner_id.id, 'journal_id': validation_setting.journal_id.id, # 'accountant_id': self.accountant_id.id, - 'invoice_line_ids': line_ids, + 'invoice_line_ids': invoice_lines, 'ref': rec.name or False, }) rec.vendor_bill = vendor_bill + def _prepare_invoice_lines(self): + self.ensure_one() + line_ids = [] + if self.service_type == 'electrical_devices': + if not self.electrical_device_line_ids: + return line_ids + + for line in self.electrical_device_line_ids: + line_ids.append((0, 0, { + 'name': self.name or _('Electrical Device Line'), + 'product_id': line.product_id.id or False, + 'account_id': line.device_id.account_id.id or False, + 'analytic_account_id': self._get_analytic_account_id(), + 'quantity': line.quantity, + 'price_unit': line.unit_price, + 'benefit_family_id': self.family_id.id, + })) + else: + description_parts = [] + if self.family_id and self.family_id.name: + description_parts.append(self.family_id.name) + if self.description: + description_parts.append(self.description) + if self.name: + description_parts.append(self.name) + + line_name = '/'.join(description_parts) if description_parts else _('Service') + line_ids.append((0, 0, { + 'name': line_name, + 'account_id': self.account_id.id or False, + 'analytic_account_id': self._get_analytic_account_id(), + 'quantity': self.service_qty or 1, + 'price_unit': self.requested_service_amount, + 'benefit_family_id': self.family_id.id, + })) + + return line_ids + + def _get_analytic_account_id(self): + self.ensure_one() + if (self.family_id.branch_family_id and + self.family_id.branch_family_id.branch and + self.family_id.branch_family_id.branch.analytic_account_id): + return self.family_id.branch_family_id.branch.analytic_account_id.id + return False + def _get_total_move_lines(self): for rec in self: if self.service_cat.payment_method == "payment_order": diff --git a/odex25_benefit/odex_benefit/security/ir.model.access.csv b/odex25_benefit/odex_benefit/security/ir.model.access.csv index 11cf3b686..5476cb3d2 100644 --- a/odex25_benefit/odex_benefit/security/ir.model.access.csv +++ b/odex25_benefit/odex_benefit/security/ir.model.access.csv @@ -4,6 +4,7 @@ access_benefit_woman_commitee_record,access_benefit_record,model_grant_benefit,o access_benefit_branch_manager_record,access_benefit_branch_manager_record,model_grant_benefit,odex_benefit.group_benefit_branch_manager,1,1,0,1 access_benefit_manager_record,access_benefit_manager_record,model_grant_benefit,odex_benefit.group_benefit_manager,1,1,1,1 access_benefit_family_services_manager,access_benefit_family_services_manager,model_grant_benefit,odex_benefit.group_family_services_manager,1,1,1,1 +access_benefit_family_services_department_manager,access_benefit_family_services_department_manager,model_grant_benefit,odex_benefit.group_family_services_department_manager,1,1,1,1 access_education_status_all,education_status,model_education_status,odex_benefit.group_benefit_info,1,1,1,1 access_education_status_all_users,education_status_all_users,model_education_status,,1,0,0,0 access_weak_course_all,weak_course,model_weak_course,odex_benefit.group_benefit_info,1,1,1,1 @@ -126,6 +127,8 @@ access_suspend_reason,access_suspend_reason,model_suspend_reason,,1,0,0,0 access_suspend_reason_settings,access_suspend_reason_settings,model_suspend_reason,odex_benefit.group_benefit_settings,1,1,1,1 access_suspend_reason_wizard,access_suspend_reason_wizard,model_suspend_reason_wizard,,1,1,1,1 access_expense_family_services_manager,access_expense_family_services_manager,model_confirm_benefit_expense,odex_benefit.group_family_services_manager,1,1,1,1 +access_expense_family_services_department_manager,access_expense_family_services_department_manager,model_confirm_benefit_expense,odex_benefit.group_family_services_department_manager,1,1,1,1 + access_expense_benefit_manager,access_expense_benefit_manager,model_confirm_benefit_expense,odex_benefit.group_benefit_manager,1,1,1,1 access_expense_researcher,access_expense_researcher,model_confirm_benefit_expense,odex_benefit.group_benefit_info,1,0,0,0 access_branch_settings,access_branch_settings,model_branch_settings,base.group_user,1,0,0,0 @@ -154,6 +157,7 @@ access_exception_reason,access_exception_reason,model_exception_reason,base.grou access_exception_reason_settings,access_exception_reason_settings,model_exception_reason,odex_benefit.group_benefit_settings,1,1,1,1 access_service_request,access_service_request,model_service_request,base.group_user,1,1,1,1 access_seasonal_service_family_services_manager,access_seasonal_service_family_services_manager,model_seasonal_service,odex_benefit.group_family_services_manager,1,1,1,1 +access_seasonal_service_family_services_department_manager,access_seasonal_service_family_services_department_manager,model_seasonal_service,odex_benefit.group_family_services_department_manager,1,1,1,1 access_seasonal_service_benefit_manager,access_seasonal_service_benefit_manager,model_seasonal_service,odex_benefit.group_benefit_manager,1,1,1,1 access_seasonal_service_researcher,access_seasonal_service_researcher,model_seasonal_service,odex_benefit.group_benefit_info,1,0,0,0 access_marital_status,access_marital_status,model_marital_status,base.group_user,1,0,0,0 @@ -192,6 +196,7 @@ access_survey_user_input_line_group_benefit_info,survey.user_input.line.group_be access_grant_benefit_account_move_line,access_grant_benefit_account_move_line,model_account_move_line,odex_benefit.group_benefit_info,1,0,0,0 access_grant_benefit_account_move,access_grant_benefit_account_move,model_account_move,odex_benefit.group_benefit_info,1,0,0,0 access_expense_line_family_services_manager,access_expense_line_family_services_manager,model_benefit_expense_line,odex_benefit.group_family_services_manager,1,1,1,1 +access_expense_line_family_services_department_manager,access_expense_line_family_services_department_manager,model_benefit_expense_line,odex_benefit.group_family_services_department_manager,1,1,1,1 access_expense_line_benefit_manager,access_expense_line_benefit_manager,model_benefit_expense_line,odex_benefit.group_benefit_manager,1,1,1,1 access_expense_researcher,access_expense_researcher,model_benefit_expense_line,odex_benefit.group_benefit_info,1,1,0,0 access_expense_line_payment_accountant_accept,access_expense_line_payment_accountant_accept,model_benefit_expense_line,odex_benefit.group_benefit_payment_accountant_accept,1,1,0,0 diff --git a/odex25_benefit/odex_benefit/security/security_view.xml b/odex25_benefit/odex_benefit/security/security_view.xml index 6ce2284f4..e4d43313e 100644 --- a/odex25_benefit/odex_benefit/security/security_view.xml +++ b/odex25_benefit/odex_benefit/security/security_view.xml @@ -115,6 +115,12 @@ + + Family Services Department Manager + + + + Services - Legal Department @@ -138,7 +144,7 @@ Show All Benefits Profiles [(1, '=', 1)] - + @@ -171,7 +177,7 @@ Show All Visit Location [(1, '=', 1)] - + @@ -220,7 +226,7 @@ Show All Family Complaints [(1, '=', 1)] - + @@ -300,7 +306,7 @@ Show All Family Members [(1, '=', 1)] - + @@ -344,7 +350,7 @@ Show All Bank Return Line [(1, '=', 1)] - +