Merge pull request #1703 from expsa/ensan_services_tasks_27_10
Payment Orders
This commit is contained in:
commit
c4fe08eb9c
|
|
@ -14,6 +14,7 @@
|
|||
'security/ir.model.access.csv',
|
||||
'views/actions_and_menus.xml',
|
||||
'data/scheduled_actions.xml',
|
||||
'data/server_actions.xml',
|
||||
'data/email_temps.xml',
|
||||
|
||||
'views/benefit_view.xml',
|
||||
|
|
@ -25,6 +26,7 @@
|
|||
'wizards/researcher_wizard.xml',
|
||||
'wizards/suspend_reason_wizard.xml',
|
||||
'wizards/exception_wizard.xml',
|
||||
'wizards/exchange_order_wizard.xml',
|
||||
'views/visit.xml',
|
||||
|
||||
'views/main_service.xml',
|
||||
|
|
@ -33,6 +35,7 @@
|
|||
'views/ir_attachment_inherit.xml',
|
||||
'views/changes_requests.xml',
|
||||
'views/education_settings.xml',
|
||||
'views/payment_order.xml',
|
||||
# 'views/res_config_settings_view.xml',
|
||||
# 'views/benefit_expenses_view.xml',
|
||||
'views/sms_view.xml',
|
||||
|
|
|
|||
|
|
@ -53,4 +53,15 @@
|
|||
<field eval="False" name="company_id"/>
|
||||
<field name="padding">4</field>
|
||||
</record>
|
||||
<!-- Sequence for payment orders -->
|
||||
<record id="payment_orders_sequence" model="ir.sequence">
|
||||
<field name="name">Payment Orders Sequence</field>
|
||||
<field name="code">payment.orders.sequence</field>
|
||||
<field name="prefix">P/</field>
|
||||
<field eval="1" name="number_next"/>
|
||||
<field eval="1" name="number_increment"/>
|
||||
<field eval="True" name="use_date_range"/>
|
||||
<field eval="False" name="company_id"/>
|
||||
<field name="padding">4</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- Used to bring a menu inside action menu -->
|
||||
<record id="server_action_exchange_orders" model="ir.actions.server">
|
||||
<field name="name">Exchange orders</field>
|
||||
<field name="model_id" ref="odex_benefit.model_service_request"/>
|
||||
<field name="binding_model_id" ref="odex_benefit.model_service_request"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = records.action_open_exchange_order_wizard()</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -25,4 +25,5 @@ from . import family_expense
|
|||
from . import services_settings
|
||||
from . import res_country_inherit
|
||||
from . import service_request
|
||||
from . import payment_order
|
||||
# from . import res_config_settings
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
from odoo import fields, models, api, _
|
||||
|
||||
|
||||
class PaymentOrders(models.Model):
|
||||
_name = 'payment.orders'
|
||||
_description = "Payment Orders"
|
||||
|
||||
name = fields.Char(string="Code", copy=False, readonly=True, default=lambda x: _('New'))
|
||||
ref_num = fields.Char(string='Ref. Number')
|
||||
payment_order_date = fields.Datetime(string="Payment Order Date",default=fields.Datetime.now)
|
||||
accountant_id = fields.Many2one('res.users',string='Accountant')
|
||||
payment_order_description = fields.Char(string='Payment Order Description')
|
||||
service_requests_ids = fields.One2many('service.request', 'payment_order_id', string ='Service Requests')
|
||||
state = fields.Selection(string='Status', selection=[('draft', 'Draft'),('accountant_approve', 'accountant Approve'),('department_manager_approve', 'Department Manager Approve')
|
||||
,('accounting_approve', 'Accounting Approve'),('general_manager_approve', 'General Manager Approve'),('refused', 'Refused')])
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
res = super(PaymentOrders, self).create(vals)
|
||||
if not res.name or res.name == _('New'):
|
||||
res.name = self.env['ir.sequence'].sudo().next_by_code('payment.orders.sequence') or _('New')
|
||||
return res
|
||||
|
||||
@api.model
|
||||
def search(self, args, offset=0, limit=None, order=None, count=False):
|
||||
if self.env.user and self.env.user.id and self.env.user.has_group(
|
||||
"odex_benefit.group_benefit_accountant_accept"):
|
||||
args += [('accountant_id', '=', self.env.user.id)]
|
||||
return super(PaymentOrders, self).search(args, offset, limit, order, count)
|
||||
|
||||
def action_accountant_approve(self):
|
||||
for rec in self:
|
||||
rec.state = 'accountant_approve'
|
||||
|
||||
def action_department_manager_approve(self):
|
||||
for rec in self:
|
||||
rec.state = 'department_manager_approve'
|
||||
|
||||
def action_accounting_approve(self):
|
||||
for rec in self:
|
||||
rec.state = 'accounting_approve'
|
||||
|
||||
def action_general_manager_approve(self):
|
||||
for rec in self:
|
||||
rec.state = 'general_manager_approve'
|
||||
|
||||
def action_refuse(self):
|
||||
for rec in self:
|
||||
rec.state = 'refused'
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
from gevent.os import nb_write
|
||||
from odoo import fields, models, api, _
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
from datetime import timedelta
|
||||
|
|
@ -78,6 +77,8 @@ class ServiceRequest(models.Model):
|
|||
restoration_max_amount = fields.Float(string='Restoration Max Amount',compute='_get_restoration_max_amount')
|
||||
has_money_to_pay_first_payment = fields.Selection([('yes', 'Yes'), ('no', 'No')],string='Has money to pay first payment?')
|
||||
has_money_field_is_appearance = fields.Boolean(string='Has money Field is appearance?',compute='_get_money_field_is_appearance')
|
||||
payment_order_id = fields.Many2one('payment.orders',string='Payment Order')
|
||||
is_payment_order_done = fields.Boolean(string='Is Payment Order Done?')
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('researcher', 'Researcher'),
|
||||
|
|
@ -344,4 +345,22 @@ class ServiceRequest(models.Model):
|
|||
for rec in self:
|
||||
rec.state= 'draft'
|
||||
|
||||
|
||||
def action_open_exchange_order_wizard(self):
|
||||
ids = []
|
||||
for rec in self:
|
||||
ids.append(rec.id)
|
||||
default_service_ids = ids
|
||||
service_requests = self.env['service.request'].browse(ids)
|
||||
if any(request.state not in 'accounting_approve' for request in service_requests):
|
||||
raise UserError(_("All selected requests should be in Accounting Approve state"))
|
||||
if any(request.payment_order_id for request in service_requests):
|
||||
raise UserError(_("All selected requests should be not has payment order"))
|
||||
else:
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': 'Exchange Order',
|
||||
'res_model': 'exchange.order.wizard',
|
||||
'view_mode': 'form',
|
||||
'target': 'new',
|
||||
'context': {'default_service_ids': ids}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -127,4 +127,6 @@ access_marital_status,access_marital_status,model_marital_status,base.group_user
|
|||
access_service_attachments_settings,access_service_attachments_settings,model_service_attachments_settings,base.group_user,1,1,1,1
|
||||
access_home_restoration_lines,access_home_restoration_lines,model_home_restoration_lines,base.group_user,1,1,1,1
|
||||
access_home_maintenance_lines,access_home_maintenance_lines,model_home_maintenance_lines,base.group_user,1,1,1,1
|
||||
access_home_maintenance_items,access_home_maintenance_items,model_home_maintenance_items,base.group_user,1,1,1,1
|
||||
access_home_maintenance_items,access_home_maintenance_items,model_home_maintenance_items,base.group_user,1,1,1,1
|
||||
access_exchange_order_wizard,access_exchange_order_wizard,model_exchange_order_wizard,base.group_user,1,1,1,1
|
||||
access_payment_orders,access_payment_orders,model_payment_orders,base.group_user,1,1,1,1
|
||||
|
|
|
@ -541,7 +541,7 @@
|
|||
<field name="name">Services Requests</field>
|
||||
<field name="res_model">service.request</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('state','=','second_approve')]</field>
|
||||
<field name="domain">['|','|',('state','=','second_approve'),('state','=','accounting_approve'),('state','=','refused')]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">Create the Service Request
|
||||
</p>
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@
|
|||
|
||||
<!-- Menu Item -->
|
||||
<menuitem id="menu_confirm_benefit_expense" name="Benefit Expense Flow" parent="account.menu_finance_payables"
|
||||
action="action_confirm_benefit_expense" sequence="10"/>
|
||||
action="action_confirm_benefit_expense" sequence="11"/>
|
||||
|
||||
<record id="view_move_line_tree_new_code" model="ir.ui.view">
|
||||
<field name="name">account.move.line.form</field>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,82 @@
|
|||
<odoo>
|
||||
<data>
|
||||
<record id="payment_orders_form" model="ir.ui.view">
|
||||
<field name="name">payment.orders.form</field>
|
||||
<field name="model">payment.orders</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Payment Orders">
|
||||
<header>
|
||||
<button name="action_accountant_approve" type="object" states="draft"
|
||||
string="Accountant Approve" class="oe_highlight" groups="odex_benefit.group_benefit_accountant_accept"/>
|
||||
<button name="action_department_manager_approve" type="object" states="accountant_approve"
|
||||
string="Department Manager Approve" class="oe_highlight" groups="odex25_account_payment_fix.group_depart_manager"/>
|
||||
<button name="action_accounting_approve" type="object" states="department_manager_approve"
|
||||
string="Accounting Approve" class="oe_highlight" groups="odex25_account_payment_fix.group_accounting_manager"/>
|
||||
<button name="action_general_manager_approve" type="object" states="accounting_approve"
|
||||
string="General Manager Approve" class="oe_highlight" groups="odex25_account_payment_fix.group_general_manager"/>
|
||||
<button name="action_refuse" type="object" states="draft,accountant_approve,department_manager_approve,accounting_approve,general_manager_approve"
|
||||
string="Refuse" class="oe_highlight"/>
|
||||
|
||||
<field name="state" widget="statusbar"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" readonly="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<field name="payment_order_date"/>
|
||||
<field name="accountant_id"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="payment_order_description"/>
|
||||
<field name="ref_num"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Services Requests">
|
||||
<field name="service_requests_ids" widget="one2many_list" readonly="1">
|
||||
<tree editable="bottom">
|
||||
<field name="family_id"/>
|
||||
<field name="member_id"/>
|
||||
<field name="branch_custom_id"/>
|
||||
<field name="account_id"/>
|
||||
<field name="name"/>
|
||||
<field name="description"/>
|
||||
<field name="paid_rent_amount"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="payment_orders_tree" model="ir.ui.view">
|
||||
<field name="name">payment.orders.tree</field>
|
||||
<field name="model">payment.orders</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Payment Orders">
|
||||
<field name="name" readonly="1"/>
|
||||
<field name="payment_order_date"/>
|
||||
<field name="accountant_id"/>
|
||||
<field name="payment_order_description"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<!-- Action -->
|
||||
<record id="action_payment_orders" model="ir.actions.act_window">
|
||||
<field name="name">Payment Orders</field>
|
||||
<field name="res_model">payment.orders</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="payment_orders_tree"/>
|
||||
</record>
|
||||
|
||||
<!-- Menu Item -->
|
||||
<menuitem id="menu_payment_orders" name="Payment Orders" parent="account.menu_finance_payables"
|
||||
action="action_payment_orders" sequence="10"/>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -34,6 +34,9 @@
|
|||
<field name="state" widget="statusbar"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<field name="is_payment_order_done" invisible="1"/>
|
||||
<widget name="web_ribbon" title="Payment Order Done" bg_color="bg-success"
|
||||
attrs="{'invisible': [('is_payment_order_done', '=', False)]}"/>
|
||||
<group>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
|
|
@ -50,6 +53,7 @@
|
|||
<field name="member_id" attrs="{'invisible':[('benefit_type','!=','member')],'readonly':[('state','not in',['draft','researcher','send_request'])],'required':[('benefit_type','=','member')]}"/>
|
||||
<field name="account_id"/>
|
||||
<field name="accountant_id" attrs="{'invisible':[('state','in',['draft','researcher','send_request','first_approve','second_approve'])]}"/>
|
||||
<field name="payment_order_id" readonly="1" groups="odex_benefit.group_benefit_accounting_accept"/>
|
||||
<field name="is_service_producer" invisible="1"/>
|
||||
<field name="service_producer_id" attrs="{'invisible':[('is_service_producer','=',False)],'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
|
||||
</group>
|
||||
|
|
@ -176,6 +180,7 @@
|
|||
<field name="main_service_category"/>
|
||||
<field name="sub_service_category"/>
|
||||
<field name="service_cat"/>
|
||||
<field name="payment_order_id" groups="odex_benefit.group_benefit_accounting_accept"/>
|
||||
<field name="state" widget="badge" decoration-success="state in ['second_approve']" decoration-muted="state == 'draft'"
|
||||
decoration-danger="state in ['refused']"
|
||||
decoration-info="state in ['first_approve','send_request']"/>
|
||||
|
|
@ -200,14 +205,26 @@
|
|||
<filter string="Send Request" name="send_request" domain="[('state', '=', 'send_request')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="First Approve" name="first_approve" domain="[('state', '=', 'first_approve')]"/>
|
||||
<filter string="Request First Approve" name="first_approve" domain="[('state', '=', 'first_approve')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Second Approve" name="second_approve" domain="[('state', '=', 'second_approve')]"/>
|
||||
<filter string="Request Second Approve" name="second_approve" domain="[('state', '=', 'second_approve')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Accounting Approve" name="accounting_approve" domain="[('state', '=', 'accounting_approve')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Refused" name="refused" domain="[('state', '=', 'refused')]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Payment Order Done" name="payment_order_done" domain="[('payment_order_id', '!=', False)]"/>
|
||||
<separator/>
|
||||
<separator/>
|
||||
<filter string="Need Payment Order" name="payment_order_done" domain="[('payment_order_id', '=', False),('state','=','accounting_approve')]"/>
|
||||
<separator/>
|
||||
<searchpanel>
|
||||
<field name="service_cat" string="Categories" enable_counters="1" />
|
||||
</searchpanel>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -4,4 +4,5 @@ from . import entity_black_list_wizard
|
|||
from . import researcher_wizard
|
||||
from . import suspend_reason_wizard
|
||||
from . import exception_wizard
|
||||
from . import exchange_order_wizard
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
from odoo import models, fields, api
|
||||
|
||||
class ExchangeOrderWizard(models.TransientModel):
|
||||
_name = 'exchange.order.wizard'
|
||||
_description = 'Wizard to Assign Accounting that Exchange Orders'
|
||||
|
||||
accountant_id = fields.Many2one('res.users',string='Accountant')
|
||||
|
||||
def create_payment_order(self):
|
||||
active_ids = self.env.context.get('default_service_ids')
|
||||
service_requests = self.env['service.request'].browse(active_ids)
|
||||
for service in service_requests:
|
||||
service.is_payment_order_done = True
|
||||
self.env['payment.orders'].create({
|
||||
'state':'draft',
|
||||
'accountant_id':self.accountant_id.id,
|
||||
'service_requests_ids' : service_requests.ids
|
||||
})
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
<odoo>
|
||||
<record id="view_exchange_order_wizard_form" model="ir.ui.view">
|
||||
<field name="name">exchange.order.wizard.form</field>
|
||||
<field name="model">exchange.order.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Exchange Order">
|
||||
<group>
|
||||
<field name="accountant_id"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="Confirm" type="object" name="create_payment_order" class="btn-primary"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Action to open the wizard -->
|
||||
<record id="action_exchange_order_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Exchange Order</field>
|
||||
<field name="res_model">exchange.order.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Loading…
Reference in New Issue