module library
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import controllers
|
||||||
|
from . import models
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
{
|
||||||
|
'name': "Library Manage",
|
||||||
|
|
||||||
|
'summary': "Library module allows users to manage libraries",
|
||||||
|
|
||||||
|
'description': """
|
||||||
|
Library module allows users to manage libraries
|
||||||
|
""",
|
||||||
|
|
||||||
|
'author': "NXHuyen",
|
||||||
|
'website': "https://www.yourcompany.com",
|
||||||
|
|
||||||
|
# Categories can be used to filter modules in modules listing
|
||||||
|
# Check https://github.com/odoo/odoo/blob/15.0/odoo/addons/base/data/ir_module_category_data.xml
|
||||||
|
# for the full list
|
||||||
|
'category': 'Manage',
|
||||||
|
'version': '0.1',
|
||||||
|
|
||||||
|
# any module necessary for this one to work correctly
|
||||||
|
'depends': ['base'],
|
||||||
|
|
||||||
|
# always loaded
|
||||||
|
'data': [
|
||||||
|
'security/ir.model.access.csv',
|
||||||
|
'views/library_book_views.xml',
|
||||||
|
'views/library_member_views.xml',
|
||||||
|
'views/library_menus.xml'
|
||||||
|
],
|
||||||
|
# only loaded in demonstration mode
|
||||||
|
'demo': [
|
||||||
|
'demo/demo.xml',
|
||||||
|
],
|
||||||
|
'installable': True,
|
||||||
|
'application': True,
|
||||||
|
'auto_install': False,
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import controllers
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# from odoo import http
|
||||||
|
|
||||||
|
|
||||||
|
# class Library(http.Controller):
|
||||||
|
# @http.route('/library/library', auth='public')
|
||||||
|
# def index(self, **kw):
|
||||||
|
# return "Hello, world"
|
||||||
|
|
||||||
|
# @http.route('/library/library/objects', auth='public')
|
||||||
|
# def list(self, **kw):
|
||||||
|
# return http.request.render('library.listing', {
|
||||||
|
# 'root': '/library/library',
|
||||||
|
# 'objects': http.request.env['library.library'].search([]),
|
||||||
|
# })
|
||||||
|
|
||||||
|
# @http.route('/library/library/objects/<model("library.library"):obj>', auth='public')
|
||||||
|
# def object(self, obj, **kw):
|
||||||
|
# return http.request.render('library.object', {
|
||||||
|
# 'object': obj
|
||||||
|
# })
|
||||||
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<!--
|
||||||
|
<record id="object0" model="library.library">
|
||||||
|
<field name="name">Object 0</field>
|
||||||
|
<field name="value">0</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object1" model="library.library">
|
||||||
|
<field name="name">Object 1</field>
|
||||||
|
<field name="value">10</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object2" model="library.library">
|
||||||
|
<field name="name">Object 2</field>
|
||||||
|
<field name="value">20</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object3" model="library.library">
|
||||||
|
<field name="name">Object 3</field>
|
||||||
|
<field name="value">30</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object4" model="library.library">
|
||||||
|
<field name="name">Object 4</field>
|
||||||
|
<field name="value">40</field>
|
||||||
|
</record>
|
||||||
|
-->
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import library_book
|
||||||
|
from . import library_member
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
from odoo import fields, models
|
||||||
|
from odoo.exceptions import UserError
|
||||||
|
|
||||||
|
class LibraryBook(models.Model):
|
||||||
|
_name = "library.book"
|
||||||
|
_description = "Library Book"
|
||||||
|
|
||||||
|
name = fields.Char(string="Tên sách", required=True)
|
||||||
|
author = fields.Char(string="Tác giả")
|
||||||
|
published_date = fields.Date(string="Ngày xuất bản")
|
||||||
|
isbn = fields.Char(string="Số ISBN")
|
||||||
|
price = fields.Float(string="Giá sách")
|
||||||
|
|
||||||
|
borrowed_by = fields.Many2one("library.member", string="Được mượn bởi")
|
||||||
|
|
||||||
|
def action_mark_as_borrowed(self):
|
||||||
|
if self.borrowed_by:
|
||||||
|
raise UserError("Sách này đã được mượn rồi!")
|
||||||
|
return {
|
||||||
|
'name': 'Select Member',
|
||||||
|
'type': 'ir.actions.act_window',
|
||||||
|
'res_model': 'library.member',
|
||||||
|
'view_mode': 'form',
|
||||||
|
'target': 'new'
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
class LibraryMember(models.Model):
|
||||||
|
_name = "library.member"
|
||||||
|
_description = "Library Member"
|
||||||
|
|
||||||
|
name = fields.Char(string="Tên thành viên")
|
||||||
|
email = fields.Char(string="Email", required=True, unique=True)
|
||||||
|
phone = fields.Char(string="Số điện thoại")
|
||||||
|
borrowed_books_ids = fields.One2many("library.book", "borrowed_by", string="Danh sách sách đã mượn")
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_library_book,library.book,model_library_book,base.group_user,1,1,1,1
|
||||||
|
access_library_member,library.member,model_library_member,base.group_user,1,1,1,1
|
||||||
|
@@ -0,0 +1,52 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<!-- list view -->
|
||||||
|
<record id="view_library_book_tree" model="ir.ui.view">
|
||||||
|
<field name="name">library.book.list</field>
|
||||||
|
<field name="model">library.book</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<list string="">
|
||||||
|
<field name="name" optional="show" />
|
||||||
|
<field name="author" optional="show" />
|
||||||
|
<field name="published_date" optional="show" />
|
||||||
|
<field name="isbn" optional="show" />
|
||||||
|
<field name="price" optional="show" />
|
||||||
|
</list>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_library_book_form" model="ir.ui.view">
|
||||||
|
<field name="name">library.book.form</field>
|
||||||
|
<field name="model">library.book</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="">
|
||||||
|
<sheet>
|
||||||
|
<group>
|
||||||
|
<field name="name" />
|
||||||
|
<field name="author" />
|
||||||
|
<field name="published_date" />
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="isbn" />
|
||||||
|
<field name="price" />
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="borrowed_by" invisible="1" />
|
||||||
|
</group>
|
||||||
|
<footer>
|
||||||
|
<button name="action_mark_as_borrowed" string="Mượn Sách"
|
||||||
|
type="object" />
|
||||||
|
</footer>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="menu_library_books" model="ir.actions.act_window">
|
||||||
|
<field name="name">Action Library Book</field>
|
||||||
|
<field name="res_model">library.book</field>
|
||||||
|
<field name="view_mode">list,form</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="view_library_member_form" model="ir.ui.view">
|
||||||
|
<field name="name">library.member.form</field>
|
||||||
|
<field name="model">library.member</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Library Member">
|
||||||
|
<sheet>
|
||||||
|
<group>
|
||||||
|
<field name="name" />
|
||||||
|
<field name="email" />
|
||||||
|
<field name="phone" />
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="borrowed_books_ids" widget="many2many_tags" />
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_library_member_tree" model="ir.ui.view">
|
||||||
|
<field name="name">library.member.list</field>
|
||||||
|
<field name="model">library.member</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<list string="Library Members">
|
||||||
|
<field name="name" />
|
||||||
|
<field name="email" />
|
||||||
|
<field name="phone" />
|
||||||
|
</list>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_library_members" model="ir.actions.act_window">
|
||||||
|
<field name="name">Action Library Members</field>
|
||||||
|
<field name="res_model">library.member</field>
|
||||||
|
<field name="view_mode">list,form</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<menuitem
|
||||||
|
id="menu_library"
|
||||||
|
name="Library"
|
||||||
|
sequence="10" />
|
||||||
|
|
||||||
|
<menuitem
|
||||||
|
id="menu_library_book"
|
||||||
|
name="Books"
|
||||||
|
action="menu_library_books"
|
||||||
|
parent="menu_library"
|
||||||
|
sequence="10" />
|
||||||
|
|
||||||
|
<menuitem
|
||||||
|
id="menu_library_member"
|
||||||
|
name="Members"
|
||||||
|
action="action_library_members"
|
||||||
|
parent="menu_library"
|
||||||
|
sequence="10" />
|
||||||
|
</odoo>
|
||||||
Reference in New Issue
Block a user