Browse Source

Mar 8 [ADD] : Initial Commit 'agriculture_management_odoo'

pull/254/merge
AjmalCybro 1 year ago
parent
commit
a7188880e7
  1. 18
      agriculture_management_odoo/README.rst
  2. 5
      agriculture_management_odoo/__init__.py
  3. 74
      agriculture_management_odoo/__manifest__.py
  4. 18
      agriculture_management_odoo/data/data_sequence.xml
  5. 35
      agriculture_management_odoo/data/ir_sequence_data.xml
  6. 8
      agriculture_management_odoo/doc/RELEASE_NOTES.md
  7. 28
      agriculture_management_odoo/models/__init__.py
  8. 52
      agriculture_management_odoo/models/agriculture_tag.py
  9. 60
      agriculture_management_odoo/models/animal_detail.py
  10. 49
      agriculture_management_odoo/models/animal_details.py
  11. 125
      agriculture_management_odoo/models/animal_rental.py
  12. 45
      agriculture_management_odoo/models/crop_animal.py
  13. 44
      agriculture_management_odoo/models/crop_machinery.py
  14. 134
      agriculture_management_odoo/models/crop_request.py
  15. 123
      agriculture_management_odoo/models/crop_requests.py
  16. 49
      agriculture_management_odoo/models/damage_loss.py
  17. 55
      agriculture_management_odoo/models/farmer_detail.py
  18. 39
      agriculture_management_odoo/models/farmer_details.py
  19. 14
      agriculture_management_odoo/models/fleet_vehicle.py
  20. 60
      agriculture_management_odoo/models/location_detail.py
  21. 44
      agriculture_management_odoo/models/location_details.py
  22. 65
      agriculture_management_odoo/models/pest_detail.py
  23. 50
      agriculture_management_odoo/models/pest_details.py
  24. 103
      agriculture_management_odoo/models/pest_request.py
  25. 57
      agriculture_management_odoo/models/seed_detail.py
  26. 39
      agriculture_management_odoo/models/seed_details.py
  27. 39
      agriculture_management_odoo/models/tag_details.py
  28. 78
      agriculture_management_odoo/models/vehicle_detail.py
  29. 58
      agriculture_management_odoo/models/vehicle_details.py
  30. 125
      agriculture_management_odoo/models/vehicle_rental.py
  31. 5
      agriculture_management_odoo/report/crop_animal_reports.xml
  32. 18
      agriculture_management_odoo/report/crop_animal_templates.xml
  33. 6
      agriculture_management_odoo/report/crop_request_reports.xml
  34. 4
      agriculture_management_odoo/report/crop_request_templates.xml
  35. 13
      agriculture_management_odoo/report/crop_vehicle_reports.xml
  36. 22
      agriculture_management_odoo/report/crop_vehicle_templates.xml
  37. 12
      agriculture_management_odoo/report/pest_request_reports.xml
  38. 6
      agriculture_management_odoo/report/pest_request_templates.xml
  39. 17
      agriculture_management_odoo/security/agriculture_management_groups.xml
  40. 85
      agriculture_management_odoo/security/crop_request_security.xml
  41. 70
      agriculture_management_odoo/security/ir.model.access.csv
  42. 36
      agriculture_management_odoo/security/user_groups.xml
  43. 0
      agriculture_management_odoo/static/description/assets/icons/check.png
  44. 0
      agriculture_management_odoo/static/description/assets/icons/chevron.png
  45. 0
      agriculture_management_odoo/static/description/assets/icons/cogs.png
  46. 0
      agriculture_management_odoo/static/description/assets/icons/consultation.png
  47. 0
      agriculture_management_odoo/static/description/assets/icons/ecom-black.png
  48. 0
      agriculture_management_odoo/static/description/assets/icons/education-black.png
  49. 0
      agriculture_management_odoo/static/description/assets/icons/hotel-black.png
  50. 0
      agriculture_management_odoo/static/description/assets/icons/license.png
  51. 0
      agriculture_management_odoo/static/description/assets/icons/lifebuoy.png
  52. 0
      agriculture_management_odoo/static/description/assets/icons/logo.png
  53. 0
      agriculture_management_odoo/static/description/assets/icons/manufacturing-black.png
  54. 0
      agriculture_management_odoo/static/description/assets/icons/pos-black.png
  55. 0
      agriculture_management_odoo/static/description/assets/icons/puzzle.png
  56. 0
      agriculture_management_odoo/static/description/assets/icons/restaurant-black.png
  57. 0
      agriculture_management_odoo/static/description/assets/icons/service-black.png
  58. 0
      agriculture_management_odoo/static/description/assets/icons/trading-black.png
  59. 0
      agriculture_management_odoo/static/description/assets/icons/training.png
  60. 0
      agriculture_management_odoo/static/description/assets/icons/update.png
  61. 0
      agriculture_management_odoo/static/description/assets/icons/user.png
  62. 0
      agriculture_management_odoo/static/description/assets/icons/wrench.png
  63. 0
      agriculture_management_odoo/static/description/assets/modules/budget_image.png
  64. 0
      agriculture_management_odoo/static/description/assets/modules/credit_image.png
  65. 0
      agriculture_management_odoo/static/description/assets/modules/employee_image.png
  66. 0
      agriculture_management_odoo/static/description/assets/modules/export_image.png
  67. 0
      agriculture_management_odoo/static/description/assets/modules/gantt_image.png
  68. 0
      agriculture_management_odoo/static/description/assets/modules/quotation_image.png
  69. BIN
      agriculture_management_odoo/static/description/assets/screenshots/1.png
  70. BIN
      agriculture_management_odoo/static/description/assets/screenshots/10.png
  71. BIN
      agriculture_management_odoo/static/description/assets/screenshots/11.png
  72. BIN
      agriculture_management_odoo/static/description/assets/screenshots/12.png
  73. BIN
      agriculture_management_odoo/static/description/assets/screenshots/13.png
  74. BIN
      agriculture_management_odoo/static/description/assets/screenshots/14.png
  75. BIN
      agriculture_management_odoo/static/description/assets/screenshots/15.png
  76. BIN
      agriculture_management_odoo/static/description/assets/screenshots/16.png
  77. BIN
      agriculture_management_odoo/static/description/assets/screenshots/17.png
  78. BIN
      agriculture_management_odoo/static/description/assets/screenshots/18.png
  79. BIN
      agriculture_management_odoo/static/description/assets/screenshots/19.png
  80. BIN
      agriculture_management_odoo/static/description/assets/screenshots/2.png
  81. BIN
      agriculture_management_odoo/static/description/assets/screenshots/20.png
  82. BIN
      agriculture_management_odoo/static/description/assets/screenshots/21.png
  83. BIN
      agriculture_management_odoo/static/description/assets/screenshots/22.png
  84. BIN
      agriculture_management_odoo/static/description/assets/screenshots/23.png
  85. BIN
      agriculture_management_odoo/static/description/assets/screenshots/24.png
  86. BIN
      agriculture_management_odoo/static/description/assets/screenshots/25.png
  87. BIN
      agriculture_management_odoo/static/description/assets/screenshots/26.png
  88. BIN
      agriculture_management_odoo/static/description/assets/screenshots/27.png
  89. BIN
      agriculture_management_odoo/static/description/assets/screenshots/3.png
  90. BIN
      agriculture_management_odoo/static/description/assets/screenshots/4.png
  91. BIN
      agriculture_management_odoo/static/description/assets/screenshots/5.png
  92. BIN
      agriculture_management_odoo/static/description/assets/screenshots/6.png
  93. BIN
      agriculture_management_odoo/static/description/assets/screenshots/7.png
  94. BIN
      agriculture_management_odoo/static/description/assets/screenshots/8.png
  95. BIN
      agriculture_management_odoo/static/description/assets/screenshots/9.png
  96. BIN
      agriculture_management_odoo/static/description/assets/screenshots/agr_conf_3.png
  97. BIN
      agriculture_management_odoo/static/description/assets/screenshots/agr_crop_4.png
  98. BIN
      agriculture_management_odoo/static/description/assets/screenshots/agr_manager_1.png
  99. BIN
      agriculture_management_odoo/static/description/assets/screenshots/agr_user_2.png
  100. BIN
      agriculture_management_odoo/static/description/assets/screenshots/agr_vehicle_repor_6.png

18
agriculture_management_odoo/README.rst

@ -1,6 +1,11 @@
.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3)
Agriculture Management Agriculture Management
====================== ======================
App for managing the Agriculture cultivation In the Agriculture Management App, We can manage the agriculture to our own need.
We can also manage the rentals of vehicle and animals for agriculture purpose.
Configuration Configuration
============= =============
@ -10,9 +15,16 @@ Company
------- -------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ * `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Credits Credits
------- -------
* Developer: VYSHNAV AR @cybrosys * Developers: (V15) Vyshnav AR,
* Contact : odoo@cybrosys.com
Contacts Contacts
-------- --------
@ -35,5 +47,3 @@ For support and more information, please visit `Our Website <https://cybrosys.co
Further information Further information
=================== ===================
HTML Description: `<static/description/index.html>`__ HTML Description: `<static/description/index.html>`__

5
agriculture_management_odoo/__init__.py

