monthly family expenses notes => odex_benefit
This commit is contained in:
parent
bfa0778be0
commit
d03e0520c4
|
|
@ -10114,7 +10114,7 @@ msgstr "الاخصائي الاجتماعي"
|
|||
#. module: odex_benefit
|
||||
#: model_terms:ir.ui.view,arch_db:odex_benefit.view_confirm_benefit_expense_form
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
msgstr "إرجاع"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: code:addons/odex_benefit/models/benefit.py:0
|
||||
|
|
@ -10257,7 +10257,7 @@ msgstr ""
|
|||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__sa_iban
|
||||
msgid "SA"
|
||||
msgstr ""
|
||||
msgstr "الايبان"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_benefits_representative__is_seo_optimized
|
||||
|
|
@ -15961,3 +15961,27 @@ msgstr "سنوات"
|
|||
msgid "Max Amount"
|
||||
msgstr "الحد الأقصى للمبلغ"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields.selection,name:odex_benefit.selection__confirm_benefit_expense__state__assistant_general_manager
|
||||
msgid "Waiting For The Assistant General Manager"
|
||||
msgstr "بإنتظار مساعد المدير العام"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__start_date
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_start
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__start
|
||||
msgid "Start Date"
|
||||
msgstr "تاريخ البداية"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_confirm_benefit_expense__end_date
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__end
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_service_request__new_end
|
||||
msgid "End Date"
|
||||
msgstr "تاريخ النهاية"
|
||||
|
||||
#. module: odex_benefit
|
||||
#: model:ir.model.fields,field_description:odex_benefit.field_grant_benefit__last_disbursement_date
|
||||
msgid "Last disbursement date"
|
||||
msgstr "تاريخ أخر صرف"
|
||||
|
||||
|
|
|
|||
|
|
@ -609,6 +609,7 @@ class GrantBenefitProfile(models.Model):
|
|||
related='company_id.currency_id')
|
||||
family_edit = fields.Boolean(string='Family Edit', default=False)
|
||||
family_return_reason = fields.Text(string="Family Return Reason")
|
||||
last_disbursement_date = fields.Date(string="Last disbursement date", readonly=True)
|
||||
|
||||
_sql_constraints = [
|
||||
('unique_code', "unique (code) WHERE state NOT IN ('draft', 'new')", 'This code already exists')
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ from dateutil.relativedelta import relativedelta
|
|||
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools import date_utils
|
||||
|
||||
|
||||
class ConfirmBenefitExpense(models.Model):
|
||||
|
|
@ -10,9 +11,24 @@ class ConfirmBenefitExpense(models.Model):
|
|||
_description = 'Confirm Benefit Expense'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
|
||||
# region [Default Methods]
|
||||
|
||||
def _default_start_date(self):
|
||||
today = fields.Date.today()
|
||||
start_date = date_utils.start_of(today, 'month')
|
||||
return start_date
|
||||
|
||||
def _default_end_date(self):
|
||||
today = fields.Date.today()
|
||||
end_date = date_utils.end_of(today, 'month')
|
||||
return end_date
|
||||
|
||||
# endregion [Default Methods]
|
||||
|
||||
family_expense_seq = fields.Char(string="Family Expense Sequence", copy=False, readonly=True, default=lambda x: _('New'))
|
||||
state = fields.Selection(selection=[
|
||||
('draft', 'Draft'),
|
||||
('assistant_general_manager', 'Waiting For The Assistant General Manager'), # Translate
|
||||
('depart_manager', 'Department Manager'),
|
||||
('account_manager', 'Account Manager'),
|
||||
('cancel', 'Cancelled'),
|
||||
|
|
@ -25,8 +41,10 @@ class ConfirmBenefitExpense(models.Model):
|
|||
journal_id = fields.Many2one(comodel_name='account.journal', string="Journal", required=True,copy=False)
|
||||
|
||||
name = fields.Char(string="Name", states={'confirm': [('readonly', True)]}, copy=False)
|
||||
date = fields.Date(string="Date", default=fields.Date.context_today, required=True,
|
||||
date = fields.Date(string="Date", default=fields.Date.context_today, required=False,
|
||||
states={'confirm': [('readonly', True)]})
|
||||
start_date = fields.Date(string="Start Date", default=_default_start_date, required=True)
|
||||
end_date = fields.Date(string="End Date", required=True, default=_default_end_date)
|
||||
|
||||
family_ids = fields.Many2many(comodel_name='grant.benefit', relation='benefit_expense_grant_rel',
|
||||
column1='expense_id',
|
||||
|
|
@ -82,7 +100,7 @@ class ConfirmBenefitExpense(models.Model):
|
|||
# else:
|
||||
# record.family_ids = [(5,)] # Clear the records if source_field is empty
|
||||
|
||||
@api.depends('expense_type', 'date', 'branch_custom_id')
|
||||
@api.depends('expense_type', 'date', 'branch_custom_id', 'start_date', 'end_date')
|
||||
def _compute_domain_ids(self):
|
||||
for rec in self:
|
||||
journal_domain = []
|
||||
|
|
@ -105,14 +123,15 @@ class ConfirmBenefitExpense(models.Model):
|
|||
if rec.expense_type == 'family_invoice':
|
||||
base_domain.append(('meal_card', '=', True))
|
||||
|
||||
if rec.date:
|
||||
# if rec.date:
|
||||
if rec.start_date and rec.end_date:
|
||||
# Calculate the start date for the past month range
|
||||
month_ago = rec.date - relativedelta(months=1)
|
||||
# month_ago = rec.date - relativedelta(months=1)
|
||||
|
||||
# Search for conflicting records of the same expense type within the past month
|
||||
conflicting_records = self.search([
|
||||
('date', '>=', month_ago),
|
||||
('date', '<=', rec.date),
|
||||
('date', '>=', rec.start_date),
|
||||
('date', '<=', rec.end_date),
|
||||
('expense_type', '=', rec.expense_type),
|
||||
])
|
||||
|
||||
|
|
@ -152,6 +171,28 @@ class ConfirmBenefitExpense(models.Model):
|
|||
else:
|
||||
self.journal_id = False
|
||||
|
||||
def action_assistant_manager(self):
|
||||
if self.expense_type != 'family_expense':
|
||||
self.state = 'assistant_general_manager'
|
||||
return
|
||||
|
||||
disbursement_date = False
|
||||
# if not disbursement_date:
|
||||
last_expense = self.search(
|
||||
[("state", "=", "confirm"), ("end_date", "!=", False)],
|
||||
order="id desc",
|
||||
limit=1
|
||||
)
|
||||
if last_expense:
|
||||
disbursement_date = last_expense.end_date
|
||||
|
||||
# Apply the disbursement date to all families
|
||||
if disbursement_date:
|
||||
for family in self.family_ids:
|
||||
family.last_disbursement_date = disbursement_date
|
||||
|
||||
self.state = 'assistant_general_manager'
|
||||
|
||||
def action_depart_manager(self):
|
||||
self.state = 'depart_manager'
|
||||
|
||||
|
|
@ -246,7 +287,7 @@ class ConfirmBenefitExpense(models.Model):
|
|||
# for pay in self:
|
||||
# pay.available_payment_method_line_ids = pay.journal_id._get_available_payment_method_lines('outbound')
|
||||
|
||||
@api.onchange('expense_type', 'date', 'branch_custom_id')
|
||||
@api.onchange('expense_type', 'date', 'branch_custom_id', 'start_date', 'end_date')
|
||||
def _onchange_expense_type(self):
|
||||
"""Restrict families to a single expense type per month."""
|
||||
journal_domain = []
|
||||
|
|
@ -270,14 +311,15 @@ class ConfirmBenefitExpense(models.Model):
|
|||
if self.expense_type == 'family_invoice':
|
||||
base_domain.append(('meal_card', '=', True))
|
||||
|
||||
if self.date:
|
||||
# if self.date:
|
||||
if self.start_date and rec.end_date:
|
||||
# Calculate the start date for the past month range
|
||||
month_ago = self.date - relativedelta(months=1)
|
||||
|
||||
# Search for conflicting records of the same expense type within the past month
|
||||
conflicting_records = self.search([
|
||||
('date', '>=', month_ago),
|
||||
('date', '<=', self.date),
|
||||
('date', '>=', self.start_date),
|
||||
('date', '<=', rec.end_date),
|
||||
('expense_type', '=', self.expense_type),
|
||||
])
|
||||
|
||||
|
|
|
|||
|
|
@ -1431,6 +1431,7 @@
|
|||
<field name="family_monthly_meals"/>
|
||||
<field name="family_monthly_clotting"/>
|
||||
<field name="total_family_expenses"/>
|
||||
<field name="last_disbursement_date"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Family Cars">
|
||||
|
|
|
|||
|
|
@ -23,130 +23,135 @@
|
|||
<form string="Confirm Benefit Expense">
|
||||
<header>
|
||||
<field name="state" widget="statusbar"
|
||||
statusbar_visible="draft,depart_manager,account_manager,confirm"/>
|
||||
<button string="Cancel" type="object" name="action_cancel" class="oe_highlight"
|
||||
states="depart_manager,account_manager"/>
|
||||
<button string="Reset" type="object" name="action_reset_to_draft" class="oe_highlight"
|
||||
states="cancel"/>
|
||||
statusbar_visible="draft,assistant_general_manager,depart_manager,account_manager,confirm"/>
|
||||
<!-- <button string="Cancel" type="object" name="action_cancel" class="btn btn-danger"-->
|
||||
<!-- states="assistant_general_manager,depart_manager,account_manager"-->
|
||||
<!-- groups="odex_benefit.group_benefit_manager"/>-->
|
||||
<button string="Confirm" type="object" name="action_assistant_manager" class="oe_highlight"
|
||||
states="draft"/>
|
||||
<button string="Confirm" type="object" name="action_depart_manager" class="oe_highlight"
|
||||
states="draft" groups="odex25_account_payment_fix.group_depart_manager"/>
|
||||
states="assistant_general_manager" groups="odex25_account_payment_fix.group_depart_manager"/>
|
||||
<button string="Reset" type="object" name="action_reset_to_draft" class="btn btn-danger"
|
||||
states="assistant_general_manager" groups="odex25_account_payment_fix.group_depart_manager"/>
|
||||
<button string="Confirm" type="object" name="action_accounting_manager" class="oe_highlight"
|
||||
states="depart_manager" groups="odex25_account_payment_fix.group_accounting_manager"/>
|
||||
<button string="Reset" type="object" name="action_reset_to_draft" class="btn btn-danger"
|
||||
states="depart_manager" groups="odex25_account_payment_fix.group_accounting_manager"/>
|
||||
<button string="Confirm" type="object" name="action_confirm_selected" class="oe_highlight"
|
||||
states="account_manager" groups="odex25_account_payment_fix.group_general_manager"/>
|
||||
<button string="Reset" type="object" name="action_reset_to_draft" class="btn btn-danger"
|
||||
states="account_manager" groups="odex25_account_payment_fix.group_general_manager"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group invisible="1">
|
||||
<field name="family_domain_ids" widget="many2many_tags" />
|
||||
<field name="journal_domain_ids" widget="many2many_tags"/>
|
||||
</group>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button icon="fa-usd" name="action_open_related_move_records" type="object"
|
||||
attrs="{'invisible':[('expense_type','!=','family_expense')]}">
|
||||
<field name="total_moves" string="Moves" widget="statinfo"/>
|
||||
</button>
|
||||
<button icon="fa-usd" name="action_open_related_move_line_records" type="object"
|
||||
attrs="{'invisible':[('expense_type','!=','family_expense')]}">
|
||||
<field name="total_move_lines" string="Move Lines" widget="statinfo"/>
|
||||
</button>
|
||||
<button icon="fa-usd" name="action_open_related_invoice_records" type="object"
|
||||
attrs="{'invisible':[('expense_type','!=','family_invoice')]}">
|
||||
<field name="total_invoices" string="Invoices" widget="statinfo"/>
|
||||
</button>
|
||||
<field name="family_domain_ids" widget="many2many_tags" invisible="1"/>
|
||||
<field name="journal_domain_ids" widget="many2many_tags" invisible="1"/>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="family_expense_seq" readonly="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="family_expense_seq" readonly="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<field name="expense_type" required="1"/>
|
||||
<field name="journal_id" required="1" domain="[('id', 'in', journal_domain_ids)]" attrs="{'invisible': [('expense_type', '!=', 'family_invoice')],'readonly':[('state', '=', 'confirm')]}" forec_save="1"/>
|
||||
<!-- <field name="payment_method_id" attrs="{'invisible': [('expense_type', '=', 'family_invoice')],'required': [('expense_type', '=', 'family_expense')]}"/>-->
|
||||
</group>
|
||||
<group>
|
||||
<field name="name" required="1" string="Process Details"/>
|
||||
<field name="date" required="1"/>
|
||||
<field name="branch_custom_id" required="1"/>
|
||||
<group>
|
||||
<field name="name" required="1" string="Process Details"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')]}"/>
|
||||
<label for="start_date"/>
|
||||
<div>
|
||||
<field name="start_date"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')]}"/>
|
||||
<strong><label for="end_date"/></strong>
|
||||
<field name="end_date"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')]}"/>
|
||||
</div>
|
||||
<field name="branch_custom_id" required="1"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')]}"/>
|
||||
<!-- <field name="payment_method_id" attrs="{'invisible': [('expense_type', '=', 'family_invoice')],'required': [('expense_type', '=', 'family_expense')]}"/>-->
|
||||
</group>
|
||||
<group>
|
||||
<field name="expense_type" required="1"/>
|
||||
<field name="journal_id" required="1" domain="[('id', 'in', journal_domain_ids)]"
|
||||
attrs="{'invisible': [('expense_type', '!=', 'family_invoice')]}" forec_save="1"/>
|
||||
<field name="date" required="1" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<!-- Conditional fields based on expense_type -->
|
||||
<group>
|
||||
<group>
|
||||
<field name="available_payment_method_line_ids" invisible="1"/>
|
||||
<field name="cash_expense"
|
||||
attrs="{'invisible': [('expense_type', '=', 'family_invoice')]}"/>
|
||||
<field name="meal_expense"
|
||||
attrs="{'invisible': [('expense_type', '=', 'family_invoice')]}"/>
|
||||
<field name="cloth_expense"
|
||||
attrs="{'invisible': [('expense_type', '=', 'family_invoice')]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="family_monthly_income"
|
||||
attrs="{'invisible': ['|',('expense_type', '=', 'family_invoice'),('cash_expense', '=', False)]}"/>
|
||||
<field name="family_monthly_meals" attrs="{'invisible': [('expense_type', '=', 'family_expense'),('meal_expense', '=', False)]}"/>
|
||||
<field name="family_monthly_clotting" attrs="{'invisible': ['|',('expense_type', '=', 'family_invoice'),('cloth_expense', '=', False)]}"/>
|
||||
</group>
|
||||
<field name="available_payment_method_line_ids" invisible="1"/>
|
||||
<field name="cash_expense"
|
||||
attrs="{'invisible': [('expense_type', '=', 'family_invoice')], 'readonly':[('state', '!=', 'draft')]}"/>
|
||||
<field name="meal_expense"
|
||||
attrs="{'invisible': [('expense_type', '=', 'family_invoice')], 'readonly':[('state', '!=', 'draft')]}"/>
|
||||
<field name="cloth_expense"
|
||||
attrs="{'invisible': [('expense_type', '=', 'family_invoice')], 'readonly':[('state', '!=', 'draft')]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="family_monthly_income"
|
||||
attrs="{'invisible': ['|',('expense_type', '=', 'family_invoice'),('cash_expense', '=', False)]}"/>
|
||||
<field name="family_monthly_meals"
|
||||
attrs="{'invisible': [('expense_type', '=', 'family_expense'),('meal_expense', '=', False)]}"/>
|
||||
<field name="family_monthly_clotting"
|
||||
attrs="{'invisible': ['|',('expense_type', '=', 'family_invoice'),('cloth_expense', '=', False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<!-- Notebook with Families page -->
|
||||
<notebook>
|
||||
<page string="Families">
|
||||
<field name="family_ids" domain="[('id', 'in', family_domain_ids)]">
|
||||
<tree string="Family">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="sms_phone" optional="hide"/>
|
||||
<field name="researcher_id" optional="hide"/>
|
||||
<field name="sa_iban" />
|
||||
<!-- <field name="father_id_number" />-->
|
||||
<field name="meal_card"/>
|
||||
<field name="family_monthly_income"/>
|
||||
<field name="family_monthly_meals"/>
|
||||
<field name="family_monthly_clotting"/>
|
||||
<field name="total_family_expenses"/>
|
||||
<field name="father_id_number"/>
|
||||
<field name="sms_phone"/>
|
||||
<field name="benefit_member_count"/>
|
||||
<field name="non_member_count"/>
|
||||
<field name="researcher_id"/>
|
||||
<field name="last_visit_date"/>
|
||||
<field name="state"/>
|
||||
<field name="non_member_count" optional="hide"/>
|
||||
<field name="family_monthly_income" attrs="{'column_invisible': [('parent.expense_type', '!=', 'family_expense')]}"/>
|
||||
<field name="family_monthly_meals"/>
|
||||
<field name="family_monthly_clotting" attrs="{'column_invisible': [('parent.expense_type', '!=', 'family_expense')]}"/>
|
||||
<field name="total_family_expenses" attrs="{'column_invisible': [('parent.expense_type', '!=', 'family_expense')]}"/>
|
||||
<field name="last_disbursement_date" optional="hide"/>
|
||||
<!-- <field name="last_visit_date" optional="hide"/>-->
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
|
||||
<field name="activity_ids" />
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="view_confirm_benefit_expense_search">
|
||||
<field name="name">confirm.benefit.expense</field>
|
||||
<field name="model">confirm.benefit.expense</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<group string="Group By">
|
||||
<field name="name">confirm.benefit.expense</field>
|
||||
<field name="model">confirm.benefit.expense</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<group string="Group By">
|
||||
<filter string="Branch" name="branch_custom_id" context="{'group_by': 'branch_custom_id'}"/>
|
||||
</group>
|
||||
<separator/>
|
||||
<filter string="Draft" name="draft" domain="[('state','=','draft')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Depart Manager" name="depart_manager" domain="[('state', '=', 'depart_manager')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Account Manager" name="account_manager" domain="[('state', '=', 'account_manager')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Cancel" name="cancel" domain="[('state', '=', 'cancel')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Confirm" name="confirm" domain="[('state', '=', 'confirm')]"/>
|
||||
<separator/>
|
||||
</search>
|
||||
</field>
|
||||
</group>
|
||||
<separator/>
|
||||
<filter string="Draft" name="draft" domain="[('state','=','draft')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Depart Manager" name="depart_manager" domain="[('state', '=', 'depart_manager')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Account Manager" name="account_manager" domain="[('state', '=', 'account_manager')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Cancel" name="cancel" domain="[('state', '=', 'cancel')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Confirm" name="confirm" domain="[('state', '=', 'confirm')]"/>
|
||||
<separator/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Action -->
|
||||
|
|
|
|||
Loading…
Reference in New Issue