Merge pull request #5456 from expsa/replace_between_replace_wating

Replace between replace wating
This commit is contained in:
AliAmmarEXP 2025-11-19 16:07:55 +03:00 committed by GitHub
commit c86ecde62d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 136 additions and 16 deletions

View File

@ -101,30 +101,52 @@ class DonationsDetailsLines(models.Model):
ages = fields.Integer(compute='_compute_get_age_range' , store=True) ages = fields.Integer(compute='_compute_get_age_range' , store=True)
waiting_date = fields.Date( waiting_date = fields.Date(
string="تاريخ الانتظار", string="تاريخ الانتظار",
compute="_compute_dates",
store=True
) )
replace_date = fields.Date( period_display = fields.Char(
string="تاريخ الاستبدال", string="Period",
compute="_compute_dates", compute="_compute_period_display" )
store=True
)
@api.depends('state') @api.depends('end_date', 'waiting_date')
def _compute_period_display(self):
today = date.today()
print('Hiiiii')
for rec in self:
# pick whichever date is set
if rec.state == 'replace' :
base_date = rec.end_date
elif rec.state == 'waiting':
base_date = rec.waiting_date
else:
base_date = False
print('Base >>> ' , base_date)
if base_date:
print('rec.waiting_date >>> ' , rec.waiting_date)
delta = relativedelta(today, base_date)
print('rec.delta >>> ' , str(delta))
# build human-readable string
if delta.years > 0:
rec.period_display = f"{delta.years} year(s)"
elif delta.months > 0:
rec.period_display = f"{delta.months} month(s)"
elif delta.days > 0:
rec.period_display = f"{delta.days} day(s)"
else:
rec.period_display = "Today"
else:
rec.period_display = "No date"
@api.constrains('state')
def _compute_dates(self): def _compute_dates(self):
"""Automatically set waiting_date or replace_date based on state.""" """Automatically set waiting_date or replace_date based on state."""
for rec in self: for rec in self:
if rec.state == 'waiting': if rec.state == 'waiting':
print(date.today())
rec.waiting_date = date.today() rec.waiting_date = date.today()
rec.replace_date = False
elif rec.state == 'replace':
rec.replace_date = date.today()
rec.waiting_date = False
else: else:
rec.waiting_date = False rec.waiting_date = False
rec.replace_date = False
# cheque_number = fields.Integer(string="Cheque Number") # cheque_number = fields.Integer(string="Cheque Number")

View File

