Merge branch 'mig/12.0/maintenance_equipment_charge' into '12.0'

mig/12.0/maintenance_equipment_charge into 12.0

See merge request hibou-io/hibou-odoo/suite!202
This commit is contained in:
Jared Kipe
2019-12-13 22:41:45 +00:00
9 changed files with 324 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
************************************
Hibou - Maintenance Equipment Charge
************************************
Record related equipment charges, for example fuel charges.
For more information and add-ons, visit `Hibou.io <https://hibou.io/>`_.
=============
Main Features
=============
* New Models: Equipment Charge and Equipment Charge Type
* New smart button on the equipment form view for Charges.
* Adds Equipment Charge views: form, tree, graph, pivot and calendar.
* Adds filters to group equipment charges by: Charge Type, Equipment, Employee and Department.
* By default, **Employees** have the ability to create and view **Charges** and **Charge Types**, while **Inventory Managers** have the ability to update and delete them.
.. image:: https://user-images.githubusercontent.com/15882954/41184422-143b5cc4-6b35-11e8-9dcc-6c16ac31b869.png
:alt: 'Equipment Detail'
:width: 988
:align: left
.. image:: https://user-images.githubusercontent.com/15882954/41184430-27f2c586-6b35-11e8-94f4-9b4efa1fcfe9.png
:alt: 'Equipment Charges Detail'
:width: 988
:align: left
.. image:: https://user-images.githubusercontent.com/15882954/41184451-3ee3cc18-6b35-11e8-9488-445538501be8.png
:alt: 'Equipment Charge Detail'
:width: 988
:align: left
=======
License
=======
Please see `LICENSE <https://github.com/hibou-io/hibou-odoo-suite/blob/11.0/LICENSE>`_.
Copyright Hibou Corp. 2018

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -0,0 +1,24 @@
{
'name': 'Equipment Charges',
'version': '12.0.1.0.0',
'author': 'Hibou Corp. <hello@hibou.io>',
'category': 'Human Resources',
'summary': 'Record related equipment charges.',
'description': """
Equipment Charges
=================
Record related equipment charges, for example fuel charges.
""",
'website': 'https://www.odoo.com/page/manufacturing',
'depends': [
'hr_maintenance',
'stock'
],
'data': [
'security/ir.model.access.csv',
'views/maintenance_views.xml',
],
'installable': True,
'auto_install': False,
}

View File

@@ -0,0 +1 @@
from . import maintenance

View File

@@ -0,0 +1,46 @@
from odoo import api, fields, models
class EquipmentChargeType(models.Model):
_name = 'maintenance.equipment.charge.type'
name = fields.Char(string='Charge Type')
uom_id = fields.Many2one('uom.uom', string='Charge UOM')
class Equipment(models.Model):
_inherit = 'maintenance.equipment'
charge_ids = fields.One2many('maintenance.equipment.charge', 'equipment_id', 'Charges', copy=False)
charge_count = fields.Integer(string='Charges', compute='_compute_charge_count')
@api.multi
def _compute_charge_count(self):
for equipment in self:
self.charge_count = len(equipment.charge_ids)
def action_open_charges(self):
self.ensure_one()
action = self.env.ref('maintenance_equipment_charge.maintenance_charge_action_reports').read()[0]
action['domain'] = [('equipment_id', '=', self.id)]
action['context'] = {
'default_equipment_id': self.id,
'default_employee_id': self.employee_id.id,
'default_department_id': self.department_id.id,
}
return action
class EquipmentCharge(models.Model):
_name = 'maintenance.equipment.charge'
_order = 'date DESC'
name = fields.Char(string='Description')
date = fields.Date(string='Date', default=fields.Date.today, index=True)
equipment_id = fields.Many2one('maintenance.equipment', copy=False)
type_id = fields.Many2one('maintenance.equipment.charge.type', string='Type')
employee_id = fields.Many2one('hr.employee', string='Employee')
department_id = fields.Many2one('hr.department', string='Department')
qty = fields.Float(string='Quantity', default=1.0)
uom_id = fields.Many2one('uom.uom', related='type_id.uom_id')
amount = fields.Float(string='Amount')

View File

@@ -0,0 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"manage_maintenance_equipment_charge","manage maintenance.equipment.charge","model_maintenance_equipment_charge","stock.group_stock_manager",1,1,1,1
"access_maintenance_equipment_charge","access maintenance.equipment.charge","model_maintenance_equipment_charge","base.group_user",1,0,1,0
"manage_maintenance_equipment_charge_type","manage maintenance.equipment.charge.type","model_maintenance_equipment_charge_type","stock.group_stock_manager",1,1,1,1
"access_maintenance_equipment_charge_type","access maintenance.equipment.charge.type","model_maintenance_equipment_charge_type","base.group_user",1,0,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 manage_maintenance_equipment_charge manage maintenance.equipment.charge model_maintenance_equipment_charge stock.group_stock_manager 1 1 1 1
3 access_maintenance_equipment_charge access maintenance.equipment.charge model_maintenance_equipment_charge base.group_user 1 0 1 0
4 manage_maintenance_equipment_charge_type manage maintenance.equipment.charge.type model_maintenance_equipment_charge_type stock.group_stock_manager 1 1 1 1
5 access_maintenance_equipment_charge_type access maintenance.equipment.charge.type model_maintenance_equipment_charge_type base.group_user 1 0 1 0

View File

@@ -0,0 +1 @@
from . import test_maintenance_usage

View File

@@ -0,0 +1,21 @@
from odoo.tests import common
class TestMaintenanceCharge(common.TransactionCase):
"""Tests for charges
"""
def test_create(self):
test_charge = 21.0
equipment = self.env['maintenance.equipment'].create({
'name': 'Monitor',
})
self.assertFalse(equipment.charge_ids)
self.env['maintenance.equipment.charge'].create({
'equipment_id': equipment.id,
'name': 'test',
'amount': test_charge,
})
self.assertTrue(equipment.charge_ids)
self.assertAlmostEqual(equipment.charge_ids[0].amount, test_charge)