@ -3,8 +3,8 @@
# #
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Vyshnav AR(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. # GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -21,4 +21,3 @@
############################################################################# #############################################################################
from . import models from . import models
from . import wizard from . import wizard

74
agriculture_management_odoo/__manifest__.py

@ -3,8 +3,8 @@
# #
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Vyshnav AR(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. # GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -20,51 +20,51 @@
# #
############################################################################# #############################################################################
{ {
'name': 'Agriculture Management In Odoo', 'name': 'Agriculture Management',
'version': '15.0.2.0.0', 'version': '15.0.2.0.0',
'summary': 'Agriculture Management In Odoo', 'category': 'Industries',
'description': """Agriculture Management In Odoo""", 'summary': """Agriculture And Farming Management In Odoo""",
'category': 'Productivity', 'description': """ Agriculture And Farming Management In Odoo""",
'website': 'https://www.cybrosys.com',
'author': 'Cybrosys Techno Solutions', 'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions', 'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions', 'maintainer': 'Cybrosys Techno Solutions',
'license': 'LGPL-3', 'website': 'https://www.cybrosys.com',
'depends': [ 'depends': ['base', 'fleet', 'account'],
'base',
'fleet',
],
'data': [ 'data': [
'security/user_groups.xml', 'security/agriculture_management_groups.xml',
'security/crop_request_security.xml',
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'data/data_sequence.xml', 'data/ir_sequence_data.xml',
'report/crop_report.xml', 'report/crop_request_reports.xml',
'report/pest_report.xml', 'report/pest_request_reports.xml',
'report/crop_report_template.xml', 'report/crop_request_templates.xml',
'report/pest_report_template.xml', 'report/pest_request_templates.xml',
'report/crop_vehicle_report.xml', 'report/crop_vehicle_templates.xml',
'report/crop_animal_report.xml', 'report/crop_animal_templates.xml',
'report/crop_animal.xml', 'report/crop_animal_reports.xml',
'wizard/crop_report_wiz.xml', 'wizard/crop_report_views.xml',
'wizard/pest_report_wiz.xml', 'wizard/pest_report_views.xml',
'views/menu_action.xml', 'wizard/animal_register_payment_views.xml',
'views/menu_items.xml', 'wizard/vehicle_register_payment_views.xml',
'views/seed_details_view.xml', 'views/seed_detail_views.xml',
'views/animal_details_views.xml', 'views/animal_detail_views.xml',
'views/location_details_view.xml', 'views/location_detail_views.xml',
'views/vehicle_details_view.xml', 'views/vehicle_detail_views.xml',
'views/fleet_inherit_view.xml', 'views/fleet_vehicle_views.xml',
'views/farmer_details_view.xml', 'views/farmer_detail_views.xml',
'views/pest_request.xml', 'views/pest_request_views.xml',
'views/pest_details.xml', 'views/pest_detail_views.xml',
'views/damage_loss.xml', 'views/damage_loss_views.xml',
'views/crop_request.xml', 'views/crop_request_views.xml',
'views/tag_details.xml', 'views/agriculture_tag_views.xml',
'views/vehicle_rental_views.xml', 'views/vehicle_rental_views.xml',
'views/animal_rental_views.xml', 'views/animal_rental_views.xml',
'report/crop_vehicle_reports.xml',
'views/agriculture_management_menus.xml',
], ],
'images': ['static/description/banner.png'], 'images': ['static/description/banner.png'],
'license': 'LGPL-3',
'installable': True, 'installable': True,
'application': True,
'auto_install': False, 'auto_install': False,
'application': True,
} }

18
agriculture_management_odoo/data/data_sequence.xml

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<data>
<record id="seq_pesticide" model="ir.sequence">
<field name="name">Pest Request</field>
<field name="code">pest.request</field>
<field name="prefix">PEST/REQ/</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
<record id="seq_crop" model="ir.sequence">
<field name="name">Crop Request</field>
<field name="code">crop.requests</field>
<field name="prefix">CROP/REQ/</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
</data>

35
agriculture_management_odoo/data/ir_sequence_data.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" ?>
<data noupdate="1">
<!-- Record for creating sequence in pest request model-->
<record id="seq_pesticide" model="ir.sequence">
<field name="name">Pest Request</field>
<field name="code">pest.request</field>
<field name="prefix">PEST/REQ/</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
<!-- Record for creating sequence in crop request model-->
<record id="seq_crop" model="ir.sequence">
<field name="name">Crop Request</field>
<field name="code">crop.request</field>
<field name="prefix">CROP/REQ/</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
<!-- Record for creating sequence in animal rental model-->
<record id="seq_animal_rental" model="ir.sequence">
<field name="name">Animal Rental</field>
<field name="code">animal.rental</field>
<field name="prefix">ANIMAL/RENTAL/</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
<!-- Record for creating sequence in vehicle rental model-->
<record id="seq_vehicle_rental" model="ir.sequence">
<field name="name">Vehicle Rental</field>
<field name="code">vehicle.rental</field>
<field name="prefix">VEHICLE/RENTAL/</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
</data>

8
agriculture_management_odoo/doc/RELEASE_NOTES.md

@ -3,10 +3,8 @@
#### 10.11.2022 #### 10.11.2022
#### Version 15.0.1.0.0 #### Version 15.0.1.0.0
#### ADD #### ADD
- Initial commit for agriculture_management_odoo - Initial commit for Agriculture Management
#### 08.01.2024
#### 10.11.2022
#### Version 15.0.2.0.0 #### Version 15.0.2.0.0
#### UPDT #### UPDT
- Updated - Added the feature of payment for rentals of vehicle and animals, and added the feature of payment with invoice for buying pesticides.

28
agriculture_management_odoo/models/__init__.py

@ -3,8 +3,8 @@
# #
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Vyshnav AR(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. # GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -19,16 +19,18 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from . import crop_requests from . import animal_detail
from . import seed_details from . import animal_rental
from . import animal_details from . import agriculture_tag
from . import location_details from . import crop_animal
from . import vehicle_details from . import crop_machinery
from . import fleet_inherit from . import crop_request
from . import farmer_details
from . import pest_details
from . import pest_request
from . import damage_loss from . import damage_loss
from . import tag_details from . import farmer_detail
from . import fleet_vehicle
from . import location_detail
from . import pest_detail
from . import pest_request
from . import seed_detail
from . import vehicle_detail
from . import vehicle_rental from . import vehicle_rental
from . import animal_rental

52
agriculture_management_odoo/models/agriculture_tag.py

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
from random import randint
class AgricultureTag(models.Model):
""" This model represents tags related to agriculture. Tags are used to
categorize and label various agricultural elements, products.
They facilitate the organization and grouping of agricultural information
for easier searching and classification. """
_name = "agriculture.tag"
_description = "Agriculture Tags"
def _get_default_color(self):
""" The function selects colors for tags, likely based on some
criteria or input, facilitating visual differentiation and
categorization."""
return randint(1, 11)
name = fields.Char(string='Tag Name', required=True, translate=True,
help='Tags are helpful for easy identification. Please '
'create appropriate tags.')
color = fields.Integer(string='Color', default=_get_default_color,
help='Color are helpful for Highlight tags . Please'
'choose different colors for differed tags')
_sql_constraints = [
# Partial constraint, complemented by unique tag and name.
# useful to keep because it provides a proper error message when a
# violation occurs
('name_uniq', 'unique (name)', "Tag name already exists !"),
]

60
agriculture_management_odoo/models/animal_detail.py

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class AnimalDetail(models.Model):
"""This model represents comprehensive details about animals involved
in agricultural management. It provides a structured way to store
information related to various animal breeds and their attributes."""
_name = 'animal.detail'
_inherit = ['mail.thread', 'mail.activity.mixin']
_description = "Animal Details"
_rec_name = 'breed'
image = fields.Binary(help='Upload images of animals',
tracking=True)
breed = fields.Char(string='Breed', help='Mention the breed of animal',
required=True, tracking=True)
age = fields.Char(string='Age', help='Mention the age of animal',
required=True, tracking=True)
state = fields.Selection(
[('available', 'Available'), ('not_available', 'Not Available')],
default="available", help='The status whether this animal, whether it '
'is available or not',
string='Status', required=True, tracking=True)
note = fields.Text(string='Note', tracking=True,
help='If any notes or description about the animal',
placeholder='Note')
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='This field represents the company associated with '
'the current user or environment.',
default=lambda self: self.env.company)
def action_not_available(self):
"""Function for change state to not available"""
self.state = 'not_available'
def action_available(self):
"""Function for change state to available"""
self.state = 'available'

49
agriculture_management_odoo/models/animal_details.py

@ -1,49 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
'''Module for Creating Animal Records'''
from odoo import models, fields
class AnimalDetails(models.Model):
'''Details of Animals'''
_name = 'animal.details'
_inherit = ['mail.thread', 'mail.activity.mixin']
_description = "Animal Details"
_rec_name = 'breed'
image = fields.Binary(string='Image', tracking=True)
breed = fields.Char(string='Breed', required=True, tracking=True)
age = fields.Char(string='Age', required=True, tracking=True)
state = fields.Selection(
[('available', 'Available'), ('not_available', 'Not Available')],
default="available",
string='Status', required=True, tracking=True)
note = fields.Text(string='Note', tracking=True)
def action_not_available(self):
self.state = 'not_available'
def action_sold(self):
self.state = 'sold'
def action_available(self):
self.state = 'available'

125
agriculture_management_odoo/models/animal_rental.py

@ -3,8 +3,8 @@
# #
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Vyshnav AR(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. # GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -19,26 +19,123 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
'''Model for Renting the Animals''' from odoo import api, fields, models, _
from odoo import models, fields, api from odoo.exceptions import ValidationError
class AnimalRental(models.Model): class AnimalRental(models.Model):
""" This model represents details about animal rental in the context of
crop requests. It provides a structured way to manage information related to
the rental of animals for agricultural purposes. """
_name = 'animal.rental' _name = 'animal.rental'
_inherit = ['mail.thread', 'mail.activity.mixin'] _inherit = ['mail.thread', 'mail.activity.mixin']
_description = 'Animal Rental' _description = 'Animal Rental'
_rec_name = 'animal_id' _rec_name = 'animal_id'
animal_id = fields.Many2one('animal.details', string='Animal', name = fields.Char(string='Reference', readonly=True,
default=lambda self: _('New'), copy=False,
help='Field for the sequence of renting entries of '
'animals')
farmer_id = fields.Many2one('farmer.detail', string='Farmer',
help='Select the farmer who needs animal.',
required=True, tracking=True) required=True, tracking=True)
no_of_days = fields.Float(string='No of Days', tracking=True, animal_id = fields.Many2one('animal.detail', string='Animal',
compute='compute_days', store=True) help="Select the animal for renting",
start_date = fields.Date(string='Start Date', required=True, tracking=True) required=True, tracking=True)
end_date = fields.Date(string='End Date', required=True, tracking=True) no_of_days = fields.Float(string='No of Days', tracking=True, store=True,
note = fields.Text(string='Description', tracking=True) help="The number of days we want to rent that"
" animal.", compute='_compute_no_of_days')
start_date = fields.Date(string='Start Date', required=True, tracking=True,
help="Start date of rental period")
company_id = fields.Many2one('res.company', string='Company',
required=True, readonly=True,
default=lambda self: self.env.company,
help='This field represents the company '
'associated with the current user or '
'environment.')
currency_id = fields.Many2one(related='company_id.currency_id',
string='Currency', help='Currency of company')
amount = fields.Monetary(string='Amount', help="Rental amount per day",
required=True)
total_amount = fields.Monetary(string='Total Amount',
help="Total rental amount",
compute='_compute_total_amount',
currency_field='currency_id')
end_date = fields.Date(string='End Date', help="End date of rental period",
required=True, tracking=True)
note = fields.Text(string='Description', tracking=True,
help="Description for renting animal",
placeholder='Note')
state = fields.Selection(
[('draft', 'Draft'), ('confirm', 'Confirmed'), ('return', 'Returned'),
('paid', 'Paid'), ('cancel', 'Cancel')], string='Status',
default='draft', tracking=True, copy=False,
help="Status of renting the animal, Which is th status of the animal "
"rented?")
animal_paid_bool = fields.Boolean(string='Paid Bool', default=False,
copy=False)
@api.model
def create(self, values):
"""Function for creating new animal rental"""
if values.get('name', _('New')) == _('New'):
values['name'] = self.env['ir.sequence'].next_by_code(
'animal.rental') or _('New')
return super(AnimalRental, self).create(values)
@api.constrains('start_date', 'end_date')
def _check_dates(self):
for record in self:
if record.start_date and record.end_date:
if record.end_date < record.start_date:
raise ValidationError(
"End date cannot be before start date!")
@api.depends('no_of_days', 'amount')
def _compute_total_amount(self):
""" Function for compute total amount """
for record in self:
record.total_amount = record.no_of_days * record.amount
@api.depends('start_date', 'end_date') @api.depends('start_date', 'end_date')
def compute_days(self): def _compute_no_of_days(self):
if self.start_date and self.end_date: """Function for computing rental period based on start date and end
days = (self.end_date - self.start_date).days date"""
self.no_of_days = days for record in self:
if record.start_date and record.end_date:
record.no_of_days = (record.end_date - record.start_date).days
def action_draft(self):
""" Function for change state of animal rental to draft """
self.state = 'draft'
def action_confirm(self):
""" Function for change state of crop request to confirm """
self.state = 'confirm'
def action_return(self):
""" Function for change state of crop request to cancel """
self.state = 'return'
def action_cancel(self):
""" Function for change state of crop request to cancel """
self.state = 'cancel'
def action_register_payment(self):
"""Method for viewing the wizard for register payment"""
view_id = self.env.ref(
'agriculture_management_odoo.animal_register_payment_wizard_view_form').id
return {
'name': 'Register Payment',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'animal.register.payment.wizard',
'views': [(view_id, 'form')],
'context': {
'default_farmer_id': self.farmer_id.id,
'default_rental_duration': self.no_of_days,
'default_amount': self.total_amount,
'default_ref': self.name
},
'target': 'new',
}

45
agriculture_management_odoo/models/crop_animal.py

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class CropAnimal(models.Model):
""" This model serves as a bridge to attach animal details to crop
request records. It provides a structured way to associate animal-related
information with specific crop requests."""
_name = 'crop.animal'
_description = 'Crop Animal Details'
crop_request_id = fields.Many2one('crop.request', string='Crop',
help='Select the crop id for this animal to be '
'used')
animal_id = fields.Many2one('animal.detail', string='Animal',
help="select animal used for this farming",
domain=[('state', '=', 'available')],
tracking=True)
qty = fields.Integer(string='Quantity',
help=" Number of animals used for farming")
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='This field represents the company associated with '
'the current user or environment.',
default=lambda self: self.env.company)

44
agriculture_management_odoo/models/crop_machinery.py

@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class CropMachinery(models.Model):
""" This model serves as a bridge to attach machinery details to crop
request records. It provides a structured way to associate machinery-related
information with specific crop requests."""
_name = 'crop.machinery'
_description = 'Crop Machinery Details'
crop_request_id = fields.Many2one('crop.request', string='Crop id',
help="The crop id should be used to identify the "
"machinery is used which crop farming")
vehicle_id = fields.Many2one('vehicle.detail',
help="The vehicle that used for farming",
tracking=True, string='Vehicle', )
qty = fields.Integer(string='Quantity',
help="The Number of the vehicle that used for farming")
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='This field represents the company associated with'
' the current user or environment.',
default=lambda self: self.env.company)

134
agriculture_management_odoo/models/crop_request.py

@ -0,0 +1,134 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models, _
class CropRequest(models.Model):
""" This model represents the creation of crop requests. It provides a
structured way to initiate and manage requests for crop cultivation tasks,
including associating animals, machinery, and other relevant details."""
_name = 'crop.request'
_inherit = ["mail.thread", 'mail.activity.mixin']
_description = "Crop Request"
_rec_name = 'ref'
ref = fields.Char(string='Reference', help="Reference id of crop requests",
copy=False, readonly=True, tracking=True,
default=lambda self: _('New'))
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='The company associated with the current user or '
'environment.',
default=lambda self: self.env.company)
farmer_id = fields.Many2one('farmer.detail', string='Farmer',
help="Choose the farmer for the crop",
required=True, tracking=True)
seed_id = fields.Many2one('seed.detail', string='Crop',
help=" Select the seed details",
required=True, tracking=True)
location_id = fields.Many2one('location.detail',
string='Location', required=True,
help="Mention the Location details for "
"farming", tracking=True)
request_date = fields.Date(string='Request Date', tracking=True,
help="The Requested Date for crop",
default=fields.Date.context_today, required=True)
state = fields.Selection(
[('draft', 'Draft'), ('confirm', 'Confirmed'),
('ploughing', 'Ploughing'), ('sowing', 'Sowing'),
('manuring', 'Manuring'), ('irrigation', 'Irrigation'),
('weeding', 'Weeding'), ('harvest', 'Harvest'), ('storage', 'Storage'),
('cancel', 'Cancel')], group_expand='_group_expand_states',
string='Status', default='draft', tracking=True,
help="Mention the Status of crop, which stage now the crop is reached")
note = fields.Text(string='Note', tracking=True,
help="Description about crop and farming need to "
"remember", placeholder='Note')
machinery_ids = fields.One2many('crop.machinery',
'crop_request_id', string='Machinery',
tracking=True, help="The machinery required"
"for this farming")
animal_ids = fields.One2many('crop.animal',
'crop_request_id', string='Animals',
tracking=True,
help="Animals used for this crop farming")
tag_ids = fields.Many2many('agriculture.tag', string='Tags',
tracking=True, help="Create appropriate"
" tags for the crop ")
user_id = fields.Many2one('res.users',
string='Responsible User',
help="Mention the user of the documents",
default=lambda self: self.env.user)
@api.model
def create(self, values):
"""Function for creating new crop requests"""
if values.get('ref', _('New')) == _('New'):
values['ref'] = self.env['ir.sequence'].next_by_code(
'crop.request') or _('New')
return super(CropRequest, self).create(values)
def action_draft(self):
""" Function for change state of crop request to draft """
self.state = 'draft'
def action_confirm(self):
""" Function for change state of crop request to confirm """
self.state = 'confirm'
def action_ploughing(self):
""" Function for change state of crop request to ploughing """
self.state = 'ploughing'
def action_sowing(self):
""" Function for change state of crop request to sowing """
self.state = 'sowing'
def action_manuring(self):
""" Function for change state of crop request to manuring """
self.state = 'manuring'
def action_irrigation(self):
""" Function for change state of crop request to irrigation """
self.state = 'irrigation'
def action_weeding(self):
""" Function for change state of crop request to weeding """
self.state = 'weeding'
def action_harvest(self):
""" Function for change state of crop request to harvest """
self.state = 'harvest'
def action_cancel(self):
""" Function for change state of crop request to cancel """
self.state = 'cancel'
def action_storage(self):
""" Function for change state of crop request to storage """
self.state = 'storage'
def _group_expand_states(self, states, domain, order):
"""This function takes a list of states and expands them based on the
given domain and order."""
return [key for
key, val in type(self).state.selection]