@ -86,7 +86,6 @@
<field name="sponsorship_creation_date" /> <field name="sponsorship_creation_date" />
<field name="create_date" optional="hide"/> <field name="create_date" optional="hide"/>
<field name="waiting_date" widget="date" optional="hide"/> <field name="waiting_date" widget="date" optional="hide"/>
<field name="replace_date" widget="date" optional="hide"/>
<field name="state" widget="badge" <field name="state" widget="badge"
decoration-muted="state == 'draft'" decoration-muted="state == 'draft'"
decoration-warning="state == 'waiting'" decoration-warning="state == 'waiting'"
@ -182,7 +181,8 @@
<group> <group>
<group string="Donation Information"> <group string="Donation Information">
<field name="ages" invisible="1" /> <field name="ages" invisible="1" />
<field name="waiting_date" widget="date" /> <field name="period_display" invisible="0" />
<field name="waiting_date" widget="date" invisible="1"/>
<field name="donation_type" invisible="1"/> <field name="donation_type" invisible="1"/>
<field name="donation_types" <field name="donation_types"
attrs="{'invisible': [('donation_type', '!=', 'donation')], 'readonly': [('parent_state', '!=', 'draft')]}" /> attrs="{'invisible': [('donation_type', '!=', 'donation')], 'readonly': [('parent_state', '!=', 'draft')]}" />
@ -354,6 +354,98 @@
</field> </field>
</record> </record>
<record id="donations_details_lines_view_tree_waiting" model="ir.ui.view">
<field name="name">donations.details.lines.view.tree.waiting</field>
<field name="model">donations.details.lines</field>
<field name="arch" type="xml">
<tree default_order="waiting_date asc" create="0" edit="0" >
<field name="sponsorship_scheduling_line_ids" invisible="1" />
<field name="direct_debit" invisible="1" />
<field name="sequence_no" />
<field name="sponsor_id" />
<field name="sponsor_phone" widget="phone"/>
<field name="donation_type" optional="show"/>
<field name="sponsorship_duration" optional="hide"/>
<field name="donation_mechanism" optional="hide"/>
<field name="product_template_id" />
<field name="benefit_status" widget="badge"
decoration-success="benefit_status == 'benefit'"
decoration-danger="benefit_status == 'non_benefit'"/>
<field name="start_date" widget="date"/>
<field name="end_date" widget="date"/>
<field name="donation_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="total_donation_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="currency_id" invisible="1"/>
<field name="branch_custom_id" optional="hide" />
<field name="benefit_family_code" optional="hide" />
<field name="benefit_id" optional="hide" />
<field name="sponsorship_creation_date" />
<field name="create_date" optional="hide"/>
<field name="waiting_date" widget="date" />
<field name="period_display" />
<field name="state" widget="badge"
decoration-muted="state == 'draft'"
decoration-warning="state == 'waiting'"
decoration-success="state in ['active', 'paid','confirmed']"
decoration-danger="state == 'closed'"
decoration-info="state == 'extended'" />
<button name="action_view_scheduling_lines"
string="View Scheduling Lines"
type="object"
attrs="{'invisible': ['|', ('direct_debit', '=', False), ('sponsorship_scheduling_line_ids', '=', [])]}"
class="btn-secondary"
icon="fa-calendar" />
</tree>
</field>
</record>
<record id="donations_details_lines_view_tree_replace" model="ir.ui.view">
<field name="name">donations.details.lines.view.tree.replace</field>
<field name="model">donations.details.lines</field>
<field name="arch" type="xml">
<tree default_order="end_date asc" create="0" edit="0" >
<field name="sponsorship_scheduling_line_ids" invisible="1" />
<field name="direct_debit" invisible="1" />
<field name="sequence_no" />
<field name="sponsor_id" />
<field name="sponsor_phone" widget="phone"/>
<field name="donation_type" optional="show"/>
<field name="sponsorship_duration" optional="hide"/>
<field name="donation_mechanism" optional="hide"/>
<field name="product_template_id" />
<field name="benefit_status" widget="badge"
decoration-success="benefit_status == 'benefit'"
decoration-danger="benefit_status == 'non_benefit'"/>
<field name="start_date" widget="date"/>
<field name="end_date" widget="date"/>
<field name="donation_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="total_donation_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="currency_id" invisible="1"/>
<field name="branch_custom_id" optional="hide" />
<field name="benefit_family_code" optional="hide" />
<field name="benefit_id" optional="hide" />
<field name="sponsorship_creation_date" />
<field name="create_date" optional="hide"/>
<field name="end_date" widget="date" />
<field name="period_display" />
<field name="state" widget="badge"
decoration-muted="state == 'draft'"
decoration-warning="state == 'waiting'"
decoration-success="state in ['active', 'paid','confirmed']"
decoration-danger="state == 'closed'"
decoration-info="state == 'extended'" />
<button name="action_view_scheduling_lines"
string="View Scheduling Lines"
type="object"
attrs="{'invisible': ['|', ('direct_debit', '=', False), ('sponsorship_scheduling_line_ids', '=', [])]}"
class="btn-secondary"
icon="fa-calendar" />
</tree>
</field>
</record>
<record id="donations_details_lines_action" model="ir.actions.act_window"> <record id="donations_details_lines_action" model="ir.actions.act_window">
<field name="name">Donations Details Lines</field> <field name="name">Donations Details Lines</field>
<field name="res_model">donations.details.lines</field> <field name="res_model">donations.details.lines</field>
@ -368,6 +460,9 @@
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="domain">[('state', '=', 'waiting')]</field> <field name="domain">[('state', '=', 'waiting')]</field>
<field name="search_view_id" ref="donations_details_lines_view_search"/> <field name="search_view_id" ref="donations_details_lines_view_search"/>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('donations_details_lines_view_tree_waiting')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('donations_details_lines_view_form')})]"/>
<field name="context">{'create': False, 'delete': False}</field> <field name="context">{'create': False, 'delete': False}</field>
</record> </record>
@ -376,6 +471,9 @@
<field name="res_model">donations.details.lines</field> <field name="res_model">donations.details.lines</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="domain">[('state', '=', 'replace')]</field> <field name="domain">[('state', '=', 'replace')]</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('donations_details_lines_view_tree_replace')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('donations_details_lines_view_form')})]"/>
<field name="search_view_id" ref="donations_details_lines_view_search"/> <field name="search_view_id" ref="donations_details_lines_view_search"/>
<field name="context">{'create': False, 'delete': False}</field> <field name="context">{'create': False, 'delete': False}</field>
</record> </record>