houssine
5 years ago
committed by
robin.keunen
2 changed files with 409 additions and 405 deletions
@ -1,177 +1,179 @@ |
|||
import logging |
|||
|
|||
from odoo import api, fields, models, _ |
|||
|
|||
_logger = logging.getLogger(__name__) |
|||
|
|||
|
|||
class LoanIssue(models.Model): |
|||
_name = 'loan.issue' |
|||
_description = 'Loan Issue' |
|||
|
|||
@api.multi |
|||
def _compute_subscribed_amount(self): |
|||
for issue in self: |
|||
susbscribed_amount = 0.0 |
|||
for line in issue.loan_issue_lines.filtered( |
|||
lambda record: record.state != 'cancelled'): |
|||
susbscribed_amount += line.amount |
|||
issue.subscribed_amount = susbscribed_amount |
|||
|
|||
name = fields.Char(string="Name", |
|||
translate=True) |
|||
default_issue = fields.Boolean(string="Default issue") |
|||
subscription_start_date = fields.Date(string="Start date subscription period") |
|||
subscription_end_date = fields.Date(string="End date subscription period") |
|||
user_id = fields.Many2one('res.users', |
|||
string="Responsible") |
|||
term_date = fields.Date(string="Term date") |
|||
loan_term = fields.Float(string="Duration of the loan in month") |
|||
rate = fields.Float(string="Interest rate") |
|||
face_value = fields.Monetary(string="Facial value", |
|||
currency_field='company_currency_id', |
|||
required=True) |
|||
minimum_amount = fields.Monetary(string="Minimum amount of issue", |
|||
currency_field='company_currency_id') |
|||
maximum_amount = fields.Monetary(string="Maximum amount of issue", |
|||
currency_field='company_currency_id') |
|||
min_amount_company = fields.Monetary(string="Minimum amount for a company", |
|||
currency_field='company_currency_id') |
|||
max_amount_company = fields.Monetary(string="Maximum amount for a company", |
|||
currency_field='company_currency_id') |
|||
min_amount_person = fields.Monetary(string="Minimum amount for a person", |
|||
currency_field='company_currency_id') |
|||
max_amount_person = fields.Monetary(string="Maximum amount for a person", |
|||
currency_field='company_currency_id') |
|||
subscribed_amount = fields.Monetary(string="Subscribed amount", |
|||
compute="_compute_subscribed_amount", |
|||
currency_field='company_currency_id') |
|||
interest_payment = fields.Selection([('end', 'End'), |
|||
('yearly', 'Yearly')], |
|||
string="Interest payment") |
|||
loan_issue_lines = fields.One2many('loan.issue.line', |
|||
'loan_issue_id', |
|||
string="Loan issue lines") |
|||
state = fields.Selection([('draft', 'Draft'), |
|||
('confirmed', 'Confirmed'), |
|||
('cancelled', 'Cancelled'), |
|||
('ongoing', 'Ongoing'), |
|||
('closed', 'Closed')], |
|||
string="State", |
|||
default='draft') |
|||
company_currency_id = fields.Many2one('res.currency', |
|||
related='company_id.currency_id', |
|||
string="Company Currency", |
|||
readonly=True) |
|||
company_id = fields.Many2one('res.company', |
|||
string='Company', |
|||
required=True, |
|||
readonly=True, |
|||
default=lambda self: self.env['res.company']._company_default_get()) # noqa |
|||
by_company = fields.Boolean(string="By company") |
|||
by_individual = fields.Boolean(string='By individuals') |
|||
display_on_website = fields.Boolean(sting='Display on website') |
|||
taxes_rate = fields.Float(string="Taxes on interest", |
|||
required=True) |
|||
|
|||
@api.multi |
|||
def get_max_amount(self, partner): |
|||
lines = self.loan_issue_lines.filtered( |
|||
lambda r: r.partner_id == partner and r.state != 'cancelled') |
|||
already_subscribed = sum(line.amount for line in lines) |
|||
if partner.is_company: |
|||
max_amount = self.max_amount_company - already_subscribed |
|||
else: |
|||
max_amount = self.max_amount_person - already_subscribed |
|||
return max_amount |
|||
|
|||
@api.multi |
|||
def toggle_display(self): |
|||
for loan_issue in self: |
|||
loan_issue.display_on_website = not loan_issue.display_on_website |
|||
|
|||
@api.multi |
|||
def get_web_issues(self, is_company): |
|||
bond_issues = self.search([ |
|||
('display_on_website', '=', True), |
|||
('state', '=', 'ongoing') |
|||
]) |
|||
if is_company is True: |
|||
return bond_issues.filtered('by_company') |
|||
else: |
|||
return bond_issues.filtered('by_company') |
|||
|
|||
@api.multi |
|||
def action_confirm(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'confirmed'}) |
|||
|
|||
@api.multi |
|||
def action_open(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'ongoing'}) |
|||
|
|||
@api.multi |
|||
def action_draft(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'draft'}) |
|||
|
|||
@api.multi |
|||
def action_cancel(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'cancelled'}) |
|||
|
|||
@api.multi |
|||
def action_close(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'closed'}) |
|||
|
|||
def get_interest_vals(self, line, vals): |
|||
interest_obj = self.env['loan.interest.line'] |
|||
accrued_amount = line.amount |
|||
accrued_interest = 0 |
|||
accrued_net_interest = 0 |
|||
accrued_taxes = 0 |
|||
for year in range(1, int(self.loan_term) + 1): |
|||
interest = accrued_amount * (line.loan_issue_id.rate / 100) |
|||
accrued_amount += interest |
|||
taxes_amount = interest * (self.taxes_rate / 100) |
|||
net_interest = interest - taxes_amount |
|||
accrued_interest += interest |
|||
accrued_net_interest += net_interest |
|||
accrued_taxes += taxes_amount |
|||
vals['interest'] = interest |
|||
vals['net_interest'] = net_interest |
|||
vals['taxes_amount'] = taxes_amount |
|||
vals['accrued_amount'] = accrued_amount |
|||
vals['accrued_interest'] = accrued_interest |
|||
vals['accrued_net_interest'] = accrued_net_interest |
|||
vals['accrued_taxes'] = accrued_taxes |
|||
vals['name'] = year |
|||
interest_obj.create(vals) |
|||
|
|||
@api.multi |
|||
def compute_loan_interest(self): |
|||
self.ensure_one() |
|||
|
|||
if self.interest_payment == 'end': |
|||
due_date = self.term_date |
|||
else: |
|||
raise NotImplementedError(_("Interest payment by year hasn't been " |
|||
"implemented yet")) |
|||
for line in self.loan_issue_lines: |
|||
# TODO remove this line |
|||
line.interest_lines.unlink() |
|||
# Please Do not Forget |
|||
vals = { |
|||
'issue_line': line.id, |
|||
'due_date': due_date, |
|||
'taxes_rate': self.taxes_rate |
|||
} |
|||
self.get_interest_vals(line, vals) |
|||
|
|||
rounded_term = int(self.loan_term) |
|||
if self.loan_term - rounded_term > 0: |
|||
# TODO Handle this case |
|||
raise NotImplementedError(_("Calculation on non entire year " |
|||
"hasn't been implemented yet")) |
|||
import logging |
|||
|
|||
from odoo import api, fields, models, _ |
|||
|
|||
_logger = logging.getLogger(__name__) |
|||
|
|||
|
|||
class LoanIssue(models.Model): |
|||
_name = 'loan.issue' |
|||
_description = 'Loan Issue' |
|||
|
|||
@api.multi |
|||
def _compute_subscribed_amount(self): |
|||
for issue in self: |
|||
susbscribed_amount = 0.0 |
|||
for line in issue.loan_issue_lines.filtered( |
|||
lambda record: record.state != 'cancelled'): |
|||
susbscribed_amount += line.amount |
|||
issue.subscribed_amount = susbscribed_amount |
|||
|
|||
name = fields.Char(string="Name", |
|||
translate=True) |
|||
default_issue = fields.Boolean(string="Default issue") |
|||
subscription_start_date = fields.Date(string="Start date subscription period") |
|||
subscription_end_date = fields.Date(string="End date subscription period") |
|||
user_id = fields.Many2one('res.users', |
|||
string="Responsible") |
|||
term_date = fields.Date(string="Term date") |
|||
loan_term = fields.Float(string="Duration of the loan in month") |
|||
rate = fields.Float(string="Interest rate") |
|||
face_value = fields.Monetary(string="Facial value", |
|||
currency_field='company_currency_id', |
|||
required=True) |
|||
minimum_amount = fields.Monetary(string="Minimum amount of issue", |
|||
currency_field='company_currency_id') |
|||
maximum_amount = fields.Monetary(string="Maximum amount of issue", |
|||
currency_field='company_currency_id') |
|||
min_amount_company = fields.Monetary(string="Minimum amount for a company", |
|||
currency_field='company_currency_id') |
|||
max_amount_company = fields.Monetary(string="Maximum amount for a company", |
|||
currency_field='company_currency_id') |
|||
min_amount_person = fields.Monetary(string="Minimum amount for a person", |
|||
currency_field='company_currency_id') |
|||
max_amount_person = fields.Monetary(string="Maximum amount for a person", |
|||
currency_field='company_currency_id') |
|||
subscribed_amount = fields.Monetary(string="Subscribed amount", |
|||
compute="_compute_subscribed_amount", |
|||
currency_field='company_currency_id') |
|||
interest_payment = fields.Selection([('end', 'End'), |
|||
('yearly', 'Yearly')], |
|||
string="Interest payment") |
|||
payment_date = fields.Date(string="Interest payment date") |
|||
yearly_payement_on = fields.Char(string="Yearly payment on") |
|||
loan_issue_lines = fields.One2many('loan.issue.line', |
|||
'loan_issue_id', |
|||
string="Loan issue lines") |
|||
state = fields.Selection([('draft', 'Draft'), |
|||
('confirmed', 'Confirmed'), |
|||
('cancelled', 'Cancelled'), |
|||
('ongoing', 'Ongoing'), |
|||
('closed', 'Closed')], |
|||
string="State", |
|||
default='draft') |
|||
company_currency_id = fields.Many2one('res.currency', |
|||
related='company_id.currency_id', |
|||
string="Company Currency", |
|||
readonly=True) |
|||
company_id = fields.Many2one('res.company', |
|||
string='Company', |
|||
required=True, |
|||
readonly=True, |
|||
default=lambda self: self.env['res.company']._company_default_get()) # noqa |
|||
by_company = fields.Boolean(string="By company") |
|||
by_individual = fields.Boolean(string='By individuals') |
|||
display_on_website = fields.Boolean(sting='Display on website') |
|||
taxes_rate = fields.Float(string="Taxes on interest", |
|||
required=True) |
|||
|
|||
@api.multi |
|||
def get_max_amount(self, partner): |
|||
lines = self.loan_issue_lines.filtered( |
|||
lambda r: r.partner_id == partner and r.state != 'cancelled') |
|||
already_subscribed = sum(line.amount for line in lines) |
|||
if partner.is_company: |
|||
max_amount = self.max_amount_company - already_subscribed |
|||
else: |
|||
max_amount = self.max_amount_person - already_subscribed |
|||
return max_amount |
|||
|
|||
@api.multi |
|||
def toggle_display(self): |
|||
for loan_issue in self: |
|||
loan_issue.display_on_website = not loan_issue.display_on_website |
|||
|
|||
@api.multi |
|||
def get_web_issues(self, is_company): |
|||
bond_issues = self.search([ |
|||
('display_on_website', '=', True), |
|||
('state', '=', 'ongoing') |
|||
]) |
|||
if is_company is True: |
|||
return bond_issues.filtered('by_company') |
|||
else: |
|||
return bond_issues.filtered('by_company') |
|||
|
|||
@api.multi |
|||
def action_confirm(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'confirmed'}) |
|||
|
|||
@api.multi |
|||
def action_open(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'ongoing'}) |
|||
|
|||
@api.multi |
|||
def action_draft(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'draft'}) |
|||
|
|||
@api.multi |
|||
def action_cancel(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'cancelled'}) |
|||
|
|||
@api.multi |
|||
def action_close(self): |
|||
self.ensure_one() |
|||
self.write({'state': 'closed'}) |
|||
|
|||
def get_interest_vals(self, line, vals): |
|||
interest_obj = self.env['loan.interest.line'] |
|||
accrued_amount = line.amount |
|||
accrued_interest = 0 |
|||
accrued_net_interest = 0 |
|||
accrued_taxes = 0 |
|||
for year in range(1, int(self.loan_term) + 1): |
|||
interest = accrued_amount * (line.loan_issue_id.rate / 100) |
|||
accrued_amount += interest |
|||
taxes_amount = interest * (self.taxes_rate / 100) |
|||
net_interest = interest - taxes_amount |
|||
accrued_interest += interest |
|||
accrued_net_interest += net_interest |
|||
accrued_taxes += taxes_amount |
|||
vals['interest'] = interest |
|||
vals['net_interest'] = net_interest |
|||
vals['taxes_amount'] = taxes_amount |
|||
vals['accrued_amount'] = accrued_amount |
|||
vals['accrued_interest'] = accrued_interest |
|||
vals['accrued_net_interest'] = accrued_net_interest |
|||
vals['accrued_taxes'] = accrued_taxes |
|||
vals['name'] = year |
|||
interest_obj.create(vals) |
|||
|
|||
@api.multi |
|||
def compute_loan_interest(self): |
|||
self.ensure_one() |
|||
|
|||
if self.interest_payment == 'end': |
|||
due_date = self.term_date |
|||
else: |
|||
raise NotImplementedError(_("Interest payment by year hasn't been " |
|||
"implemented yet")) |
|||
for line in self.loan_issue_lines: |
|||
# TODO remove this line |
|||
line.interest_lines.unlink() |
|||
# Please Do not Forget |
|||
vals = { |
|||
'issue_line': line.id, |
|||
'due_date': due_date, |
|||
'taxes_rate': self.taxes_rate |
|||
} |
|||
self.get_interest_vals(line, vals) |
|||
|
|||
rounded_term = int(self.loan_term) |
|||
if self.loan_term - rounded_term > 0: |
|||
# TODO Handle this case |
|||
raise NotImplementedError(_("Calculation on non entire year " |
|||
"hasn't been implemented yet")) |
@ -1,228 +1,230 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<record id="view_loan_issue_tree" model="ir.ui.view"> |
|||
<field name="name">loan.issue.tree</field> |
|||
<field name="model">loan.issue</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Loan issues"> |
|||
<field name="name" /> |
|||
<field name="subscription_start_date" /> |
|||
<field name="subscription_end_date" /> |
|||
<field name="term_date" /> |
|||
<field name="loan_term" /> |
|||
<field name="rate" /> |
|||
<field name="minimum_amount" /> |
|||
<field name="maximum_amount" /> |
|||
<field name="subscribed_amount" /> |
|||
<field name="user_id" /> |
|||
<field name="state" /> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_loan_issue_form" model="ir.ui.view"> |
|||
<field name="name">loan.issue.form</field> |
|||
<field name="model">loan.issue</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Loan issue"> |
|||
<header> |
|||
<!-- todo check access rights --> |
|||
<button name="action_confirm" string="Confirm" type="object" states="draft" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="action_cancel" string="Cancel" type="object" states="draft,ongoing" |
|||
confirm="Are you sure you want to cancel this loan issue?" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="action_open" string="Open" type="object" |
|||
states="confirmed" groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="action_close" string="Close" type="object" states="ongoing" |
|||
confirm="Are you sure you want to close this loan issue?" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="action_draft" string="Set to draft" |
|||
type="object" states="confirmed,cancelled" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="compute_loan_interest" string="Compute interest" |
|||
type="object" states="closed,ongoing" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
|
|||
<field name="state" widget="statusbar" statusbar_visible="draft,confirmed,ongoing,closed"/> |
|||
</header> |
|||
<sheet> |
|||
<div class="oe_button_box" name="button_box"> |
|||
<button name="toggle_display" type="object" |
|||
class="oe_stat_button" icon="fa-globe"> |
|||
<field name="display_on_website" widget="website_button"/> |
|||
</button> |
|||
</div> |
|||
<group> |
|||
<group> |
|||
<field name="name" /> |
|||
<field name="default_issue" /> |
|||
<field name="face_value" /> |
|||
<field name="minimum_amount" /> |
|||
<field name="maximum_amount" /> |
|||
<field name="subscribed_amount" /> |
|||
<field name="by_individual" /> |
|||
<field name="min_amount_person" attrs="{'invisible':[('by_individual','=',False)]}" /> |
|||
<field name="max_amount_person" attrs="{'invisible':[('by_individual','=',False)]}" /> |
|||
<field name="by_company" /> |
|||
<field name="min_amount_company" attrs="{'invisible':[('by_company','=',False)]}" /> |
|||
<field name="max_amount_company" attrs="{'invisible':[('by_company','=',False)]}" /> |
|||
<field name="company_currency_id" invisible="True" /> |
|||
</group> |
|||
<group> |
|||
<field name="user_id" widget="selection" /> |
|||
<label for="rate" string="Interest rate"/> |
|||
<div> |
|||
<field name="rate" class="oe_inline"/> |
|||
<span class="o_form_label oe_inline">%</span> |
|||
</div> |
|||
<label for="taxes_rate" string="Taxes on interest"/> |
|||
<div> |
|||
<field name="taxes_rate" class="oe_inline"/> |
|||
<span class="o_form_label oe_inline">%</span> |
|||
</div> |
|||
<field name="subscription_start_date" /> |
|||
<field name="subscription_end_date" /> |
|||
<field name="term_date" /> |
|||
<field name="loan_term" /> |
|||
<field name="interest_payment" widget="selection" /> |
|||
</group> |
|||
</group> |
|||
<notebook> |
|||
<page name="lines" string="Lines"> |
|||
<field name="loan_issue_lines"> |
|||
<tree delete="false"> |
|||
<field name="name" /> |
|||
<field name="partner_id" /> |
|||
<field name="date" /> |
|||
<field name="quantity" /> |
|||
<field name="face_value" /> |
|||
<field name="amount" /> |
|||
<field name="state" /> |
|||
<field name="company_currency_id" invisible="True"/> |
|||
</tree> |
|||
</field> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_loan_issue_filter" model="ir.ui.view"> |
|||
<field name="name">Loans Issue Search</field> |
|||
<field name="model">loan.issue</field> |
|||
<field name="arch" type="xml"> |
|||
<search string="Search Loan Issue"> |
|||
<field name="name"/> |
|||
</search> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_loan_issue" model="ir.actions.act_window"> |
|||
<field name="name">Loan Issues</field> |
|||
<field name="res_model">loan.issue</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
<record id="action_loan_issue_lines" model="ir.actions.act_window"> |
|||
<field name="name">Loans</field> |
|||
<field name="res_model">loan.issue.line</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
<record id="loan_issue_line_view_tree" model="ir.ui.view"> |
|||
<field name="name">loan_issue_line_view_tree</field> |
|||
<field name="model">loan.issue.line</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Loans"> |
|||
<field name="name"/> |
|||
<field name="loan_issue_id"/> |
|||
<field name="partner_id"/> |
|||
<field name="loan_issue_id"/> |
|||
<field name="quantity"/> |
|||
<field name="face_value"/> |
|||
<field name="amount"/> |
|||
<field name="date"/> |
|||
<field name="state"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_loan_issue_line_form" model="ir.ui.view"> |
|||
<field name="name">loan.issue.line.form</field> |
|||
<field name="model">loan.issue.line</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Loan issue"> |
|||
<header> |
|||
<button name="action_validate" string="Validate" |
|||
type="object" states="draft" /> |
|||
<button name="action_request_payment" string="Request Payment" |
|||
type="object" states="subscribed" /> |
|||
<button name="action_cancel" string="Cancel" type="object" |
|||
states="draft,subscribed,waiting" |
|||
confirm="Are you sure you want to cancel this loan subscription ?" /> |
|||
<button name="action_draft" string="Set to draft" |
|||
type="object" states="cancelled" /> |
|||
<button name="action_paid" string="Paid" |
|||
type="object" states="waiting" /> |
|||
<field name="state" widget="statusbar" /> |
|||
</header> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="loan_issue_id"/> |
|||
<field name="name" /> |
|||
<field name="quantity" /> |
|||
<field name="face_value" /> |
|||
</group> |
|||
<group> |
|||
<field name="date" /> |
|||
<field name="partner_id" /> |
|||
<field name="amount" /> |
|||
</group> |
|||
</group> |
|||
<notebook> |
|||
<page string="Interest lines"> |
|||
<field name="interest_lines"> |
|||
<tree delete="false" create="false"> |
|||
<field name="name" /> |
|||
<field name="amount" /> |
|||
<field name="accrued_amount" /> |
|||
<field name="interest" /> |
|||
<field name="net_interest" /> |
|||
<field name="taxes_amount" /> |
|||
<field name="due_date" /> |
|||
<field name="state" /> |
|||
</tree> |
|||
</field> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_loan_issue_line_filter" model="ir.ui.view"> |
|||
<field name="name">Loans Search</field> |
|||
<field name="model">loan.issue.line</field> |
|||
<field name="arch" type="xml"> |
|||
<search string="Search Loans"> |
|||
<field name="name"/> |
|||
<field name="partner_id"/> |
|||
<field name="loan_issue_id"/> |
|||
<separator/> |
|||
<filter string="Draft" name="state_draft" domain="[('state','=','draft')]"/> |
|||
<filter string="Paid" name="state_paid" domain="[('state','=','paid')]"/> |
|||
<filter string="Done" name="state_done" domain="[('state','=','done')]"/> |
|||
<filter string="Subscribed" name="state_subscribed" domain="[('state','=','subscribed')]"/> |
|||
<group expand="0" name="group_by" string="Group By"> |
|||
<filter name="loan_issue_id" string="Loan Issue" context="{'group_by' : 'loan_issue_id'}" /> |
|||
<filter name="date" string="Subscription Date" context="{'group_by': 'date'}"/> |
|||
</group> |
|||
</search> |
|||
</field> |
|||
</record> |
|||
</odoo> |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<record id="view_loan_issue_tree" model="ir.ui.view"> |
|||
<field name="name">loan.issue.tree</field> |
|||
<field name="model">loan.issue</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Loan issues"> |
|||
<field name="name" /> |
|||
<field name="subscription_start_date" /> |
|||
<field name="subscription_end_date" /> |
|||
<field name="term_date" /> |
|||
<field name="loan_term" /> |
|||
<field name="rate" /> |
|||
<field name="minimum_amount" /> |
|||
<field name="maximum_amount" /> |
|||
<field name="subscribed_amount" /> |
|||
<field name="user_id" /> |
|||
<field name="state" /> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_loan_issue_form" model="ir.ui.view"> |
|||
<field name="name">loan.issue.form</field> |
|||
<field name="model">loan.issue</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Loan issue"> |
|||
<header> |
|||
<!-- todo check access rights --> |
|||
<button name="action_confirm" string="Confirm" type="object" states="draft" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="action_cancel" string="Cancel" type="object" states="draft,ongoing" |
|||
confirm="Are you sure you want to cancel this loan issue?" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="action_open" string="Open" type="object" |
|||
states="confirmed" groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="action_close" string="Close" type="object" states="ongoing" |
|||
confirm="Are you sure you want to close this loan issue?" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="action_draft" string="Set to draft" |
|||
type="object" states="confirmed,cancelled" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
<button name="compute_loan_interest" string="Compute interest" |
|||
type="object" states="closed,ongoing" |
|||
groups="easy_my_coop.group_easy_my_coop_manager"/> |
|||
|
|||
<field name="state" widget="statusbar" statusbar_visible="draft,confirmed,ongoing,closed"/> |
|||
</header> |
|||
<sheet> |
|||
<div class="oe_button_box" name="button_box"> |
|||
<button name="toggle_display" type="object" |
|||
class="oe_stat_button" icon="fa-globe"> |
|||
<field name="display_on_website" widget="website_button"/> |
|||
</button> |
|||
</div> |
|||
<group> |
|||
<group> |
|||
<field name="name" /> |
|||
<field name="default_issue" /> |
|||
<field name="face_value" /> |
|||
<field name="minimum_amount" /> |
|||
<field name="maximum_amount" /> |
|||
<field name="subscribed_amount" /> |
|||
<field name="by_individual" /> |
|||
<field name="min_amount_person" attrs="{'invisible':[('by_individual','=',False)]}" /> |
|||
<field name="max_amount_person" attrs="{'invisible':[('by_individual','=',False)]}" /> |
|||
<field name="by_company" /> |
|||
<field name="min_amount_company" attrs="{'invisible':[('by_company','=',False)]}" /> |
|||
<field name="max_amount_company" attrs="{'invisible':[('by_company','=',False)]}" /> |
|||
<field name="company_currency_id" invisible="True" /> |
|||
</group> |
|||
<group> |
|||
<field name="user_id" widget="selection" /> |
|||
<label for="rate" string="Interest rate"/> |
|||
<div> |
|||
<field name="rate" class="oe_inline"/> |
|||
<span class="o_form_label oe_inline">%</span> |
|||
</div> |
|||
<label for="taxes_rate" string="Taxes on interest"/> |
|||
<div> |
|||
<field name="taxes_rate" class="oe_inline"/> |
|||
<span class="o_form_label oe_inline">%</span> |
|||
</div> |
|||
<field name="subscription_start_date" /> |
|||
<field name="subscription_end_date" /> |
|||
<field name="term_date" /> |
|||
<field name="loan_term" /> |
|||
<field name="interest_payment" widget="selection" /> |
|||
<field name="payment_date" attrs="{'invisible':[('interest_payment','!=','end')]}" /> |
|||
<field name="yearly_payement_on" attrs="{'invisible':[('interest_payment','!=','yearly')]}" /> |
|||
</group> |
|||
</group> |
|||
<notebook> |
|||
<page name="lines" string="Lines"> |
|||
<field name="loan_issue_lines"> |
|||
<tree delete="false"> |
|||
<field name="name" /> |
|||
<field name="partner_id" /> |
|||
<field name="date" /> |
|||
<field name="quantity" /> |
|||
<field name="face_value" /> |
|||
<field name="amount" /> |
|||
<field name="state" /> |
|||
<field name="company_currency_id" invisible="True"/> |
|||
</tree> |
|||
</field> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_loan_issue_filter" model="ir.ui.view"> |
|||
<field name="name">Loans Issue Search</field> |
|||
<field name="model">loan.issue</field> |
|||
<field name="arch" type="xml"> |
|||
<search string="Search Loan Issue"> |
|||
<field name="name"/> |
|||
</search> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_loan_issue" model="ir.actions.act_window"> |
|||
<field name="name">Loan Issues</field> |
|||
<field name="res_model">loan.issue</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
<record id="action_loan_issue_lines" model="ir.actions.act_window"> |
|||
<field name="name">Loans</field> |
|||
<field name="res_model">loan.issue.line</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
<record id="loan_issue_line_view_tree" model="ir.ui.view"> |
|||
<field name="name">loan_issue_line_view_tree</field> |
|||
<field name="model">loan.issue.line</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Loans"> |
|||
<field name="name"/> |
|||
<field name="loan_issue_id"/> |
|||
<field name="partner_id"/> |
|||
<field name="loan_issue_id"/> |
|||
<field name="quantity"/> |
|||
<field name="face_value"/> |
|||
<field name="amount"/> |
|||
<field name="date"/> |
|||
<field name="state"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_loan_issue_line_form" model="ir.ui.view"> |
|||
<field name="name">loan.issue.line.form</field> |
|||
<field name="model">loan.issue.line</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Loan issue"> |
|||
<header> |
|||
<button name="action_validate" string="Validate" |
|||
type="object" states="draft" /> |
|||
<button name="action_request_payment" string="Request Payment" |
|||
type="object" states="subscribed" /> |
|||
<button name="action_cancel" string="Cancel" type="object" |
|||
states="draft,subscribed,waiting" |
|||
confirm="Are you sure you want to cancel this loan subscription ?" /> |
|||
<button name="action_draft" string="Set to draft" |
|||
type="object" states="cancelled" /> |
|||
<button name="action_paid" string="Paid" |
|||
type="object" states="waiting" /> |
|||
<field name="state" widget="statusbar" /> |
|||
</header> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="loan_issue_id"/> |
|||
<field name="name" /> |
|||
<field name="quantity" /> |
|||
<field name="face_value" /> |
|||
</group> |
|||
<group> |
|||
<field name="date" /> |
|||
<field name="partner_id" /> |
|||
<field name="amount" /> |
|||
</group> |
|||
</group> |
|||
<notebook> |
|||
<page string="Interest lines"> |
|||
<field name="interest_lines"> |
|||
<tree delete="false" create="false"> |
|||
<field name="name" /> |
|||
<field name="amount" /> |
|||
<field name="accrued_amount" /> |
|||
<field name="interest" /> |
|||
<field name="net_interest" /> |
|||
<field name="taxes_amount" /> |
|||
<field name="due_date" /> |
|||
<field name="state" /> |
|||
</tree> |
|||
</field> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_loan_issue_line_filter" model="ir.ui.view"> |
|||
<field name="name">Loans Search</field> |
|||
<field name="model">loan.issue.line</field> |
|||
<field name="arch" type="xml"> |
|||
<search string="Search Loans"> |
|||
<field name="name"/> |
|||
<field name="partner_id"/> |
|||
<field name="loan_issue_id"/> |
|||
<separator/> |
|||
<filter string="Draft" name="state_draft" domain="[('state','=','draft')]"/> |
|||
<filter string="Paid" name="state_paid" domain="[('state','=','paid')]"/> |
|||
<filter string="Done" name="state_done" domain="[('state','=','done')]"/> |
|||
<filter string="Subscribed" name="state_subscribed" domain="[('state','=','subscribed')]"/> |
|||
<group expand="0" name="group_by" string="Group By"> |
|||
<filter name="loan_issue_id" string="Loan Issue" context="{'group_by' : 'loan_issue_id'}" /> |
|||
<filter name="date" string="Subscription Date" context="{'group_by': 'date'}"/> |
|||
</group> |
|||
</search> |
|||
</field> |
|||
</record> |
|||
</odoo> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue