You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

143 lines
4.3 KiB

from odoo import models, fields, api
from odoo.exceptions import UserError, ValidationError
from psycopg2 import sql, DatabaseError
from datetime import datetime
from werkzeug import utils
import base64
class DonationDonation(models.Model):
_inherit = 'donation.donation'
operation_id = fields.Many2one(
'opendons.operation',
string='Operation',
track_visibility='onchange',
ondelete='restrict',
domain=[('state', '=', 'exported')]
)
# operation_state= fields.Char(related='operation_id.state')
segment_id = fields.Many2one(
'opendons.segment',
string='Segment',
track_visibility='onchange',
ondelete='restrict'
)
end_date = fields.Date(
string='End Date',
index=True,
readonly=True,
track_visibility='onchange'
)
suspended_date = fields.Date(
string='Suspended Date',
index=True,
readonly=True,
track_visibility='onchange'
)
lastexecution_date = fields.Date(
string='Last execution Date',
index=True,
readonly=True,
track_visibility='onchange'
)
frequency =fields.Selection(
[('monthly','Monthly'), ('bimonthly','Bimonthly'),('quarterly','Quarterly'),('half-yearly','Half-yearly'),('annually','Annually')],
default='monthly'
)
@api.onchange('operation_id')
def _onchange_operation_id(self):
res = {}
res['domain']={'segment_id':[('operation_id', '=', self.operation_id.id)]}
return res
# @api.onchange('start_date')
# def _onchange_start_date(self):
# if self.start_date:
# self.donation_date=fields.Date.context_today(self)
# return True
# payment_batch_id = fields.Many2one(
# 'opendons_payment_batch',
# string='Payment Batch',
# ondelete='set null'
# )
# def _compute_rum(self):
# for rec in self:
# rec.rum_direct_debit=''
#if rec.recurring_template: rec.rum_direct_debit='GHGHH65767688899976'
#rec.rum_direct_debit='GHGHH65767688899976'
class DonationRecurringGenerate(models.TransientModel):
_inherit = 'donation.recurring.generate'
def generate(self):
self.ensure_one()
doo = self.env["donation.donation"]
donations = doo.search(
[
("recurring_template", "=", "active"),
("company_id", "=", self.company_id.id),
]
)
new_donation_ids = []
for donation in donations:
generate=True
existing_recur_donations = doo.search([("source_recurring_id", "=",int(donation.id))])
if donation.donation_date>fields.Date.context_today(self):
generate=False
delta=0
if donation.frequency=='annually':delta=365
if donation.frequency=='half-yearly':delta=365/2
if donation.frequency=='quarterly':delta=365/4
if donation.frequency=='bimonthly':delta=365/6
if donation.frequency=='monthly':delta=365/12
if existing_recur_donations:
for d in existing_recur_donations:
days_diff=(d.donation_date-fields.Date.context_today(self)).days
if days_diff<=delta:
generate=False
break
if generate==True:
default = {
"recurring_template":'',
"donation_date": fields.Date.context_today(self),
"source_recurring_id": donation.id,
"payment_ref": '',
"payment_mode_id":donation.payment_mode_id.id,
"mandate_required":'True',
"mandate_id":donation.mandate_id.id,
}
new_donation = donation.copy(default=default)
new_donation_ids.append(new_donation.id)
action = self.env.ref("donation.donation_action").sudo().read([])[0]
action.update(
{
"domain": [("id", "in", new_donation_ids)],
"limit": 500,
}
)
return action