123
agriculture_management_odoo/models/crop_requests.py

@ -1,123 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
'''Model For Creating Crop Requests'''
from odoo import models, fields, api, _
class CropRequests(models.Model):
'''Details to create Crop Requests'''
_name = 'crop.requests'
_inherit = ["mail.thread", 'mail.activity.mixin']
_description = "Agriculture Management"
_rec_name = 'ref'
ref = fields.Char(string='Reference', required=True, copy=False,
readonly=True, tracking=True,
default=lambda self: _('New'))
farmer_id = fields.Many2one('farmer.details', string='Farmer',
required=True, tracking=True)
seed_id = fields.Many2one('seed.details', string='Crop', required=True,
tracking=True)
location_id = fields.Many2one('location.details', string='Location',
required=True, tracking=True)
request_date = fields.Date(string='Request Date',
default=fields.Date.context_today, required=True,
tracking=True)
state = fields.Selection(
[('draft', 'Draft'), ('confirm', 'Confirmed'),
('ploughing', 'Ploughing'), ('sowing', 'Sowing'),
('manuring', 'Manuring'), ('irrigation', 'Irrigation'),
('weeding', 'Weeding'), ('harvest', 'Harvest'), ('storage', 'Storage'),
('cancel', 'Cancel')],
string='Status', default='draft', tracking=True,
group_expand='_group_expand_states')
note = fields.Text(string='Note', tracking=True)
machinery_ids = fields.One2many('crop.machinery', 'des', string='Machinery',
tracking=True)
animal_ids = fields.One2many('crop.animals', 'dec', string='Animals',
tracking=True)
tags_id = fields.Many2many('agr.tag', string='Tags', tracking=True)
user_id = fields.Many2one('res.users', string='Responsible User',
default=lambda self: self.env.user)
@api.model
def create(self, values):
if values.get('ref', _('New')) == _('New'):
values['ref'] = self.env['ir.sequence'].next_by_code(
'crop.requests') or _('New')
res = super(CropRequests, self).create(values)
return res
def action_draft(self):
self.state = 'draft'
def action_confirm(self):
self.state = 'confirm'
def action_ploughing(self):
self.state = 'ploughing'
def action_sowing(self):
self.state = 'sowing'
def action_manuring(self):
self.state = 'manuring'
def action_irrigation(self):
self.state = 'irrigation'
def action_weeding(self):
self.state = 'weeding'
def action_harvest(self):
self.state = 'harvest'
def action_cancel(self):
self.state = 'cancel'
def action_storage(self):
self.state = 'storage'
def _group_expand_states(self, states, domain, order):
return [key for
key, val in type(self).state.selection]
class CropMachinery(models.Model):
'''Model For Attaching Vehicles'''
_name = 'crop.machinery'
des = fields.Many2one('crop.requests')
vehicle_id = fields.Many2one('vehicle.details', string='Vehicle',
tracking=True)
qty = fields.Integer(string='Quantity')
class CropAnimals(models.Model):
'''Model For Attaching Animals'''
_name = 'crop.animals'
dec = fields.Many2one('crop.requests')
animal_id = fields.Many2one('animal.details', string='Animal',
domain=[('state', '=', 'available')],
tracking=True)
qty = fields.Integer(string='Quantity')

49
agriculture_management_odoo/models/damage_loss.py

