Browse Source

[ADD] animal

12.0
Maxime Chambreuil 4 years ago
parent
commit
8077211aa8
  1. 21
      animal/README.rst
  2. 3
      animal/__init__.py
  3. 29
      animal/__manifest__.py
  4. 25
      animal/data/animal.breed.csv
  5. 2
      animal/data/animal.color.csv
  6. 4
      animal/data/animal.species.csv
  7. 2
      animal/data/ir.module.category.csv
  8. 8
      animal/models/__init__.py
  9. 42
      animal/models/animal.py
  10. 12
      animal/models/animal_breed.py
  11. 14
      animal/models/animal_color.py
  12. 12
      animal/models/animal_species.py
  13. 3
      animal/readme/CONTRIBUTORS.rst
  14. 1
      animal/readme/DESCRIPTION.rst
  15. 3
      animal/readme/USAGE.rst
  16. 8
      animal/security/ir.model.access.csv
  17. 10
      animal/security/res_groups.xml
  18. BIN
      animal/static/description/icon.png
  19. BIN
      animal/static/img/avatar.png
  20. 156
      animal/views/animal.xml
  21. 53
      animal/views/animal_breed.xml
  22. 55
      animal/views/animal_color.xml
  23. 54
      animal/views/animal_species.xml
  24. 41
      animal/views/menu.xml

21
animal/README.rst

@ -0,0 +1,21 @@
**This file is going to be generated by oca-gen-addon-readme.**
*Manual changes will be overwritten.*
Please provide content in the ``readme`` directory:
* **DESCRIPTION.rst** (required)
* INSTALL.rst (optional)
* CONFIGURE.rst (optional)
* **USAGE.rst** (optional, highly recommended)
* DEVELOP.rst (optional)
* ROADMAP.rst (optional)
* HISTORY.rst (optional, recommended)
* **CONTRIBUTORS.rst** (optional, highly recommended)
* CREDITS.rst (optional)
Content of this README will also be drawn from the addon manifest,
from keys such as name, authors, maintainers, development_status,
and license.
A good, one sentence summary in the manifest is also highly recommended.

3
animal/__init__.py

@ -0,0 +1,3 @@
# Copyright (C) 2020 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import models

29
animal/__manifest__.py

@ -0,0 +1,29 @@
# Copyright (C) 2020 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Animal",
"version": "12.0.1.0.0",
"license": "AGPL-3",
"summary": "Manage animals information",
"author": "Open Source Integrators, Odoo Community Association (OCA)",
"maintainer": "Open Source Integrators",
"website": "https://github.com/OCA/partner-contact",
"depends": ["mail"],
"data": [
"data/ir.module.category.csv",
"data/animal.species.csv",
"data/animal.breed.csv",
"data/animal.color.csv",
"security/res_groups.xml",
"security/ir.model.access.csv",
"views/animal_color.xml",
"views/animal_breed.xml",
"views/animal_species.xml",
"views/animal.xml",
"views/menu.xml",
],
"demo": [],
"application": True,
"development_status": "Beta",
"maintainers": ["max3903"],
}

25
animal/data/animal.breed.csv

@ -0,0 +1,25 @@
id,name,species_id/id
beagle,Beagle,animal.dog
boxer,Boxer,animal.dog
bull_terrier,Bull Terrier,animal.dog
bulldog,Bulldog,animal.dog
chihuahua,Chihuahua,animal.dog
cocker,Cocker,animal.dog
collie,Collie,animal.dog
dalmatian,Dalmatian,animal.dog
dachshund,Dachshund,animal.dog
doberman,Doberman,animal.dog
english_cocker_spaniel,English Cocker Spaniel,animal.dog
french_bulldog,French Bulldog,animal.dog
german_shepard,German Shepard,animal.dog
golden_retriever,Golden Retriever,animal.dog
great_dane,Great Dane,animal.dog
jack_russell,Jack Russell,animal.dog
labrador,Labrador,animal.dog
pomeranian,Pomeranian,animal.dog
pug,Pug,animal.dog
rottweiler,Rottweiler,animal.dog
schnauzer,Schnauzer,animal.dog
shih_tzu,Shih Tzu,animal.dog
siberian_husky,Siberian Husky,animal.dog
yorkshire_terrier,Yorkshire Terrier,animal.dog

2
animal/data/animal.color.csv

@ -0,0 +1,2 @@
id,name,breed_id/id
salt,Salt and pepper,animal.schnauzer