View File

@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record model="maintenance.equipment.charge.type" id="equipment_charge_other">
<field name="name">Other</field>
</record>
<record model="ir.ui.view" id="hr_equipment_view_form_inherited">
<field name="name">equipment.form.inherited</field>
<field name="model">maintenance.equipment</field>
<field name="inherit_id" ref="maintenance.hr_equipment_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button name="action_open_charges"
type="object"
class="oe_stat_button"
icon="fa-dollar"
help="show the usage charges for equipment" >
<field string="Charges" name="charge_count" widget="statinfo"/>
</button>
</xpath>
</field>
</record>
<!-- maintenance.equipment.charge : views -->
<record id="hr_equipment_charge_view_search" model="ir.ui.view">
<field name="name">equipment.charge.search</field>
<field name="model">maintenance.equipment.charge</field>
<field name="arch" type="xml">
<search string="Equipment Charge Search">
<field name="equipment_id"/>
<field name="employee_id"/>
<field name="department_id"/>
<field name="type_id"/>
<group expand="0" string="Group By">
<filter string="Charge Type" name="groupby_type_id" domain="[]" context="{'group_by':'type_id'}"/>
<filter string='Equipment' name="groupby_equipment_id" domain="[]" context="{'group_by': 'equipment_id'}"/>
<filter string='Employee' name="groupby_employee_id" domain="[]" context="{'group_by': 'employee_id'}"/>
<filter string='Department' name="groupby_department_id" domain="[]" context="{'group_by': 'department_id'}"/>
</group>
</search>
</field>
</record>
<record id="hr_equipment_charge_view_form" model="ir.ui.view">
<field name="name">equipment.charge.form</field>
<field name="model">maintenance.equipment.charge</field>
<field name="arch" type="xml">
<form string="Equipment Charge Form">
<header/>
<sheet>
<group>
<group>
<field name="date"/>
<field name="equipment_id"/>
<field name="employee_id"/>
<field name="department_id"/>
</group>
<group name="charge_info" string="Charge">
<field name="type_id" widget="selection"/>
<label for="qty"/>
<div class="o_row" name="qty">
<field name="qty" nolabel="1"/>
<field name="uom_id" nolabel="1" readonly="1"/>
</div>
<field name="amount"/>
<field name="name"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="hr_equipment_charge_view_tree" model="ir.ui.view">
<field name="name">equipment.charge.tree</field>
<field name="model">maintenance.equipment.charge</field>
<field name="arch" type="xml">
<tree string="Equipment Charge">
<field name="date"/>
<field name="type_id"/>
<field name="equipment_id"/>
<field name="employee_id"/>
<field name="department_id"/>
<field name="qty"/>
<field name="amount"/>
</tree>
</field>
</record>
<record id="hr_equipment_charge_view_graph" model="ir.ui.view">
<field name="name">equipment.charge.graph</field>
<field name="model">maintenance.equipment.charge</field>
<field name="arch" type="xml">
<graph string="Equipment Charge">
<field name="type_id"/>
<field name="equipment_id"/>
<field name="amount"/>
</graph>
</field>
</record>
<record id="hr_equipment_charge_view_pivot" model="ir.ui.view">
<field name="name">equipment.charge.pivot</field>
<field name="model">maintenance.equipment.charge</field>
<field name="arch" type="xml">
<pivot string="Equipment Charge">
<field name="type_id"/>
<field name="equipment_id"/>
<field name="amount"/>
</pivot>
</field>
</record>
<record id="hr_equipment_charge_view_calendar" model="ir.ui.view">
<field name="name">equipment.charge.calendar</field>
<field name="model">maintenance.equipment.charge</field>
<field name="arch" type="xml">
<calendar date_start="date" color="equipment_id">
<field name="equipment_id"/>
<field name="amount"/>
</calendar>
</field>
</record>
<!-- maintenance.equipment.charge : actions -->
<record id="maintenance_charge_action_reports" model="ir.actions.act_window">
<field name="name">Equipment Charges</field>
<field name="res_model">maintenance.equipment.charge</field>
<field name="view_mode">tree,form,graph,pivot,calendar</field>
<field name="help" type="html">
<p>
No charges.
</p>
</field>
</record>
<menuitem
id="maintenance_equipment_charge_reporting"
action="maintenance_charge_action_reports"
parent="maintenance.maintenance_reporting"/>
<!-- maintenance.equipment.charge.type : views -->
<record id="hr_equipment_charge_type_view_form" model="ir.ui.view">
<field name="name">equipment.charge.type.form</field>
<field name="model">maintenance.equipment.charge.type</field>
<field name="arch" type="xml">
<form string="Equipment Charge Type Form">
<header/>
<sheet>
<group>
<group>
<field name="name"/>
<field name="uom_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="hr_equipment_charge_type_view_tree" model="ir.ui.view">
<field name="name">equipment.charge.type.tree</field>
<field name="model">maintenance.equipment.charge.type</field>
<field name="arch" type="xml">
<tree string="Equipment Charge Type">
<field name="name"/>
<field name="uom_id"/>
</tree>
</field>
</record>
<!-- maintenance.equipment.charge.type : actions -->
<record id="maintenance_charge_type_action" model="ir.actions.act_window">
<field name="name">Equipment Charge Types</field>
<field name="res_model">maintenance.equipment.charge.type</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem
id="maintenance_equipment_charge_type"
action="maintenance_charge_type_action"
parent="maintenance.menu_maintenance_configuration"/>
</odoo>