@ -3,8 +3,8 @@
# #
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Vyshnav AR(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. # GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -19,25 +19,46 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from odoo import models, fields from odoo import fields, models
class DamageLossDetails(models.Model): class DamageLoss(models.Model):
"""This model represents details about damage and loss incidents.
It provides a structured way to record information related to damages and
losses incurred in the context of agricultural activities or other domains.
"""
_name = 'damage.loss' _name = 'damage.loss'
_description = 'Damage Loss Details'
_inherit = ["mail.thread", 'mail.activity.mixin'] _inherit = ["mail.thread", 'mail.activity.mixin']
name = fields.Char(string='Name', required=True, tracking=True) name = fields.Char(string='Name', help="Reason for damage or loss of crop ",
farmer_id = fields.Many2one('farmer.details', string='Farmer',
required=True, tracking=True) required=True, tracking=True)
crop_id = fields.Many2one('crop.requests', string='Crop', required=True, farmer_id = fields.Many2one('farmer.detail',
tracking=True) help=" Mention the corresponding Farmer",
location_id = fields.Many2one('location.details', string='Location', string='Farmer', required=True, tracking=True)
required=True, tracking=True) crop_id = fields.Many2one('crop.request',
damage_loss_type = fields.Selection( help="Mention the corresponding crop",
[('damage', 'Damage'), ('loss', 'Loss')], string='Damage/Loss Type', string='Crop', required=True, tracking=True)
location_id = fields.Many2one('location.detail', tracking=True,
string='Location', help="The location of the "
"damage or loss takes place",
required=True)
damage_loss_type = fields.Selection([('damage', 'Damage'),
('loss', 'Loss')],
string='Damage/Loss Type',
help="Mention the damage or lass type",
required=True, tracking=True) required=True, tracking=True)
damage_loss_date = fields.Date(string='Damage/Loss Date', damage_loss_date = fields.Date(string='Damage/Loss Date',
help="The date in which damage occurs",
default=fields.Date.context_today, default=fields.Date.context_today,
required=True, tracking=True) required=True, tracking=True)
note = fields.Text(string='Damage/Loss Description', tracking=True) note = fields.Text(string='Damage/Loss Description', tracking=True,
damage_loss_image = fields.Binary(string='Image', tracking=True) help="Describe the details of damage/loss",
placeholder='Note')
image = fields.Binary(tracking=True,
help="Upload some images of damage/loss")
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='The company associated with the current user or '
'environment.',
default=lambda self: self.env.company)

55
agriculture_management_odoo/models/farmer_detail.py

@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models
class FarmerDetail(models.Model):
"""This model represents comprehensive details about farmers within the
context of agriculture management. It provides a structured way to store
information related to individual farmers, including their personal and
contact details. """
_name = 'farmer.detail'
_inherit = ["mail.thread", 'mail.activity.mixin']
_description = 'Farmer'
_rec_name = 'farmer_id'
farmer_id = fields.Many2one('res.partner', string='Farmer',
help=' Select the corresponding farmer',
required=True, tracking=True)
farmer_image = fields.Binary(string='Image', copy=False,
help='Upload image of Farmer')
note = fields.Text(string='Notes', tracking=True,
help="Description regarding the farmer",
placeholder='Note')
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='The company associated with the current user or '
'environment.',
default=lambda self: self.env.company)
@api.onchange('farmer_id')
def _onchange_farmer_id(self):
"""Function for select image of farmer automatically when choosing
the farmer"""
for record in self:
if record.farmer_id:
record.farmer_image = record.farmer_id.image_1920

39
agriculture_management_odoo/models/farmer_details.py

@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields, api
class FarmerDetails(models.Model):
_name = 'farmer.details'
_inherit = ["mail.thread", 'mail.activity.mixin']
_description = 'Farmer Details'
_rec_name = 'farmer_name'
farmer_name = fields.Many2one('res.partner', string='Farmer', required=True,
tracking=True)
farmer_image = fields.Binary(string='Image', tracking=True)
note = fields.Text(string='Notes', tracking=True)
@api.onchange('farmer_name')
def onchange_farmer_name(self):
if self.farmer_name:
self.farmer_image = self.farmer_name.image_1920

14
agriculture_management_odoo/models/fleet_inherit.py → agriculture_management_odoo/models/fleet_vehicle.py

@ -3,8 +3,8 @@
# #
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Vyshnav AR(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. # GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -19,12 +19,16 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
'''Inheriting the Fleet Module To Get Vehicles'''
from odoo import fields, models from odoo import fields, models
class Fleet(models.Model): class FleetVehicle(models.Model):
""" This model inherits from the 'fleet.vehicle' model to extend and
utilize the existing functionality for managing vehicle details. It provides
a structured way to access and utilize vehicle information within a fleet
management context."""
_inherit = "fleet.vehicle" _inherit = "fleet.vehicle"
registration_date = fields.Date(string="Registration Date", registration_date = fields.Date(string="Registration Date",
default=fields.Date.today) default=fields.Date.today,
help="The Registration date of the vehicle")

60
agriculture_management_odoo/models/location_detail.py

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class LocationDetail(models.Model):
"""This model represents comprehensive details about locations within
the context of agriculture. It provides a structured way to store
information related to various geographic locations, such as farms, fields,
or storage areas. """
_name = 'location.detail'
_inherit = ['mail.thread', 'mail.activity.mixin']
_description = "Location Details"
_rec_name = 'location_name'
location_name = fields.Char(string='Location Name', required=True,
help='Give the name of Location where'
' farming done', tracking=True)
location_address = fields.Char(string='Location Address', required=True,
help='Give the full address of the location',
tracking=True)
location_area = fields.Float(string='Location Area', required=True,
help='The area of location', tracking=True)
location_area_unit = fields.Selection([('acres', 'Acres'),
('hectares', 'Hectares')],
string='Area Unit', tracking=True,
required=True,
help='Mention the units of area')
location_type = fields.Selection([('plot', 'Plot'),
('field', 'Field')], default="plot",
required=True, tracking=True,
help='Describe the type of farming area',
string='Location Type')
note = fields.Text(string='Note', tracking=True,
help='If any description for the location, mention here',
placeholder='Note')
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='The company associated with the current user or '
'environment.',
default=lambda self: self.env.company)

44
agriculture_management_odoo/models/location_details.py

@ -1,44 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields
class LocationDetails(models.Model):
_name = 'location.details'
_inherit = ['mail.thread', 'mail.activity.mixin']
_description = "Location Details"
_rec_name = 'location_name'
location_name = fields.Char(string='Location Name', required=True,
tracking=True)
location_address = fields.Char(string='Location Address', required=True,
tracking=True)
location_area = fields.Float(string='Location Area', required=True,
tracking=True)
location_area_unit = fields.Selection(
[('acres', 'Acres'), ('hectares', 'Hectares')], string='Area Unit',
required=True, tracking=True)
location_type = fields.Selection([('plot', 'Plot'), ('field', 'Field')],
default="plot",
string='Location Type', required=True,
tracking=True)
note = fields.Text(string='Note', tracking=True)

65
agriculture_management_odoo/models/pest_detail.py

@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models
class PestDetail(models.Model):
""" This model represents comprehensive details about pests within the
context of agriculture management. """
_name = 'pest.detail'
_inherit = ["mail.thread", 'mail.activity.mixin']
_description = 'Pest Details'
_rec_name = 'pest_name'
pest_name = fields.Char(string='Pesticide', tracking=True,
help="Mention the pesticide name", required=True)
pest_expiry_date = fields.Date(string='Expiry Date',
help=" Mention the pesticide expiry date",
required=True, tracking=True)
pest_description = fields.Text(string='Pest Description', tracking=True,
help="Brief description about the pesticide")
pest_image = fields.Binary(string='Image', tracking=True,
help="Upload the image of pesticide")
pest_cost = fields.Float(string='Cost', help="The cost of the pesticide",
required=True, tracking=True)
pest_quantity = fields.Integer(string='Quantity',
help="The quantity of pesticide purchased",
required=True, tracking=True)
total_cost = fields.Float(string='Total Cost', tracking=True,
help="The total cost of pesticide",
compute='_compute_total_cost', store=True)
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='The company associated with the current user or '
'environment.',
default=lambda self: self.env.company)
currency_id = fields.Many2one('res.currency',
help="Currency of company", string='Currency',
default=lambda
self: self.env.user.company_id.currency_id,
tracking=True)
@api.depends('pest_cost', 'pest_quantity')
def _compute_total_cost(self):
"""Function for calculate total cost of pesticide """
for record in self:
record.total_cost = record.pest_cost * record.pest_quantity

50
agriculture_management_odoo/models/pest_details.py

@ -1,50 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields, api
class PestDetails(models.Model):
_name = 'pest.details'
_inherit = ["mail.thread", 'mail.activity.mixin']
_description = 'Pest Details'
_rec_name = 'pest_name'
pest_name = fields.Char(string='Pesticide', required=True, tracking=True)
pest_expiry_date = fields.Date(string='Expiry Date', required=True,
tracking=True)
pest_description = fields.Text(string='Pest Description', tracking=True)
pest_image = fields.Binary(string='Image', tracking=True)
pest_cost = fields.Float(string='Cost', required=True, tracking=True)
pest_quantity = fields.Integer(string='Quantity', required=True,
tracking=True)
total_cost = fields.Float(string='Total Cost',
compute='_compute_total_cost', store=True,
tracking=True)
currency_id = fields.Many2one('res.currency', string='Currency',
default=lambda
self: self.env.user.company_id.currency_id,
tracking=True)
@api.depends('pest_cost', 'pest_quantity')
def _compute_total_cost(self):
for record in self:
record.total_cost = record.pest_cost * record.pest_quantity

103
agriculture_management_odoo/models/pest_request.py