4
animal/data/animal.species.csv

@ -0,0 +1,4 @@
id,name
bird,Bird
cat,Cat
dog,Dog

2
animal/data/ir.module.category.csv

@ -0,0 +1,2 @@
id,name,sequence
animal,Animal,30

8
animal/models/__init__.py

@ -0,0 +1,8 @@
# Copyright (C) 2020 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import (
animal_species,
animal_breed,
animal_color,
animal,
)

42
animal/models/animal.py

@ -0,0 +1,42 @@
# Copyright (C) 2020 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class Animal(models.Model):
_name = "animal"
_description = "Animal"
_inherit = ["mail.thread", "mail.activity.mixin"]
_order = "name"
name = fields.Char(string="Name")
ref = fields.Char(string="Reference")
species_id = fields.Many2one("animal.species", string="Species", required=True)
breed_id = fields.Many2one("animal.breed", string="Breed", required=True)
color_id = fields.Many2one("animal.color", string="Color")
size = fields.Char(string="Size")
weight = fields.Float(string="Weight (in kg)")
birth_date = fields.Date(string="Birth Date")
gender = fields.Selection(
string="Gender",
selection=[
("female", "Female"),
("male", "Male"),
("hermaphrodite", "Hermaphrodite"),
("neutered", "Neutered"),
],
default="female",
required=True,
)
active = fields.Boolean(default=True)
image = fields.Binary(
"Image", attachment=True, help="This field holds the photo of the animal."
)
@api.onchange("species_id")
def onchange_species(self):
self.breed_id = False
@api.onchange("breed_id")
def onchange_breed(self):
self.color_id = False

12
animal/models/animal_breed.py

@ -0,0 +1,12 @@
# Copyright (C) 2020 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AnimalBreed(models.Model):
_name = "animal.breed"
_description = "Animal Breeds"
_order = "name"
name = fields.Char(string="Name", translate=True)
species_id = fields.Many2one("animal.species", string="Species", required=True)

14
animal/models/animal_color.py

@ -0,0 +1,14 @@
# Copyright (C) 2020 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AnimalColor(models.Model):
_name = "animal.color"
_description = "Animal Colors"
name = fields.Char(string="Name", translate=True)
breed_id = fields.Many2one("animal.breed", string="Breed", required=True)
species_id = fields.Many2one(
"animal.species", string="Species", related="breed_id.species_id", readonly=True
)

12
animal/models/animal_species.py

@ -0,0 +1,12 @@
# Copyright (C) 2020 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AnimalSpecies(models.Model):
_name = "animal.species"
_description = "Animal Species"
_order = "name"
name = fields.Char(string="Name", translate=True)
breed_ids = fields.One2many("animal.breed", "species_id", string="Breeds")

3
animal/readme/CONTRIBUTORS.rst

@ -0,0 +1,3 @@
* Open Source Integrators <https://www.opensourceintegrators.com>
* Maxime Chambreuil <mchambreuil@opensourceintegrators.com>

1
animal/readme/DESCRIPTION.rst

@ -0,0 +1 @@
This module allows you to store animal information.

3
animal/readme/USAGE.rst

@ -0,0 +1,3 @@
* Go to Animals
* Create an animal by entering his name and selecting his gender, species, breed and
color.

8
animal/security/ir.model.access.csv

@ -0,0 +1,8 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_animal_user,animal.user,model_animal,base.group_user,1,1,1,1
access_animal_color_user,animal.color.user,model_animal_color,base.group_user,1,0,0,0
access_animal_color_manager,animal.color.manaager,model_animal_color,animal.group_animal_manager,1,1,1,1
access_animal_breed_user,animal.breed.user,model_animal_breed,base.group_user,1,0,0,0
access_animal_breed_manager,animal.breed.manager,model_animal_breed,animal.group_animal_manager,1,1,1,1
access_animal_species_user,animal.species.user,model_animal_species,base.group_user,1,0,0,0
access_animal_species_manager,animal.species.manager,model_animal_species,animal.group_animal_manager,1,1,1,0

10
animal/security/res_groups.xml

@ -0,0 +1,10 @@
<odoo>
<!-- Animal groups -->
<record id="group_animal_manager" model="res.groups">
<field name="name">Manager</field>
<field name="category_id" ref="animal"/>
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
</odoo>

BIN
animal/static/description/icon.png

After

Width: 591  |  Height: 592  |  Size: 37 KiB

BIN
animal/static/img/avatar.png

After

Width: 2130  |  Height: 2130  |  Size: 86 KiB

156
animal/views/animal.xml

@ -0,0 +1,156 @@
<odoo>
<!-- Animal Tree View -->
<record id="view_animal_tree" model="ir.ui.view">
<field name="name">animal.tree</field>
<field name="model">animal</field>
<field name="arch" type="xml">
<tree string="Animals">
<field name="ref"/>
<field name="name"/>
<field name="gender"/>
<field name="species_id"/>
<field name="breed_id"/>
<field name="color_id"/>
</tree>
</field>
</record>
<!-- Animal Form View -->
<record id="view_animal_form" model="ir.ui.view">
<field name="name">animal.form</field>
<field name="model">animal</field>
<field name="arch" type="xml">
<form string="Animal">
<header/>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="toggle_active" type="object"
class="oe_stat_button" icon="fa-archive">
<field name="active" widget="boolean_button"
options='{"terminology": "archive"}'/>
</button>
</div>
<field name="image" widget='image' class="oe_avatar"/>
<div class="oe_title">
<h1>
<field name="name"/>
</h1>
<field name="gender" widget="radio"
options="{'horizontal': true}"/>
</div>
<group id="main">
<group id="left">
<field name="species_id"/>
<field name="breed_id" domain="[('species_id', '=', species_id)]"/>
<field name="color_id" domain="[('breed_id', '=', breed_id)]"/>
<field name="size"/>
</group>
<group id="right">
<field name="ref"/>
<field name="weight"/>
<field name="birth_date"/>
</group>
</group>
<notebook/>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"
widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"
options="{'post_refresh': 'recipients'}"/>
</div>
</form>
</field>
</record>
<!-- Animal Kanban View -->
<record id="view_animal_kanban" model="ir.ui.view">
<field name="name">animal.kanban</field>
<field name="model">animal</field>
<field name="arch" type="xml">
<kanban class="o_res_partner_kanban">
<field name="id"/>
<field name="image"/>
<field name="name"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click o_kanban_record_has_image_fill o_res_partner_kanban">
<t t-if="record.image.raw_value">
<img class="o_kanban_image" t-att-src="kanban_image('animal', 'image', record.id.raw_value)" t-att-alt="record.name"/>
</t>
<t t-else="">
<img class="o_kanban_image" alt="Avatar" t-att-src='_s + "/animal/static/img/avatar.png"'/>
</t>
<div class="oe_kanban_details">
<strong class="o_kanban_record_title oe_partner_heading"><field name="display_name"/></strong>
<div class="o_kanban_tags_section oe_kanban_partner_categories"/>
<ul>
<li t-if="record.gender.raw_value"><field name="gender"/></li>
<li t-if="record.species_id.raw_value and record.breed_id.raw_value"><field name="breed_id"/>, <field name="species_id"/></li>
</ul>
<div class="oe_kanban_partner_links"/>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- Search for animal -->
<record id="view_animal_search" model="ir.ui.view">
<field name="name">animal.search</field>
<field name="model">animal</field>
<field name="arch" type="xml">
<search string="Animals">
<field name="name"
filter_domain="['|', ('name', 'ilike', self), ('ref', 'ilike', self)]"
string="Name"/>
<field name="species_id"/>
<field name="breed_id"/>
<field name="color_id"/>
<field name="size"/>
<separator/>
<filter string="Female"
domain="[('gender', '=', 'female')]"
name="female"/>
<filter string="Male"
domain="[('gender', '=', 'male')]"
name="male"/>
<filter string="Hermaphrodite"
domain="[('gender', '=', 'hermaphrodite')]"
name="hermaphrodite"/>
<filter string="Neutered"
domain="[('gender', '=', 'neutered')]"
name="neutered"/>
<separator/>
<group expand="0" string="Group By">
<filter name="gender" string="Gender" domain=""
context="{'group_by': 'gender'}"/>
<filter name="species_id" string="Species" domain=""
context="{'group_by': 'species_id'}"/>
<filter name="breed_id" string="Breed" domain=""
context="{'group_by': 'breed_id'}"/>
<filter name="color_id" string="Color" domain=""
context="{'group_by': 'color_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_animal" model="ir.actions.act_window">
<field name="name">Animals</field>
<field name="res_model">animal</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="search_view_id" ref="view_animal_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create an animal.
</p>
</field>
</record>
</odoo>

53
animal/views/animal_breed.xml