@ -3,8 +3,8 @@
# #
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Vyshnav AR(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. # GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -19,67 +19,118 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from odoo import models, fields, api, _ from odoo import api, fields, models, _
class PestRequests(models.Model): class PestRequest(models.Model):
""" This model represents requests related to pest management within the
context of agriculture. It provides a structured way to initiate and manage
requests for pest control measures, treatments, and interventions."""
_name = 'pest.request' _name = 'pest.request'
_inherit = ["mail.thread", 'mail.activity.mixin'] _inherit = ["mail.thread", 'mail.activity.mixin']
_description = 'Pest Request' _description = 'Pest Request'
_rec_name = 'reference' _rec_name = 'reference'
reference = fields.Char(string='Reference', required=True, copy=False, reference = fields.Char(string='Reference', help='Mention the details of '
readonly=True, tracking=True, 'pesticide request',
copy=False, readonly=True, tracking=True,
default=lambda self: _('New')) default=lambda self: _('New'))
request_date = fields.Date(string='Request Date', request_date = fields.Date(string='Request Date', tracking=True,
default=fields.Date.context_today, required=True, help='The date the pesticide request was sent.',
default=fields.Date.context_today, required=True)
farmer_id = fields.Many2one('farmer.detail', string='Farmer',
help='Mention the corresponding farmer that '
'request send', required=True,
tracking=True) tracking=True)
farmer_id = fields.Many2one('res.partner', string='Farmer', required=True, crop_id = fields.Many2one('crop.request', string='Crop',
tracking=True) help='Mention the corresponding crop the '
crop_id = fields.Many2one('crop.requests', string='Crop', required=True, 'pesticide needed', required=True,
tracking=True)
location_id = fields.Many2one('location.details', string='Location',
tracking=True)
pest_id = fields.Many2one('pest.details', string='Pest', required=True,
tracking=True) tracking=True)
pest_id = fields.Many2one('pest.detail', string='Pest',
help='Mention the pesticide name Required ',
required=True, tracking=True)
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='The company associated with the current user or '
'environment.',
default=lambda self: self.env.company)
currency_id = fields.Many2one('res.currency', string='Currency', currency_id = fields.Many2one('res.currency', string='Currency',
help='Currency used by the company',
default=lambda default=lambda
self: self.env.user.company_id.currency_id) self: self.env.user.company_id.currency_id)
pest_quantity = fields.Integer(string='Pest Quantity', required=True, pest_quantity = fields.Integer(string='Pest Quantity', tracking=True,
tracking=True) help='The quantity of pesticide that is'
'required to be purchased',
required=True)
pest_cost = fields.Float(string='Pest Cost', required=True, pest_cost = fields.Float(string='Pest Cost', required=True,
help="The unit price of the pesticide",
tracking=True, related='pest_id.pest_cost') tracking=True, related='pest_id.pest_cost')
total_cost = fields.Float(string='Total Cost', total_cost = fields.Float(string='Total Cost', tracking=True, store=True,
compute='_compute_total_cost', store=True, help="The total cost of the pesticide that was "
tracking=True) "purchased.", compute='_compute_total_cost')
disease = fields.Text(string='Disease', tracking=True, required=True) disease = fields.Text(string='Disease', tracking=True, required=True,
note = fields.Text(string='Note', tracking=True) help="The corresponding disease of crop")
note = fields.Text(string='Note', tracking=True,
help="Please describe any additional details here if "
"there is a need to mention additional data.",
placeholder='Note')
state = fields.Selection( state = fields.Selection(
[('draft', 'Draft'), ('pending', 'Pending'), ('approve', 'Approved'), [('draft', 'Draft'), ('pending', 'Pending'), ('approve', 'Approved'),
('rejected', 'Rejected')], ('rejected', 'Rejected'), ('paid', 'Paid')], string='Status',
string='Status', default='draft', tracking=True) default='draft', tracking=True, copy=False,
help=" The status of pesticide request")
pest_paid_bool = fields.Boolean(string='Paid Bool', default=False,
copy=False)
def action_draft(self): def action_draft(self):
""" Function for change state of crop request to cancel """
self.state = 'draft' self.state = 'draft'
def action_pending(self): def action_pending(self):
""" Function for change state of pest request to pending """
self.state = 'pending' self.state = 'pending'
def action_approved(self): def action_approved(self):
""" Function for change state of pest request to approve """
self.state = 'approve' self.state = 'approve'
def action_create_invoice(self):
"""Method for creating invoice for the pesticides"""
create_invoice = self.env['account.move'].create({
'partner_id': self.farmer_id.id,
'move_type': 'out_invoice',
'invoice_line_ids': [(0, 0, {'name': self.pest_id.pest_name,
'price_unit': self.total_cost})]
})
create_invoice.action_post()
inv_post = {
'name': 'Customer Invoice',
'view_mode': 'form',
'view_type': 'form',
'view_id': self.env.ref('account.view_move_form').id,
'res_id': create_invoice.id,
'res_model': 'account.move',
'context': "{'move_type':'out_invoice'}",
'type': 'ir.actions.act_window',
}
self.pest_paid_bool = True
self.state = 'paid'
return inv_post
def action_rejected(self): def action_rejected(self):
""" Function for change state of pest request to rejected """
self.state = 'rejected' self.state = 'rejected'
@api.depends('pest_cost', 'pest_quantity') @api.depends('pest_cost', 'pest_quantity')
def _compute_total_cost(self): def _compute_total_cost(self):
"""Function for calculate total cost of pesticide"""
for record in self: for record in self:
record.total_cost = record.pest_cost * record.pest_quantity record.total_cost = record.pest_cost * record.pest_quantity
@api.model @api.model
def create(self, values): def create(self, values):
""" Function for create new pest request """
if values.get('reference', _('New')) == _('New'): if values.get('reference', _('New')) == _('New'):
values['reference'] = self.env['ir.sequence'].next_by_code( values['reference'] = self.env['ir.sequence'].next_by_code(
'pest.request') or _('New') 'pest.request') or _('New')
res = super(PestRequests, self).create(values) return super(PestRequest, self).create(values)
return res

57
agriculture_management_odoo/models/seed_detail.py

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class SeedDetail(models.Model):
"""This model represents comprehensive details about seeds within the
context of agriculture management. It provides a structured way to store
information related to various types of seeds used for planting and
cultivation."""
_name = 'seed.detail'
_inherit = ["mail.thread", 'mail.activity.mixin']
_description = "Seed"
name = fields.Char(string='Name', help='Mention the name of the breed of '
'crop used for farming',
required=True, tracking=True)
quantity = fields.Integer(string='Quantity', required=True, tracking=True,
help='Mention Quantity or seed purchased for '
'farming')
unit = fields.Selection([('kg', 'Kilograms'), ('gms', 'Grams')],
string='Unit', required=True, tracking=True,
help='Mention the quantity of seed purchased for '
'farming')
seed_type = fields.Selection(
[('registered', 'Registered'), ('breeder', 'Breeder'),
('foundation', 'Foundation'),
('certified', 'Certified')], string='Type', tracking=True,
help='Mention the status of seed purchased for farming', required=True)
note = fields.Text(string='Note', tracking=True,
help="Please describe any additional details here if "
"there is a need to mention additional data.",
placeholder='Note')
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='The company associated with the current user or '
'environment.',
default=lambda self: self.env.company)

39
agriculture_management_odoo/models/seed_details.py

@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields
class SeedDetails(models.Model):
_name = 'seed.details'
_inherit = ["mail.thread", 'mail.activity.mixin']
_description = "Seed Details"
name = fields.Char(string='Name', required=True, tracking=True)
quantity = fields.Integer(string='Quantity', required=True, tracking=True)
unit = fields.Selection([('kg', 'Kilograms'), ('gms', 'Grams')],
string='Unit', required=True, tracking=True)
seed_type = fields.Selection(
[('registered', 'Registered'), ('breeder', 'Breeder'),
('foundation', 'Foundation'),
('certified', 'Certified')], string='Type', required=True,
tracking=True)
note = fields.Text(string='Note', tracking=True)

39
agriculture_management_odoo/models/tag_details.py

@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from random import randint
from odoo import fields, models
class Tag(models.Model):
_name = "agr.tag"
_description = "Agriculture Tags"
def _get_default_color(self):
return randint(1, 11)
name = fields.Char('Tag Name', required=True, translate=True)
color = fields.Integer('Color', default=_get_default_color)
_sql_constraints = [
('name_uniq', 'unique (name)', "Tag name already exists !"),
]

78
agriculture_management_odoo/models/vehicle_detail.py