@ -0,0 +1,53 @@
<odoo>
<!-- Animal breed Tree View -->
<record id="view_animal_breed_tree" model="ir.ui.view">
<field name="name">view.animal.breed.tree</field>
<field name="model">animal.breed</field>
<field name="arch" type="xml">
<tree string="Breeds">
<field name="name"/>
<field name="species_id"/>
</tree>
</field>
</record>
<!-- Animal breed Form View -->
<record id="view_animal_breed_form" model="ir.ui.view">
<field name="name">view.animal.breed.form</field>
<field name="model">animal.breed</field>
<field name="arch" type="xml">
<form string="Breed">
<header/>
<sheet>
<div class="oe_button_box" name="button_box"/>
<div class="oe_title">
<h1>
<field name="name"/>
</h1>
</div>
<group id="main">
<group id="left">
<field name="species_id"/>
</group>
<group id="right"/>
</group>
<notebook/>
</sheet>
</form>
</field>
</record>
<record id="action_animal_breed" model="ir.actions.act_window">
<field name="name">Breeds</field>
<field name="res_model">animal.breed</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a breed.
</p>
</field>
</record>
</odoo>

55
animal/views/animal_color.xml

@ -0,0 +1,55 @@
<odoo>
<!-- Animal color Tree View -->
<record id="view_animal_color_tree" model="ir.ui.view">
<field name="name">view.animal.color.tree</field>
<field name="model">animal.color</field>
<field name="arch" type="xml">
<tree string="colors">
<field name="name"/>
<field name="breed_id"/>
<field name="species_id"/>
</tree>
</field>
</record>
<!-- Animal Color Form View -->
<record id="view_animal_color_form" model="ir.ui.view">
<field name="name">view.animal.color.form</field>
<field name="model">animal.color</field>
<field name="arch" type="xml">
<form string="Color">
<header/>
<sheet>
<div class="oe_button_box" name="button_box"/>
<div class="oe_title">
<h1>
<field name="name"/>
</h1>
</div>
<group id="main">
<group id="left">
<field name="breed_id"/>
<field name="species_id"/>
</group>
<group id="right"/>
</group>
<notebook/>
</sheet>
</form>
</field>
</record>
<record id="action_animal_color" model="ir.actions.act_window">
<field name="name">Colors</field>
<field name="res_model">animal.color</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a color.
</p>
</field>
</record>
</odoo>

54
animal/views/animal_species.xml

@ -0,0 +1,54 @@
<odoo>
<!-- Animal Species Tree View -->
<record id="view_animal_species_tree" model="ir.ui.view">
<field name="name">view.animal.species.tree</field>
<field name="model">animal.species</field>
<field name="arch" type="xml">
<tree string="Species">
<field name="name"/>
</tree>
</field>
</record>
<!-- Animal Species Form View -->
<record id="view_animal_species_form" model="ir.ui.view">
<field name="name">view.animal.species.form</field>
<field name="model">animal.species</field>
<field name="arch" type="xml">
<form string="Species">
<header/>
<sheet>
<div class="oe_button_box" name="button_box"/>
<div class="oe_title">
<h1>
<field name="name"/>
</h1>
</div>
<group id="main">
<group id="left"/>
<group id="right"/>
</group>
<notebook>
<page string="Breeds" id="breeds">
<field name="breed_ids"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="action_animal_species" model="ir.actions.act_window">
<field name="name">Species</field>
<field name="res_model">animal.species</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a species.
</p>
</field>
</record>
</odoo>

41
animal/views/menu.xml

@ -0,0 +1,41 @@
<odoo>
<!-- Main Menu -->
<menuitem id="root"
name="Animals"
action="action_animal"
sequence="10"
web_icon="animal,static/description/icon.png"/>
<menuitem id="animal"
name="Animals"
action="action_animal"
sequence="10"
parent="root"/>
<menuitem id="config"
name="Configuration"
sequence="100"
parent="root"
groups="group_animal_manager"/>
<!-- Configuration -->
<menuitem id="settings"
name="Settings"
sequence="10"
parent="config"/>
<menuitem id="species"
name="Species"
action="action_animal_species"
sequence="20"
parent="config"/>
<menuitem id="breed"
name="Breeds"
action="action_animal_breed"
sequence="30"
parent="config"/>
<menuitem id="color"
name="Colors"
action="action_animal_color"
sequence="40"
parent="config"/>
</odoo>
Loading…
Cancel
Save