@ -0,0 +1,78 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vyshnav AR(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models
from datetime import datetime
class VehicleDetail(models.Model):
""" This model represents comprehensive details about vehicles within
the context of agriculture management. It provides a structured way to
store information related to various types of vehicles used for
transportation and agricultural operations."""
_name = 'vehicle.detail'
_inherit = ['mail.thread', 'mail.activity.mixin']
_description = "Vehicle Details"
name = fields.Char(string='Name', tracking=True,
help="Mention the name of vehicle chose", )
vehicle_main_id = fields.Many2one('fleet.vehicle',
help="Select the vehicle that used for "
"farming", string='Vehicle',
required=True,
tracking=True, domain=(
[('state_id', '=', 'Registered')]))
vehicle_type = fields.Selection(
[('tractor', 'Tractor'), ('harvester', 'Harvester'),
('pickup', 'Pickup'), ('other', 'Other')],
string='Vehicle Type', required=True,
help=' Mention the status of vehicle ', tracking=True)
vehicle_model = fields.Char(string='Model Year', store=True,
help='Mention the model of selected model',
compute='_compute_vehicle_model', tracking=True)
note = fields.Text(string='Note', tracking=True,
help="Please describe any additional details here if "
"there is a need to mention additional data.",
placeholder='Note')
company_id = fields.Many2one(
'res.company', string='Company', required=True,
readonly=True, help='The company associated with the current user or '
'environment.',
default=lambda self: self.env.company)
@api.onchange("vehicle_main_id")
def _onchange_vehicle_main_id(self):
"""Function for auto update the name of vehicle based on model and
brand"""
self.name = str(
self.vehicle_main_id.model_id.brand_id.name or " ") + "/" + str(
self.vehicle_main_id.model_id.name or " ") + "/" + str(
self.vehicle_main_id.license_plate or " ")
@api.depends('vehicle_main_id')
def _compute_vehicle_model(self):
""" Function for selecting model of vehicle based on vehicle id"""
for ref in self:
ref.vehicle_model = False
if ref.vehicle_main_id.registration_date:
date = datetime.strptime(
str(ref.vehicle_main_id.registration_date), '%Y-%m-%d')
ref.vehicle_model = str(date.year)

58
agriculture_management_odoo/models/vehicle_details.py

@ -1,58 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from datetime import datetime
from odoo import models, fields, api
class VehicleDetails(models.Model):
_name = 'vehicle.details'
_inherit = ['mail.thread', 'mail.activity.mixin']
_description = "Vehicle Details"
name = fields.Char(string='Name', tracking=True, )
vehicle_main_id = fields.Many2one('fleet.vehicle', string='Vehicle',
required=True, tracking=True,
domain=(
[('state_id', '=', 'Registered')]))
vehicle_type = fields.Selection(
[('tractor', 'Tractor'), ('harvester', 'Harvester'),
('pickup', 'Pickup'), ('other', 'Other')],
string='Vehicle Type', required=True, tracking=True)
vehicle_model = fields.Char(string='Model Year', compute='compute_model',
store=True, tracking=True)
note = fields.Text(string='Note', tracking=True)
@api.onchange("vehicle_main_id")
def onchange_vehicle(self):
self.name = str(
self.vehicle_main_id.model_id.brand_id.name or " ") + "/" + str(
self.vehicle_main_id.model_id.name or " ") + "/" + str(
self.vehicle_main_id.license_plate or " ")
@api.depends('vehicle_main_id')
def compute_model(self):
for ref in self:
ref.vehicle_model = False
if ref.vehicle_main_id.registration_date:
date = datetime.strptime(
str(ref.vehicle_main_id.registration_date), '%Y-%m-%d')
ref.vehicle_model = str(date.year)

125
agriculture_management_odoo/models/vehicle_rental.py

@ -3,8 +3,8 @@
# #
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Vyshnav AR(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. # GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -19,25 +19,124 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from odoo import models, fields, api from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class VehicleRental(models.Model): class VehicleRental(models.Model):
"""This model represents details about vehicle rentals within the
context of agriculture management. It provides a structured way to manage
information related to renting vehicles for agricultural tasks."""
_name = 'vehicle.rental' _name = 'vehicle.rental'
_inherit = ['mail.thread', 'mail.activity.mixin'] _inherit = ['mail.thread', 'mail.activity.mixin']
_description = 'Vehicle Rental' _description = 'Vehicle Rental'
_rec_name = 'vehicle_id' _rec_name = 'vehicle_id'
vehicle_id = fields.Many2one('vehicle.details', string='Vehicle', name = fields.Char(string='Reference', readonly=True,
default=lambda self: _('New'), copy=False,
help='Field for the sequence of renting entries of '
'vehicles.')
farmer_id = fields.Many2one('farmer.detail', string='Farmer',
help='Select the farmer who needs vehicle.',
required=True, tracking=True) required=True, tracking=True)
no_of_days = fields.Float(string='No of Days', tracking=True, vehicle_id = fields.Many2one('vehicle.detail',
compute='compute_days', store=True) help="Select the vehicle that used for farming",
start_date = fields.Date(string='Start Date', required=True, tracking=True) string='Vehicle', required=True, tracking=True)
end_date = fields.Date(string='End Date', required=True, tracking=True) no_of_days = fields.Float(string='No of Days',
note = fields.Text(string='Description', tracking=True) compute='_compute_no_of_days',
help="The number of days we want to rent that "
"vehicle.", tracking=True, store=True)
start_date = fields.Date(string='Start Date', tracking=True,
help=" Start date of rental period", required=True)
end_date = fields.Date(string='End Date', help="End date of rental period",
required=True, tracking=True)
company_id = fields.Many2one('res.company', string='Company',
required=True, readonly=True,
help='The company associated with the current '
'user or environment.',
default=lambda self: self.env.company)
currency_id = fields.Many2one(related='company_id.currency_id',
string='Currency', help='Currency of company')
amount = fields.Monetary(string='Amount', help="Rental amount per day",
required=True)
total_amount = fields.Monetary(string='Total Amount',
help="Total rental amount",
compute='_compute_total_amount',
currency_field='currency_id')
note = fields.Text(string='Description', tracking=True,
help="Please describe any additional details here if "
"there is a need to mention additional data.",
placeholder='Note')
state = fields.Selection(
[('draft', 'Draft'), ('confirm', 'Confirmed'), ('return', 'Returned'),
('paid', 'Paid'), ('cancel', 'Cancel')], string='Status',
default='draft', tracking=True, copy=False,
help="Status of renting the vehicle, Which is th status of the vehicle "
"rented?")
vehicle_paid_bool = fields.Boolean(string='Paid Bool', default=False,
copy=False)
@api.model
def create(self, values):
"""Function for creating new animal rental"""
if values.get('name', _('New')) == _('New'):
values['name'] = self.env['ir.sequence'].next_by_code(
'vehicle.rental') or _('New')
return super(VehicleRental, self).create(values)
@api.constrains('start_date', 'end_date')
def _check_dates(self):
for record in self:
if record.start_date and record.end_date:
if record.end_date < record.start_date:
raise ValidationError(
"End date cannot be before start date!")
@api.depends('no_of_days', 'amount')
def _compute_total_amount(self):
""" Function for compute total amount """
for record in self:
record.total_amount = record.no_of_days * record.amount
@api.depends('start_date', 'end_date') @api.depends('start_date', 'end_date')
def compute_days(self): def _compute_no_of_days(self):
if self.start_date and self.end_date: """Function for calculating the rental period based start date and
days = (self.end_date - self.start_date).days end date"""
self.no_of_days = days for record in self:
if record.start_date and record.end_date:
record.no_of_days = (record.end_date - record.start_date).days
def action_draft(self):
""" Function for change state of animal rental to draft """
self.state = 'draft'
def action_confirm(self):
""" Function for change state of crop request to confirm """
self.state = 'confirm'
def action_return(self):
""" Function for change state of crop request to cancel """
self.state = 'return'
def action_cancel(self):
""" Function for change state of crop request to cancel """
self.state = 'cancel'
def action_register_payment(self):
"""Method for viewing the wizard for register payment"""
view_id = self.env.ref(
'agriculture_management_odoo.vehicle_register_payment_wizard_view_form').id
return {
'name': 'Register Payment',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'vehicle.register.payment.wizard',
'views': [(view_id, 'form')],
'context': {
'default_farmer_id': self.farmer_id.id,
'default_rental_duration': self.no_of_days,
'default_amount': self.total_amount,
'default_ref': self.name
},
'target': 'new',
}

5
agriculture_management_odoo/report/crop_animal.xml → agriculture_management_odoo/report/crop_animal_reports.xml

@ -1,12 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<odoo> <odoo>
<!-- The record of animals report action -->
<record id="report_animal_crop" model="ir.actions.report"> <record id="report_animal_crop" model="ir.actions.report">
<field name="name">Animal Crop Report</field> <field name="name">Animal Crop Report</field>
<field name="model">crop.requests</field> <field name="model">crop.request</field>
<field name="report_type">qweb-pdf</field> <field name="report_type">qweb-pdf</field>
<field name="report_name">agriculture_management_odoo.animal_crop</field> <field name="report_name">agriculture_management_odoo.animal_crop</field>
<field name="report_file">agriculture_management_odoo.animal_crop</field> <field name="report_file">agriculture_management_odoo.animal_crop</field>
<field name="binding_model_id" ref="model_crop_requests"/> <field name="binding_model_id" ref="model_crop_request"/>
<field name="binding_type">report</field> <field name="binding_type">report</field>
</record> </record>
</odoo> </odoo>

18
agriculture_management_odoo/report/crop_animal_report.xml → agriculture_management_odoo/report/crop_animal_templates.xml

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<odoo> <odoo>
<!-- PDF Report Template for rented animal for farming report-->
<template id="animal_crop"> <template id="animal_crop">
<t t-call="web.html_container"> <t t-call="web.html_container">
<t t-foreach="docs" t-as="doc"> <t t-foreach="docs" t-as="doc">
@ -7,23 +8,28 @@
<div class="page"> <div class="page">
<center> <center>
<h1>Crop Animal Report</h1> <h1>Crop Animal Report</h1>
</center><br></br> </center>
<div t-if="doc.ref" style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem"> <br/>
<div t-if="doc.ref"
style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem">
<p>Reference : <p>Reference :
<t t-esc="doc.ref"/> <t t-esc="doc.ref"/>
</p> </p>
</div> </div>
<div t-if="doc.farmer_id.farmer_name.name" style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem"> <div t-if="doc.farmer_id.farmer_id.name"
style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem">
<p>Farmer : <p>Farmer :
<t t-esc="doc.farmer_id.farmer_name.name"/> <t t-esc="doc.farmer_id.farmer_id.name"/>
</p> </p>
</div> </div>
<div t-if="doc.seed_id.name" style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem"> <div t-if="doc.seed_id.name"
style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem">
<p>Crop : <p>Crop :
<t t-esc="doc.seed_id.name"/> <t t-esc="doc.seed_id.name"/>
</p> </p>
</div> </div>
<div t-if="doc.location_id.location_name" style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem"> <div t-if="doc.location_id.location_name"
style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem">
<p>Location : <p>Location :
<t t-esc="doc.location_id.location_name"/> <t t-esc="doc.location_id.location_name"/>
</p> </p>

6
agriculture_management_odoo/report/crop_report.xml → agriculture_management_odoo/report/crop_request_reports.xml

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<odoo> <odoo>
<!-- Action for report of crop request -->
<record id="action_crop_request_report" model="ir.actions.report"> <record id="action_crop_request_report" model="ir.actions.report">
<field name="name">Crop Report</field> <field name="name">Crop Report</field>
<field name="model">crop.report.wizard</field> <field name="model">crop.report</field>
<field name="report_type">qweb-pdf</field> <field name="report_type">qweb-pdf</field>
<field name="report_name">agriculture_management_odoo.report_crop_details</field> <field name="report_name">agriculture_management_odoo.report_crop_details</field>
<field name="report_file">agriculture_management_odoo.report_crop_details</field> <field name="report_file">agriculture_management_odoo.report_crop_details</field>
<field name="binding_model_id" ref="model_crop_report_wizard"/> <field name="binding_model_id" ref="model_crop_report"/>
<field name="binding_type">report</field> <field name="binding_type">report</field>
</record> </record>
</odoo> </odoo>

4
agriculture_management_odoo/report/crop_report_template.xml → agriculture_management_odoo/report/crop_request_templates.xml

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<odoo> <odoo>
<!-- PDF Report Template of crop details -->
<template id="report_crop_details"> <template id="report_crop_details">
<t t-call="web.html_container"> <t t-call="web.html_container">
<t t-call="web.external_layout"> <t t-call="web.external_layout">
@ -16,7 +17,6 @@
<t t-if="form.get('date_from')"> <t t-if="form.get('date_from')">
<t t-esc="form['date_from']"/> <t t-esc="form['date_from']"/>
</t> </t>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -26,7 +26,6 @@
<t t-if="form.get('date_to')"> <t t-if="form.get('date_to')">
<t t-esc="form['date_to']"/> <t t-esc="form['date_to']"/>
</t> </t>
</td> </td>
</tr> </tr>
<table class="table table-condensed"> <table class="table table-condensed">
@ -79,7 +78,6 @@
<span t-att-style="style" <span t-att-style="style"
t-esc="val[4]"/> t-esc="val[4]"/>
</td> </td>
</tr> </tr>
</t> </t>
</tbody> </tbody>

13
agriculture_management_odoo/report/crop_vehicle_reports.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Report action for crop vehicle -->
<record id="report_vehicle_crop" model="ir.actions.report">
<field name="name">Vehicle Crop Report</field>
<field name="model">crop.request</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">agriculture_management_odoo.vehicle_crop</field>
<field name="report_file">agriculture_management_odoo.vehicle_crop</field>
<field name="binding_model_id" ref="model_crop_request"/>
<field name="binding_type">report</field>
</record>
</odoo>

22
agriculture_management_odoo/report/crop_vehicle_report.xml → agriculture_management_odoo/report/crop_vehicle_templates.xml

@ -1,26 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<odoo> <odoo>
<!-- Template for PDF Report of vehicles in crops farming -->
<template id="vehicle_crop"> <template id="vehicle_crop">
<t t-call="web.html_container"> <t t-call="web.html_container">
<t t-foreach="docs" t-as="doc"> <t t-foreach="docs" t-as="doc">
<t t-call="web.external_layout"> <t t-call="web.external_layout">
<div class="page"> <div class="page">
<center> <center>
<h1>Crop Vehicle Report</h1> <h1>Crop Vehicle Report</h1>
</center> </center>
<br/>
<br></br>
<div t-if="doc.ref" <div t-if="doc.ref"
style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem"> style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem">
<p>Reference : <p>Reference :
<t t-esc="doc.ref"/> <t t-esc="doc.ref"/>
</p> </p>
</div> </div>
<div t-if="doc.farmer_id.farmer_name.name" <div t-if="doc.farmer_id.farmer_id.name"
style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem"> style="font-family: 'Montserrat', sans-serif !important;font-weight: bold;font-size: 1.3rem">
<p>Farmer : <p>Farmer :
<t t-esc="doc.farmer_id.farmer_name.name"/> <t t-esc="doc.farmer_id.farmer_id.name"/>
</p> </p>
</div> </div>
<div t-if="doc.seed_id.name" <div t-if="doc.seed_id.name"
@ -35,9 +34,7 @@
<t t-esc="doc.location_id.location_name"/> <t t-esc="doc.location_id.location_name"/>
</p> </p>
</div> </div>
<br/>
<br>
</br>
<style> <style>
table, thead, th, td, tr, tbody { table, thead, th, td, tr, tbody {
border: 1px solid black; border: 1px solid black;
@ -71,13 +68,4 @@
</t> </t>
</t> </t>
</template> </template>
<record id="report_vehicle_crop" model="ir.actions.report">
<field name="name">Vehicle Crop Report</field>
<field name="model">crop.requests</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">agriculture_management_odoo.vehicle_crop</field>
<field name="report_file">agriculture_management_odoo.vehicle_crop</field>
<field name="binding_model_id" ref="model_crop_requests"/>
<field name="binding_type">report</field>
</record>
</odoo> </odoo>

12
agriculture_management_odoo/report/pest_report.xml → agriculture_management_odoo/report/pest_request_reports.xml

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<odoo> <odoo>
<record id="action_pest_request_report" model="ir.actions.report"> <!-- Record for actions of pesticide PDF report-->
<record id="pest_request_report_action" model="ir.actions.report">
<field name="name">pest Report</field> <field name="name">pest Report</field>
<field name="model">pest.report.wizard</field> <field name="model">pest.report</field>
<field name="report_type">qweb-pdf</field> <field name="report_type">qweb-pdf</field>
<field name="report_name">agriculture_management_odoo.report_pest_details</field> <field name="report_name">agriculture_management_odoo.report_pest_detail</field>
<field name="report_file">agriculture_management_odoo.report_pest_details</field> <field name="report_file">agriculture_management_odoo.report_pest_detail</field>
<field name="binding_model_id" ref="model_pest_report_wizard"/> <field name="binding_model_id" ref="model_pest_report"/>
<field name="binding_type">report</field> <field name="binding_type">report</field>
</record> </record>
</odoo> </odoo>

6
agriculture_management_odoo/report/pest_report_template.xml → agriculture_management_odoo/report/pest_request_templates.xml

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<odoo> <odoo>
<template id="report_pest_details"> <!-- PDF Report Template for pesticide purchased in farming -->
<template id="report_pest_detail">
<t t-call="web.html_container"> <t t-call="web.html_container">
<t t-call="web.external_layout"> <t t-call="web.external_layout">
<div class="page"> <div class="page">
@ -16,7 +17,6 @@
<t t-if="form.get('date_from')"> <t t-if="form.get('date_from')">
<t t-esc="form['date_from']"/> <t t-esc="form['date_from']"/>
</t> </t>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -26,7 +26,6 @@
<t t-if="form.get('date_to')"> <t t-if="form.get('date_to')">
<t t-esc="form['date_to']"/> <t t-esc="form['date_to']"/>
</t> </t>
</td> </td>
</tr> </tr>
<table class="table table-condensed"> <table class="table table-condensed">
@ -100,7 +99,6 @@
<span t-att-style="style" <span t-att-style="style"
t-esc="val[8]"/> t-esc="val[8]"/>
</td> </td>
</tr> </tr>
</t> </t>
</tbody> </tbody>

17
agriculture_management_odoo/security/agriculture_management_groups.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- User groups for Agriculture Management-->
<record id="module_agriculture_management_odoo" model="ir.module.category">
<field name="name">Agriculture Management</field>
<field name="description">Category for Agriculture</field>
</record>
<record id="group_agriculture_user" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="module_agriculture_management_odoo"/>
</record>
<record id="group_agriculture_admin" model="res.groups">
<field name="name">Manager</field>
<field name="category_id" ref="module_agriculture_management_odoo"/>
<field name="implied_ids" eval="[(4, ref('group_agriculture_user'))]"/>
</record>
</odoo>

85
agriculture_management_odoo/security/crop_request_security.xml

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Security rules for crop request -->
<record id="rule_own_doc" model="ir.rule">
<field name="name">View Own Docs</field>
<field ref="model_crop_request" name="model_id"/>
<field name="domain_force">['|',('user_id', '=', user.id),('create_uid',
'=', user.id)]
</field>
<field name="groups"
eval="[(4, ref('agriculture_management_odoo.group_agriculture_user'))]"/>
</record>
<record id="rule_all_doc" model="ir.rule">
<field name="name">View All Docs</field>
<field ref="model_crop_request" name="model_id"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups"
eval="[(4, ref('agriculture_management_odoo.group_agriculture_admin'))]"/>
</record>
<record id="crop_request_comp_rule" model="ir.rule">
<field name="name">Crop Request multi company rule</field>
<field name="model_id" ref="model_crop_request"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="animal_rental_comp_rule" model="ir.rule">
<field name="name">Animal Rental multi company rule</field>
<field name="model_id" ref="model_animal_rental"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="animal_details_comp_rule" model="ir.rule">
<field name="name">Animal Details multi company rule</field>
<field name="model_id" ref="model_animal_detail"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="crop_animal_comp_rule" model="ir.rule">
<field name="name">Crop Animal multi company rule</field>
<field name="model_id" ref="model_crop_animal"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="crop_machinery_comp_rule" model="ir.rule">
<field name="name">Crop Machinery multi company rule</field>
<field name="model_id" ref="model_crop_machinery"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="damage_loss_comp_rule" model="ir.rule">
<field name="name">Damage Loss multi company rule</field>
<field name="model_id" ref="model_damage_loss"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="farmer_detail_comp_rule" model="ir.rule">
<field name="name">Farmer Detail multi company rule</field>
<field name="model_id" ref="model_farmer_detail"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="location_detail_comp_rule" model="ir.rule">
<field name="name">Location Detail multi company rule</field>
<field name="model_id" ref="model_location_detail"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="pest_detail_comp_rule" model="ir.rule">
<field name="name">Pest Detail multi company rule</field>
<field name="model_id" ref="model_pest_detail"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="pest_request_comp_rule" model="ir.rule">
<field name="name">Pest Request multi company rule</field>
<field name="model_id" ref="model_pest_request"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="seed_detail_comp_rule" model="ir.rule">
<field name="name">Seed Detail multi company rule</field>
<field name="model_id" ref="model_seed_detail"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="vehicle_detail_comp_rule" model="ir.rule">
<field name="name">Vehicle Detail multi company rule</field>
<field name="model_id" ref="model_vehicle_detail"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="vehicle_rental_comp_rule" model="ir.rule">
<field name="name">Vehicle Rental multi company rule</field>
<field name="model_id" ref="model_vehicle_rental"/>
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
</odoo>

70
agriculture_management_odoo/security/ir.model.access.csv

@ -1,37 +1,35 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_crop_request_admin,access.crop.request,model_crop_request,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_crop_requests,access.crop.requests,model_crop_requests,base.group_user,1,1,1,1 access_crop_request_user,access.crop.request,model_crop_request,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_seed_detail_admin,access.seed.detail,model_seed_detail,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_seed_details,access.seed.details,model_seed_details,base.group_user,1,1,1,1 access_seed_detail_user,access.seed.detail,model_seed_detail,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_animal_detail_admin,access.animal.detail,model_animal_detail,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_animal_details,access.animal.details,model_animal_details,base.group_user,1,1,1,1 access_animal_detail_user,access.animal.detail,model_animal_detail,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_location_detail_admin,access.location.detail,model_location_detail,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_location_details,access.location.details,model_location_details,base.group_user,1,1,1,1 access_location_detail_user,access.location.detail,model_location_detail,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_vehicle_detail_admin,access.vehicle.detail,model_vehicle_detail,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_vehicle_details,access.vehicle.details,model_vehicle_details,base.group_user,1,1,1,1 access_vehicle_detail_user,access.vehicle.detail,model_vehicle_detail,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_farmer_detail_admin,access.farmer.detail,model_farmer_detail,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_farmer_details,access.farmer.details,model_farmer_details,base.group_user,1,1,1,1 access_farmer_detail_user,access.farmer.detail,model_farmer_detail,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_pest_request_admin,access.pest.request,model_pest_request,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_pest_request,access.pest.request,model_pest_request,base.group_user,1,1,1,1 access_pest_request_user,access.pest.request,model_pest_request,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_pest_detail_admin,access.pest.detail,model_pest_detail,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_pest_details,access.pest.details,model_pest_details,base.group_user,1,1,1,1 access_pest_detail_user,access.pest.detail,model_pest_detail,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_damage_loss_admin,access.damage.loss,model_damage_loss,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_damage_loss,access.damage.loss,model_damage_loss,base.group_user,1,1,1,1 access_damage_loss_user,access.damage.loss,model_damage_loss,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_crop_machinery_admin,access.crop.machinery,model_crop_machinery,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_crop_machinery,access.crop.machinery,model_crop_machinery,base.group_user,1,1,1,1 access_crop_machinery_user,access.crop.machinery,model_crop_machinery,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_crop_animal_admin,access.crop.animal,model_crop_animal,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_crop_animals,access.crop.animals,model_crop_animals,base.group_user,1,1,1,1 access_crop_animal_user,access.crop.animal,model_crop_animal,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_agriculture_tag_admin,access.agriculture.tag,model_agriculture_tag,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_agr_tag,access.agr.tag,model_agr_tag,base.group_user,1,1,1,1 access_agriculture_tag_user,access.agriculture.tag,model_agriculture_tag,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_vehicle_rental_admin,access.vehicle.rental,model_vehicle_rental,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_vehicle_rental,access.vehicle.rental,model_vehicle_rental,base.group_user,1,1,1,1 access_vehicle_rental_user,access.vehicle.rental,model_vehicle_rental,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_animal_rental_admin,access.animal.rental,model_animal_rental,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_animal_rental,access.animal.rental,model_animal_rental,base.group_user,1,1,1,1 access_animal_rental_user,access.animal.rental,model_animal_rental,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_crop_report_admin,access.crop.report,model_crop_report,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_crop_report_wizard,access.crop.report.wizard,model_crop_report_wizard,base.group_user,1,1,1,1 access_crop_report_user,access.crop.report,model_crop_report,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_pest_report_admin,access.pest.report,model_pest_report,agriculture_management_odoo.group_agriculture_admin,1,1,1,1
access_pest_report_wizard,access.pest.report.wizard,model_pest_report_wizard,base.group_user,1,1,1,1 access_pest_report_user,access.pest.report,model_pest_report,agriculture_management_odoo.group_agriculture_user,1,1,1,0
access_animal_register_payment_wizard,access.animal.register.payment.wizard,model_animal_register_payment_wizard,base.group_user,1,1,1,1
access_vehicle_register_payment_wizard,access.vehicle.register.payment.wizard,model_vehicle_register_payment_wizard,base.group_user,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_crop_requests access_crop_request_admin access.crop.requests access.crop.request model_crop_requests model_crop_request base.group_user agriculture_management_odoo.group_agriculture_admin 1 1 1 1
3 access_seed_details access_crop_request_user access.seed.details access.crop.request model_seed_details model_crop_request base.group_user agriculture_management_odoo.group_agriculture_user 1 1 1 1 0
4 access_animal_details access_seed_detail_admin access.animal.details access.seed.detail model_animal_details model_seed_detail base.group_user agriculture_management_odoo.group_agriculture_admin 1 1 1 1
5 access_location_details access_seed_detail_user access.location.details access.seed.detail model_location_details model_seed_detail base.group_user agriculture_management_odoo.group_agriculture_user 1 1 1 1 0
6 access_vehicle_details access_animal_detail_admin access.vehicle.details access.animal.detail model_vehicle_details model_animal_detail base.group_user agriculture_management_odoo.group_agriculture_admin 1 1 1 1
7 access_farmer_details access_animal_detail_user access.farmer.details access.animal.detail model_farmer_details model_animal_detail base.group_user agriculture_management_odoo.group_agriculture_user 1 1 1 1 0
8 access_pest_request access_location_detail_admin access.pest.request access.location.detail model_pest_request model_location_detail base.group_user agriculture_management_odoo.group_agriculture_admin 1 1 1 1
9 access_pest_details access_location_detail_user access.pest.details access.location.detail model_pest_details model_location_detail base.group_user agriculture_management_odoo.group_agriculture_user 1 1 1 1 0
10 access_damage_loss access_vehicle_detail_admin access.damage.loss access.vehicle.detail model_damage_loss model_vehicle_detail base.group_user agriculture_management_odoo.group_agriculture_admin 1 1 1 1
11 access_crop_machinery access_vehicle_detail_user access.crop.machinery access.vehicle.detail model_crop_machinery model_vehicle_detail base.group_user agriculture_management_odoo.group_agriculture_user 1 1 1 1 0
12 access_crop_animals access_farmer_detail_admin access.crop.animals access.farmer.detail model_crop_animals model_farmer_detail base.group_user agriculture_management_odoo.group_agriculture_admin 1 1 1 1
13 access_agr_tag access_farmer_detail_user access.agr.tag access.farmer.detail model_agr_tag model_farmer_detail base.group_user agriculture_management_odoo.group_agriculture_user 1 1 1 1 0
14 access_vehicle_rental access_pest_request_admin access.vehicle.rental access.pest.request model_vehicle_rental model_pest_request base.group_user agriculture_management_odoo.group_agriculture_admin 1 1 1 1
15 access_animal_rental access_pest_request_user access.animal.rental access.pest.request model_animal_rental model_pest_request base.group_user agriculture_management_odoo.group_agriculture_user 1 1 1 1 0
16 access_crop_report_wizard access_pest_detail_admin access.crop.report.wizard access.pest.detail model_crop_report_wizard model_pest_detail base.group_user agriculture_management_odoo.group_agriculture_admin 1 1 1 1
17 access_pest_report_wizard access_pest_detail_user access.pest.report.wizard access.pest.detail model_pest_report_wizard model_pest_detail base.group_user agriculture_management_odoo.group_agriculture_user 1 1 1 1 0
18 access_damage_loss_admin access.damage.loss model_damage_loss agriculture_management_odoo.group_agriculture_admin 1 1 1 1
19 access_damage_loss_user access.damage.loss model_damage_loss agriculture_management_odoo.group_agriculture_user 1 1 1 0
20 access_crop_machinery_admin access.crop.machinery model_crop_machinery agriculture_management_odoo.group_agriculture_admin 1 1 1 1
21 access_crop_machinery_user access.crop.machinery model_crop_machinery agriculture_management_odoo.group_agriculture_user 1 1 1 0
22 access_crop_animal_admin access.crop.animal model_crop_animal agriculture_management_odoo.group_agriculture_admin 1 1 1 1
23 access_crop_animal_user access.crop.animal model_crop_animal agriculture_management_odoo.group_agriculture_user 1 1 1 0
24 access_agriculture_tag_admin access.agriculture.tag model_agriculture_tag agriculture_management_odoo.group_agriculture_admin 1 1 1 1
25 access_agriculture_tag_user access.agriculture.tag model_agriculture_tag agriculture_management_odoo.group_agriculture_user 1 1 1 0
26 access_vehicle_rental_admin access.vehicle.rental model_vehicle_rental agriculture_management_odoo.group_agriculture_admin 1 1 1 1
27 access_vehicle_rental_user access.vehicle.rental model_vehicle_rental agriculture_management_odoo.group_agriculture_user 1 1 1 0
28 access_animal_rental_admin access.animal.rental model_animal_rental agriculture_management_odoo.group_agriculture_admin 1 1 1 1
29 access_animal_rental_user access.animal.rental model_animal_rental agriculture_management_odoo.group_agriculture_user 1 1 1 0
30 access_crop_report_admin access.crop.report model_crop_report agriculture_management_odoo.group_agriculture_admin 1 1 1 1
31 access_crop_report_user access.crop.report model_crop_report agriculture_management_odoo.group_agriculture_user 1 1 1 0
32 access_pest_report_admin access.pest.report model_pest_report agriculture_management_odoo.group_agriculture_admin 1 1 1 1
33 access_pest_report_user access.pest.report model_pest_report agriculture_management_odoo.group_agriculture_user 1 1 1 0
34 access_animal_register_payment_wizard access.animal.register.payment.wizard model_animal_register_payment_wizard base.group_user 1 1 1 1
35 access_vehicle_register_payment_wizard access.vehicle.register.payment.wizard model_vehicle_register_payment_wizard base.group_user 1 1 1 1

36
agriculture_management_odoo/security/user_groups.xml

@ -1,36 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.module.category" id="module_agriculture_management_odoo">
<field name="name">Agriculture Management</field>
<field name="description">Category for Agriculture</field>
</record>
<record id="group_agriculture_user" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="module_agriculture_management_odoo"/>
</record>
<record id="group_agriculture_admin" model="res.groups">
<field name="name">Manager</field>
<field name="category_id" ref="module_agriculture_management_odoo"/>
<field name="implied_ids" eval="[(4, ref('group_agriculture_user'))]"/>
</record>
<record id="rule_own_doc" model="ir.rule">
<field name="name">View Own Docs</field>
<field ref="model_crop_requests" name="model_id"/>
<field name="domain_force">['|',('user_id', '=', user.id),('create_uid',
'=', user.id)]
</field>
<field name="groups"
eval="[(4, ref('agriculture_management_odoo.group_agriculture_user'))]"/>
</record>
<record id="rule_all_doc" model="ir.rule">
<field name="name">View All Docs</field>
<field ref="model_crop_requests" name="model_id"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups"
eval="[(4, ref('agriculture_management_odoo.group_agriculture_admin'))]"/>
</record>
</odoo>

0
agriculture_management_odoo/static/description/assets/icons/check.png

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

0
agriculture_management_odoo/static/description/assets/icons/chevron.png

Before

Width:  |  Height:  |  Size: 310 B

After

Width:  |  Height:  |  Size: 310 B

0
agriculture_management_odoo/static/description/assets/icons/cogs.png

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

0
agriculture_management_odoo/static/description/assets/icons/consultation.png

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

0
agriculture_management_odoo/static/description/assets/icons/ecom-black.png

Before

Width:  |  Height:  |  Size: 576 B

After

Width:  |  Height:  |  Size: 576 B

0
agriculture_management_odoo/static/description/assets/icons/education-black.png

Before

Width:  |  Height:  |  Size: 733 B

After

Width:  |  Height:  |  Size: 733 B

0
agriculture_management_odoo/static/description/assets/icons/hotel-black.png

Before

Width:  |  Height:  |  Size: 911 B

After

Width:  |  Height:  |  Size: 911 B

0
agriculture_management_odoo/static/description/assets/icons/license.png

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

0
agriculture_management_odoo/static/description/assets/icons/lifebuoy.png

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

0
agriculture_management_odoo/static/description/assets/icons/logo.png

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

0
agriculture_management_odoo/static/description/assets/icons/manufacturing-black.png

Before

Width:  |  Height:  |  Size: 673 B

After

Width:  |  Height:  |  Size: 673 B

0
agriculture_management_odoo/static/description/assets/icons/pos-black.png

Before

Width:  |  Height:  |  Size: 878 B

After

Width:  |  Height:  |  Size: 878 B

0
agriculture_management_odoo/static/description/assets/icons/puzzle.png

Before

Width:  |  Height:  |  Size: 653 B

After

Width:  |  Height:  |  Size: 653 B

0
agriculture_management_odoo/static/description/assets/icons/restaurant-black.png

Before

Width:  |  Height:  |  Size: 905 B

After

Width:  |  Height:  |  Size: 905 B

0
agriculture_management_odoo/static/description/assets/icons/service-black.png

Before

Width:  |  Height:  |  Size: 839 B

After

Width:  |  Height:  |  Size: 839 B

0
agriculture_management_odoo/static/description/assets/icons/trading-black.png

Before

Width:  |  Height:  |  Size: 427 B

After

Width:  |  Height:  |  Size: 427 B

0
agriculture_management_odoo/static/description/assets/icons/training.png

Before

Width:  |  Height:  |  Size: 627 B

After

Width:  |  Height:  |  Size: 627 B

0
agriculture_management_odoo/static/description/assets/icons/update.png

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

0
agriculture_management_odoo/static/description/assets/icons/user.png

Before

Width:  |  Height:  |  Size: 988 B

After

Width:  |  Height:  |  Size: 988 B

0
agriculture_management_odoo/static/description/assets/icons/wrench.png

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

0
agriculture_management_odoo/static/description/assets/modules/budget_image.png

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

0
agriculture_management_odoo/static/description/assets/modules/credit_image.png

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

0
agriculture_management_odoo/static/description/assets/modules/employee_image.png

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

0
agriculture_management_odoo/static/description/assets/modules/export_image.png

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

0
agriculture_management_odoo/static/description/assets/modules/gantt_image.png

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

0
agriculture_management_odoo/static/description/assets/modules/quotation_image.png

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/17.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/18.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/19.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/20.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/21.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/22.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/23.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/24.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/25.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/26.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/27.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/agr_conf_3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/agr_crop_4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/agr_manager_1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/agr_user_2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

BIN
agriculture_management_odoo/static/description/assets/screenshots/agr_vehicle_repor_6.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save