From 1cf7280f70b43a42c2fcf60e8a5d0eaeed2cbf28 Mon Sep 17 00:00:00 2001 From: niyas Date: Fri, 11 Dec 2015 12:35:05 +0530 Subject: [PATCH] added full code --- library_management/.gitignore | 57 ++ library_management/__init__.py | 4 + library_management/__openerp__.py | 30 + library_management/demo.xml | 14 + library_management/library.py | 772 ++++++++++++++++++ library_management/registration.py | 244 ++++++ library_management/report.xml | 14 + library_management/report/__init__.py | 1 + .../report/report_invoice_parser.py | 34 + library_management/res_config.py | 73 ++ library_management/res_config_view.xml | 53 ++ .../security/ir.model.access.csv | 29 + .../security/library.account.config.csv | 2 + .../security/library.fine.per.day.conf.csv | 2 + .../security/library.store.conf.csv | 2 + .../static/description/icon.png | Bin 0 -> 4685 bytes library_management/static/src/img/book1.png | Bin 0 -> 110915 bytes library_management/view/library.xml | 722 ++++++++++++++++ library_management/view/registration.xml | 130 +++ library_management/view/report_invoice.xml | 70 ++ library_management/view/user_view.xml | 49 ++ 21 files changed, 2302 insertions(+) create mode 100644 library_management/.gitignore create mode 100644 library_management/__init__.py create mode 100644 library_management/__openerp__.py create mode 100644 library_management/demo.xml create mode 100644 library_management/library.py create mode 100644 library_management/registration.py create mode 100644 library_management/report.xml create mode 100644 library_management/report/__init__.py create mode 100644 library_management/report/report_invoice_parser.py create mode 100644 library_management/res_config.py create mode 100644 library_management/res_config_view.xml create mode 100644 library_management/security/ir.model.access.csv create mode 100644 library_management/security/library.account.config.csv create mode 100644 library_management/security/library.fine.per.day.conf.csv create mode 100644 library_management/security/library.store.conf.csv create mode 100644 library_management/static/description/icon.png create mode 100644 library_management/static/src/img/book1.png create mode 100644 library_management/view/library.xml create mode 100644 library_management/view/registration.xml create mode 100644 library_management/view/report_invoice.xml create mode 100644 library_management/view/user_view.xml diff --git a/library_management/.gitignore b/library_management/.gitignore new file mode 100644 index 000000000..ba7466050 --- /dev/null +++ b/library_management/.gitignore @@ -0,0 +1,57 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ diff --git a/library_management/__init__.py b/library_management/__init__.py new file mode 100644 index 000000000..5af2e594d --- /dev/null +++ b/library_management/__init__.py @@ -0,0 +1,4 @@ +import library +import registration +import report +import res_config diff --git a/library_management/__openerp__.py b/library_management/__openerp__.py new file mode 100644 index 000000000..5623f3115 --- /dev/null +++ b/library_management/__openerp__.py @@ -0,0 +1,30 @@ +{ + 'name': 'Public Library Management ', + 'version': '1.0', + 'author' : 'Cybrosys', + 'category': 'Tools', + 'summary': 'book management', + 'description': """ +Public Library Management +================================ +Module to manage library. + Books Information, + Publisher and Author Information, + Book Rack Tracking etc... +""", + 'depends' : ['base', 'sale', 'report_intrastat', 'stock', 'mail', 'account', 'account_accountant'], + 'data' : [ + 'view/registration.xml', + 'view/library.xml', + 'view/user_view.xml', + 'res_config_view.xml', + 'view/report_invoice.xml', + 'report.xml', + 'security/ir.model.access.csv', + 'demo.xml', + ], + 'images': [], + 'demo': [], + 'installable' : True, + 'application': True, +} diff --git a/library_management/demo.xml b/library_management/demo.xml new file mode 100644 index 000000000..fd41732f6 --- /dev/null +++ b/library_management/demo.xml @@ -0,0 +1,14 @@ + + + + + 10 + 5 + + + + + + + + diff --git a/library_management/library.py b/library_management/library.py new file mode 100644 index 000000000..d24e0865d --- /dev/null +++ b/library_management/library.py @@ -0,0 +1,772 @@ +from openerp import models, fields, tools, api +from openerp.tools.translate import _ +from datetime import datetime, timedelta, date +from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT, image_colorize, image_resize_image_big +import openerp +from openerp.exceptions import Warning + + +class library_rack(models.Model): + _name = 'library.rack' + code = fields.Char(string='Code', size=64, required=True, readonly=True, + help="it will be show the position of book") + name = fields.Char(string='Name', size=16) + active = fields.Boolean('Active', default=True) + book_ids = fields.One2many('product.product', compute='compute_book') + _sql_constraints = [('code.unique', 'unique(code)', 'The code of the rack must be unique !!'), + ('name_uniq', 'unique (name)', 'The name of rack already exists !!')] + _defaults = {'code': lambda self, cr, uid, context: 'rack'} + + def create(self, cr, uid, values, context=None): + if values.get('code', _('rack')) == _('rack'): + values['code'] = self.pool.get('ir.sequence').get(cr, uid, 'library.rack') + return super(library_rack, self).create(cr, uid, values, context=context) + + def compute_book(self): + book_obj = self.pool.get('product.product') + browse = self.browse(self._ids) + student_ids = book_obj.search(self._cr, self._uid, [('rack', '=', browse.name)]) + self.book_ids = student_ids + + +class product_lang(models.Model): + _name = 'product.lang' + code = fields.Char('Code', size=4, required=True, readonly=True) + name = fields.Char('Name', size=128, required=True) + book_ids = fields.One2many('product.product', compute='compute_book') + _sql_constraints = [('name_uniq', 'unique (name)', 'The name of the language must be unique !'), + ('code_uniq', 'unique (code)', 'The code of the lang must be unique !')] + + _defaults = { + 'code': lambda self, cr, uid, context: 'language' + } + + def create(self, cr, uid, values, context=None): + if values.get('code', _('language')) == _('language'): + values['code'] = self.pool.get('ir.sequence').get(cr, uid, 'product.lang') + return super(product_lang, self).create(cr, uid, values, context=context) + + def compute_book(self): + book_obj = self.pool.get('product.product') + browse = self.browse(self._ids) + student_ids = book_obj.search(self._cr, self._uid, [('lang', '=', browse.name)]) + self.book_ids = student_ids + + +class library_book_returnday(models.Model): + _name = 'library.book.returnday' + _rec_name = 'day' + day = fields.Integer('Days', default=1, required=True, help="It show the no of day/s for returning book") + code = fields.Char('Code', readonly=True, size=16) + fine_amt = fields.Float('Fine Amount', default=1, required=True, + help="Fine amount to be paid after due of book return date") + _sql_constraints = [('name_uniq', 'unique (code)', 'The code of the return days must be unique !')] + _defaults = {'code': lambda self, cr, uid, context: 'day'} + + def create(self, cr, uid, values, context=None): + if values.get('code', _('day')) == _('day'): + values['code'] = self.pool.get('ir.sequence').get(cr, uid, 'library.book.returnday') + return super(library_book_returnday, self).create(cr, uid, values, context=context) + + +class library_price_category(models.Model): + _name = 'library.price.category' + _description = 'Book Category' + + name = fields.Char('Category', size=64, required=True) + code = fields.Char('Code', readonly=True) + book_ids = fields.One2many('product.product', compute='compute_book') + _sql_constraints = [('name_uniq', 'unique (code)', 'The code of the category must be unique !')] + _defaults = {'code': lambda self, cr, uid, context: 'category'} + + def create(self, cr, uid, values, context=None): + if values.get('code', _('category')) == _('category'): + values['code'] = self.pool.get('ir.sequence').get(cr, uid, 'library.price.cat') + return super(library_price_category, self).create(cr, uid, values, context=context) + + def compute_book(self): + book_obj = self.pool.get('product.product') + browse = self.browse(self._ids) + student_ids = book_obj.search(self._cr, self._uid, [('book_cat', '=', browse.name)]) + self.book_ids = student_ids + + +class stock_change_quantity(models.Model): + _inherit = "stock.change.product.qty" + + def change_product_qty(self, cr, uid, ids, context=None): + conf = self.pool.get('ir.values') + store_conf = conf.get_default(cr, uid, 'library.config.settings', 'store') + ware_brow = self.pool.get('stock.warehouse').browse(cr, uid, store_conf, context=context) + if store_conf == False or store_conf == None: + raise Warning(_("Warning"), _("Set a store to library from Library settings")) + get_conf_store = ware_brow.code + if context is None: + context = {} + inventory_obj = self.pool.get('stock.inventory') + inventory_line_obj = self.pool.get('stock.inventory.line') + po_id = context.get('active_id') + prod_obj = self.pool.get('product.product') + prod = prod_obj.browse(cr, uid, po_id, context=context) + for data in self.browse(cr, uid, ids, context=context): + get_trans_loc = data.location_id.location_id.name + if get_conf_store == get_trans_loc: + prod_obj.write(cr, uid, po_id, {'total_copies': data.new_quantity, + 'available_copies': data.new_quantity}) + if data.new_quantity < 0: + raise Warning(_("Warning"), _("Quantity cannot be negative.")) + ctx = context.copy() + ctx['location'] = data.location_id.id + ctx['lot_id'] = data.lot_id.id + if data.product_id.id and data.lot_id.id: + filter = 'none' + elif data.product_id.id: + filter = 'product' + else: + filter = 'none' + inventory_id = inventory_obj.create(cr, uid, { + 'name': _('INV: %s') % tools.ustr(data.product_id.name), + 'filter': filter, + 'product_id': data.product_id.id, + 'location_id': data.location_id.id, + 'lot_id': data.lot_id.id}, context=context) + product = data.product_id.with_context(location=data.location_id.id, lot_id=data.lot_id.id) + th_qty = product.qty_available + line_data = { + 'inventory_id': inventory_id, + 'product_qty': data.new_quantity, + 'location_id': data.location_id.id, + 'product_id': data.product_id.id, + 'product_uom_id': data.product_id.uom_id.id, + 'theoretical_qty': th_qty, + 'prod_lot_id': data.lot_id.id + } + inventory_line_obj.create(cr, uid, line_data, context=context) + inventory_obj.action_done(cr, uid, [inventory_id], context=context) + return {} + + +class library_book_issue(models.Model): + _name = 'library.book.issue' + _description = "Library information" + name = fields.Many2one('product.product', 'Book Name', required=True) + issue_code = fields.Char('Issue No.', size=24, required=True, readonly=True, copy=False) + user = fields.Many2one('res.partner', 'User Name') + invoice_id = fields.Many2one('account.invoice', "User's Invoice") + date_issue = fields.Datetime('Release Date', readonly=True, default=datetime.now(), + help="Release(Issue) date of the book") + date_return = fields.Datetime(string='Return Date', readonly=True, + help="Book To Be Return On This Date", copy=False) + actual_return_date = fields.Datetime("Actual Return Date", readonly=True, help="Actual Return Date of Book") + penalty = fields.Float(string='Penalty For Late Book Return', + help='It show the late book return penalty', readonly=True) + lost_penalty = fields.Float(string='Fine', help='It show the penalty for lost book') + day_to_return_book = fields.Many2one("library.book.returnday", "Book Return Days", copy=False) + card_id = fields.Many2one("library.card", "Card No", required=True) + state = fields.Selection([('draft', 'Draft'), ('issue', 'Issued'), ('transfered', 'Transfered'), + ('reissue', 'Reissued'), ('cancel', 'Cancelled'), ('lost', 'Lost'), + ('return', 'Returned'), ('paid', 'Paid')], "State") + + color = fields.Integer("Color Index") + _defaults = { + 'state': 'draft', + 'issue_code': lambda self, cr, uid, context: 'issue' + } + + def create(self, cr, uid, values, context=None): + if values.get('issue_code', _('issue')) == _('issue'): + values['issue_code'] = self.pool.get('ir.sequence').get(cr, uid, 'library.book.issue') + return super(library_book_issue, self).create(cr, uid, values, context=context) + + @api.multi + def invoice_print(self): + return self.env['report'].get_action(self, 'library_management.report_invoice_library') + + def _library_reminder(self, cr, uid, context=None): + tommarrow = datetime.now() + timedelta(days=1) + issue_obj = self.pool.get('library.book.issue') + late_ids = issue_obj.search(cr, uid, [('state', '=', 'transfered')]) + for i in late_ids: + a = issue_obj.browse(cr, uid, i, context) + date_return = datetime.strptime(a.date_return, DEFAULT_SERVER_DATETIME_FORMAT) + if tommarrow.date() == date_return.date(): + post_vars = {'subject': "Library- Reminder", + 'body': "Hello " + str(a.user.name) + ", Your book(" + str(a.name.name) + + ") return date is tommarrow" + "(" + str(date_return.date()) + ")" + + ". Please try to return the book as soon as possible. Else You need to pay the fine.", + 'model': 'library.book.issue', + 'partner_ids': [a.user.id]} + thread_pool = self.pool.get('mail.thread') + thread_pool.message_post(cr, uid, False, type="comment", subtype="mt_comment", + context=context, **post_vars) + + def transfer_book(self, cr, uid, ids, context=None): + for order in self.browse(cr, uid, ids): + conf = self.pool.get('ir.values') + store_conf = conf.get_default(cr, uid, 'library.config.settings', 'store') + ware_brow = self.pool.get('stock.warehouse').browse(cr, uid, store_conf, context=context) + if store_conf == False or store_conf == None: + raise Warning(_("Warning"), _("Set a store to library from Library settings")) + product_rec = self.pool.get('product.product').browse(cr, uid, order.name.id, context=context) + book = product_rec.name + uom_id = product_rec.uom_id + searc = self.pool.get('product.product').search(cr, uid, [('product_tmpl_id', '=', book)]) + whstocks = self.pool.get('stock.location').search(cr, uid, [('location_id.name', '=', ware_brow.code), + ('name', '=', 'Stock')], context=context) + whstock = whstocks[0] + whsto = self.pool.get('stock.location').browse(cr, uid, whstock, context=None) + search_picks = self.pool.get('stock.picking.type'). \ + search(cr, uid, [('warehouse_id.name', '=', ware_brow.name)], context=context) + search_pick = search_picks[2] + picking_vals = { + 'picking_type_id': search_pick, + 'partner_id': order.user.id, + 'date': date.today(), + 'origin': order.issue_code, + } + + picking_id = self.pool.get('stock.picking').create(cr, uid, picking_vals, context=context) + vals = { + 'name': order.id or '', + 'product_id': searc[0], + 'product_uom': uom_id.id, + 'date': date.today(), + 'location_id': whsto.id, + 'location_dest_id': order.user.property_stock_customer.id, + 'picking_id': picking_id, + } + move_id = self.pool.get('stock.move').create(cr, uid, vals, context=context) + self.pool.get('stock.move').force_assign(cr, uid, [move_id], context=context) + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'stock.picking', + 'context': context, + 'type': 'ir.actions.act_window', + 'res_id': picking_id + } + + def issue_book(self, cr, uid, ids, context=None): + product_obj = self.pool.get('product.product') + for issue in self.browse(cr, uid, ids, context=context): + card_ids = self.search(cr, uid, [('card_id', '=', issue.card_id.id), + ('state', 'in', ['issue', 'reissue', 'transfered'])]) + if issue.card_id.book_limit > len(card_ids) and issue.name.available_copies > 0: + self.write(cr, uid, ids, {'state': 'issue', 'date_issue': datetime.now()}, context=context) + elif issue.card_id.book_limit <= len(card_ids) and issue.name.available_copies > 0: + raise Warning(_("Warning"), _("Exceeded maximum book limit...")) + elif issue.card_id.book_limit > len(card_ids) and issue.name.available_copies <= 0: + raise Warning(_("Warning"), _("Sorry, Currently book not available")) + elif issue.card_id.book_limit <= len(card_ids) and issue.name.available_copies <= 0: + raise Warning(_("Warning"), _("Sorry, Currently book not available and Exceeded maximum book limit...")) + else: + pass + return True + + def user_fine(self, cr, uid, ids, context=None): + conf = self.pool.get('ir.values') + account_conf = conf.get_default(cr, uid, 'library.config.settings', 'account_id') + if account_conf == False or account_conf == None: + raise Warning(_("Warning"), _("Set an account for library from Library settings")) + lib_account = account_conf + for i in self.browse(cr, uid, ids): + state = i.state + book = i.name.id + issue_code = i.issue_code + + invoice_obj = self.pool.get('account.invoice') + obj_data = self.pool.get('ir.model.data') + pen = 0.0 + fine_per_day = 0.0 + lost_pen = 0.0 + for record in self.browse(cr, uid, ids): + a = record.date_return + a = datetime.strptime(a, DEFAULT_SERVER_DATETIME_FORMAT) + + usr = record.user.id + addr = record.user.contact_address + user_account = record.user.property_account_receivable.id + vals_invoice = { + 'partner_id': usr, + 'address_invoice_id': addr, + 'date_invoice': date.today().strftime('%Y-%m-%d'), + 'account_id': user_account, + } + invoice_lines = [] + if state == 'lost': + lost_pen = record.lost_penalty + invoice_line2 = { + 'name': issue_code, + 'price_unit': lost_pen, + 'product_id': book, + 'account_id': lib_account + } + invoice_lines.append((0, 0, invoice_line2)) + if state != 'lost': + b = record.actual_return_date + b = datetime.strptime(b, DEFAULT_SERVER_DATETIME_FORMAT) + dif = b.date() - a.date() + day = dif.days + + conf = self.pool.get('ir.values') + store_conf = conf.get_default(cr, uid, 'library.config.settings', 'fine_per_day') + fine_amount = store_conf + + if fine_amount < 0.0: + raise Warning(_("Warning"), + _("Fine per day must be positive.Set a fine amount from Library settings")) + fine_per_day += fine_amount * day + + invoicee_obj = self.pool.get('account.invoice.line') + invoicee_search = invoicee_obj.search(cr, uid, []) + for i in invoicee_obj.browse(cr, uid, invoicee_search, context=context): + if i.name == issue_code: + raise Warning(_("Warning"), _("Cannot create two invoice line with same issue code.")) + if a < b: + pen = record.penalty + fine_per_day + invoice_line1 = { + 'name': issue_code, + 'price_unit': pen, + 'product_id': book, + 'account_id': lib_account + } + else: + invoice_line1 = { + 'name': issue_code, + 'price_unit': 0.00, + 'product_id': book, + 'account_id': lib_account + } + + invoice_lines.append((0, 0, invoice_line1)) + vals_invoice.update({'invoice_line': invoice_lines}) + new_invoice_id = invoice_obj.create(cr, uid, vals_invoice) + data_id = obj_data._get_id(cr, uid, 'account', 'invoice_form') + data = obj_data.browse(cr, uid, data_id, context=context) + view_id = data.res_id + return { + 'name': _("New Invoice"), + 'view_mode': 'form', + 'view_id': [view_id], + 'view_type': 'form', + 'res_model': 'account.invoice', + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'res_id': new_invoice_id, + 'target': 'current', + 'context': {} + } + + def reissue_book(self, cr, uid, ids, context=None): + new = self.pool.get('library.book.issue').browse(cr, uid, ids, context=context) + day_to_return_book = new.day_to_return_book.id + return_days = self.pool.get('library.book.returnday') + browse = return_days.browse(cr, uid, day_to_return_book, context) + for item in browse: + day = item.day + ret_date = datetime.now() + timedelta(days=day) + self.write(cr, uid, ids, {'state': 'reissue'}, context=context) + self.write(cr, uid, ids, {'date_issue': datetime.now(), 'date_return': ret_date}, context=context) + return True + + def lost_book(self, cr, uid, ids, context=None): + product_obj = self.pool.get('product.product') + for issue in self.browse(cr, uid, ids, context=context): + avail = issue.name.available_copies + total = issue.name.total_copies - 1 + product_obj.write(cr, uid, issue.name.id, {'total_copies': total}, context=context) + product_obj.write(cr, uid, issue.name.id, {'available_copies': avail}, context=context) + self.write(cr, uid, ids, {'state': 'lost'}, context=context) + return True + + def return_book(self, cr, uid, ids, context=None): + for order in self.browse(cr, uid, ids): + product_rec = self.pool.get('product.product').browse(cr, uid, order.name.id, context=context) + book = product_rec.name + searc = self.pool.get('product.product').search(cr, uid, [('product_tmpl_id', '=', book)]) + conf = self.pool.get('ir.values') + store_conf = conf.get_default(cr, uid, 'library.config.settings', 'store') + ware_brow = self.pool.get('stock.warehouse').browse(cr, uid, store_conf, context=context) + if store_conf == False: + raise Warning(_("Warning"), _("Set a store to library from Library settings")) + whstocks = self.pool.get('stock.location'). \ + search(cr, uid, [('location_id.name', '=', ware_brow.code), ('name', '=', 'Stock')], context=context) + whstock = whstocks[0] + whsto = self.pool.get('stock.location').browse(cr, uid, whstock, context=None) + search_picks = self.pool.get('stock.picking.type'). \ + search(cr, uid, [('warehouse_id.name', '=', ware_brow.name)], context=context) + search_pick = search_picks[0] + picking_vals = { + 'picking_type_id': search_pick, + 'partner_id': order.user.id, + 'date': date.today(), + 'origin': order.issue_code, + } + picking_id = self.pool.get('stock.picking').create(cr, uid, picking_vals, context=context) + vals = { + 'name': order.id or '', + 'product_id': searc[0], + 'product_uom': product_rec.uom_id.id, + 'date': date.today(), + 'location_id': order.user.property_stock_customer.id, + 'location_dest_id': whsto.id, + 'picking_id': picking_id, + + } + move_id = self.pool.get('stock.move').create(cr, uid, vals, context=context) + self.pool.get('stock.move').force_assign(cr, uid, [move_id], context=context) + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'stock.picking', + 'context': context, + 'type': 'ir.actions.act_window', + 'res_id': picking_id + } + + def cancel_book(self, cr, uid, ids, context=None): + product_obj = self.pool.get('product.product') + for issue in self.browse(cr, uid, ids, context=context): + avail = issue.name.available_copies + 1 + product_obj.write(cr, uid, issue.name.id, {'availability': 'available', 'available_copies': avail}, context) + self.write(cr, uid, ids, {'state': 'cancel'}, context=context) + return True + + def draft_book(self, cr, uid, ids, context=None): + self.write(cr, uid, ids, {'state': 'draft'}, context=context) + return True + + def onchange_card_id(self, cr, uid, ids, card_id, context=None): + + if card_id: + card_detail = self.pool.get('library.card') + browse = card_detail.browse(cr, uid, card_id, context) + for item in browse: + user = item.username + return {'value': {'user': user}} + + def on_change_book_name(self, cr, uid, ids, book_name, context=None): + if book_name: + fine = 0.0 + for line in self.browse(cr, uid, book_name, context=context): + book = self.pool.get('product.product') + bb = book.browse(cr, uid, book_name, context) + fine = bb.lst_price + return {'value': {'lost_penalty': fine}} + + def on_change_day_to_return(self, cr, uid, ids, day_to_return_book, context=None): + if day_to_return_book: + new = self.pool.get('library.book.issue').browse(cr, uid, ids, context=context) + datee = new.date_issue + date = datetime.strptime(str(datee), DEFAULT_SERVER_DATETIME_FORMAT) + return_days = self.pool.get('library.book.returnday') + browse = return_days.browse(cr, uid, day_to_return_book, context) + for item in browse: + day = item.day + penalty = item.fine_amt + ret_date = date + timedelta(days=day) + self.write(cr, uid, ids, {'date_return': ret_date, 'penalty': penalty}, context) + return {'value': {'date_return': ret_date, 'penalty': penalty}} + + +class card_details(models.Model): + _name = 'library.card' + name = fields.Char(string='Card No', size=64, required=True) + username = fields.Many2one('res.partner', "User Name", required=True) + have_valid_card = fields.Boolean('Have valid Card') + book_limit = fields.Integer("Book Limit", required=True) + account_ids = fields.One2many('library.book.issue', compute='compute_account') + _sql_constraints = [('name_uniq', 'unique (name)', 'The card name must be unique !')] + _defaults = {'name': lambda self, cr, uid, context: 'card', + 'have_valid_card': False} + + def copy(self, cr, uid, id, default=None, context=None): + raise Warning(_('Forbbiden to duplicate'), + _('It is not possible to duplicate the record, please create a new one.')) + + def create(self, cr, uid, values, context=None): + if values.get('name', _('card')) == _('card'): + values['name'] = self.pool.get('ir.sequence').get(cr, uid, 'library.card') + return super(card_details, self).create(cr, uid, values, context=context) + + def compute_account(self): + issue_obj = self.pool.get('library.book.issue') + browse = self.browse(self._ids) + student_ids = issue_obj.search(self._cr, self._uid, [('card_id', '=', browse.name)]) + self.account_ids = student_ids + + def onchange_username(self, cr, uid, ids, username, context=None): + if username: + card_obj = self.pool.get('library.card') + card_ids = card_obj.search(cr, uid, [('username', '=', username), ('have_valid_card', '=', True)]) + if len(card_ids) > 0: + return {'value': {'username': " ", 'user': False, 'book_limit': 0}, + 'warning': {'title': 'Warning', 'message': 'Already the user have a card !'}} + + reg_obj = self.pool.get('library.registration') + reg_user_draft = reg_obj.search(cr, uid, [('name', '=', username), ('state', '=', 'draft')]) + length_draft = len(reg_user_draft) + if length_draft > 0: + return {'value': {'username': " ", 'user': False, 'book_limit': 0}, + 'warning': {'title': 'Warning', + 'message': 'Already the user have a registration in draft state!'}} + + reg_user_cancel = reg_obj.search(cr, uid, [('name', '=', username), ('state', '=', 'cancel')]) + length_cancel = len(reg_user_cancel) + if length_cancel > 0: + return {'value': {'username': " ", 'user': False, 'book_limit': 0}, + 'warning': {'title': 'Warning', + 'message': 'Already the user have a registration in cancel state!'}} + reg_user_reg = reg_obj.search(cr, uid, [('name', '=', username), ('state', '=', 'registered')]) + length_reg = len(reg_user_reg) + if length_reg == 0: + return {'value': {'username': " ", 'user': False, 'book_limit': 0}, + 'warning': {'title': 'Warning', + 'message': 'Card not allowed for users without valid registration!'}} + + + # def onchange_user(self, cr, uid, ids, user, context=None): + # if user: + # if user == 'student': + # booklimit = 3 + # if user == 'teacher': + # booklimit = 5 + # if user == 'others': + # booklimit = 2 + # self.write(cr, uid, ids,{'book_limit': booklimit}, context) + # return {'value': {'book_limit': booklimit}} + + +class library_validity(models.Model): + _name = 'library.validity' + _rec_name = 'code' + code = fields.Char('Code', readonly=True, size=16) + name = fields.Char('Name', readonly=True, default="0 Years, 0 Months, 0 Days", compute='compute_validity') + year = fields.Integer('Year') + month = fields.Integer('Month') + day = fields.Integer('Day') + _defaults = {'code': lambda self, cr, uid, context: 'Validity'} + + def create(self, cr, uid, values, context=None): + val_obj = self.search(cr, uid, []) + for rcd in val_obj: + val_details = self.browse(cr, uid, rcd, context) + if val_details.year == values['year'] and val_details.month == values['month'] and val_details.day == \ + values['day']: + raise Warning(_("Warning"), _("The record with same validity period already exists.")) + + if values.get('code', _('Validity')) == _('Validity'): + values['code'] = self.pool.get('ir.sequence').get(cr, uid, 'library.validity') + return super(library_validity, self).create(cr, uid, values, context=context) + + def write(self, cr, uid, ids, vals, context=None): + year = month = day = 0 + if 'year' in vals: + year = vals['year'] + if 'month' in vals: + month = vals['month'] + if 'day' in vals: + day = vals['day'] + if context is None: + context = {} + val_obj = self.search(cr, uid, []) + for rcd in val_obj: + val_details = self.browse(cr, uid, rcd, context) + if val_details.year == year and val_details.month == month and val_details.day == day: + raise Warning(_("Warning"), _("The record with same validity period already exists.")) + + return super(library_validity, self).write(cr, uid, ids, vals, context=context) + + @api.depends('year', 'month', 'day') + def compute_validity(self): + year = self.year + month = self.month + day = self.day + validity = str(year) + " Years," + str(month) + " Months," + str(day) + " Days" + self.name = validity + + +class res_partner(models.Model): + _inherit = 'res.partner' + librarian = fields.Boolean('librarain') + _defaults = {'librarian': False, + } + + +class library_books(models.Model): + _inherit = 'product.product' + book = fields.Boolean('Book') + editor = fields.Many2one('res.partner', 'Editor', change_default=True) + author = fields.Many2one('library.author', 'Author', size=30) + publisher = fields.Many2one('library.publisher', 'Publisher', size=30) + total_copies = fields.Integer('Total Copies') + available_copies = fields.Integer('Available Copies') + book_cat = fields.Many2one('library.price.category', "Book Category") + availability = fields.Boolean('Available', default=True) + year_of_publication = fields.Integer('Year of Publication') + barcode = fields.Char('Barcode') + rack = fields.Many2one('library.rack', 'Rack', size=16, help="it will be show the position of book") + isbn = fields.Char('ISBN Code', size=64, unique=True, help="It show the International Standard Book Number") + lang = fields.Many2one('product.lang', 'Language') + date_parution = fields.Date('Release date', help="Release(Issue) date of the book") + creation_date = fields.Datetime('Creation date', readonly=True, help="Record creation date") + date_retour = fields.Date('Return Date', readonly=True, help='Book Return date') + nbpage = fields.Integer('Number of pages', size=8) + back = fields.Selection([('hard', 'Hardback'), ('paper', 'Paperback')], 'Reliure', + help="It show the books binding type") + pocket = fields.Char('Pocket', size=32) + num_pocket = fields.Char('Collection Num.', size=32, help="It show the collection number in which book is resides") + num_edition = fields.Integer('Num. edition', help="Edition number of book") + format = fields.Char('Format', help="The general physical appearance of a book") + history_ids = fields.One2many('library.book.issue', compute='compute_history') + _sql_constraints = [ + + ('unique_ean13', 'unique(ean13)', 'The ean13 field must be unique across all the products'), + ('code_uniq', 'unique (code)', 'The code of the product must be unique !')] + _defaults = {'availability': 'available', + } + + def compute_history(self): + book_obj = self.pool.get('library.book.issue') + browse = self.browse(self._ids) + student_ids = book_obj.search(self._cr, self._uid, [('name', '=', browse.name)]) + self.history_ids = student_ids + + def _get_default_image(self, cr, uid, is_company, context=None, colorize=False): + image_medium = image_colorize( + open(openerp.modules.get_module_resource('library_management', 'static/src/img', 'book1.png')).read()) + return image_resize_image_big(image_medium.encode('base64')) + + def onchange_total(self, cr, uid, ids, total_copies, context=None): + prod_obj = self.pool.get('product.product') + for issue in self.browse(cr, uid, ids, context=context): + prod_obj.write(cr, uid, issue.id, {'available_copies': total_copies}, context) + return {'value': {'available_copies': total_copies}} + + # def create(self, cr, uid, values, context=None): + # values['book'] = True + # return super(library_books, self).create(cr, uid, values, context=context) + + +class library_author(models.Model): + _name = 'library.author' + name = fields.Char('Name', size=30, required=True, select=True) + code = fields.Char('Code', readonly=True) + born_date = fields.Date('Date of Birth') + death_date = fields.Date('Date of Death') + biography = fields.Text('Biography') + note = fields.Text('Notes') + book_ids = fields.One2many('product.product', compute='compute_book') + _sql_constraints = [('name_uniq', 'unique (name)', 'The name of the author must be unique !'), + ('code_uniq', 'unique (code)', 'The code of the collection must be unique !')] + _defaults = {'code': lambda self, cr, uid, context: 'author'} + + def create(self, cr, uid, values, context=None): + if values.get('code', _('author')) == _('author'): + values['code'] = self.pool.get('ir.sequence').get(cr, uid, 'library.author') + return super(library_author, self).create(cr, uid, values, context=context) + + def unlink(self, cr, uid, ids, context=None): + author_obj = self.browse(cr, uid, ids) + book_obj = self.pool.get('product.product') + search_obj = book_obj.search(cr, uid, [('book', '=', True)]) + for author in author_obj: + for i in search_obj: + if book_obj.browse(cr, uid, i).author.name == author.name: + raise Warning(_("Warning"), _("Deletion unsuccessful."), + _("Author refered in some records in books.")) + # Call the parent method to eliminate the records. + super(library_author, self).unlink(cr, uid, ids, context) + + def compute_book(self): + book_obj = self.pool.get('product.product') + browse = self.browse(self._ids) + student_ids = book_obj.search(self._cr, self._uid, [('author', '=', browse.name)]) + self.book_ids = student_ids + + +class library_publisher(models.Model): + _name = 'library.publisher' + name = fields.Char('Name', size=30, required=True) + code = fields.Char('Code', readonly=True) + _sql_constraints = [('code_uniq', 'unique (code)', 'The code of the publisher must be unique !')] + _defaults = {'code': lambda self, cr, uid, context: 'publisher'} + + def create(self, cr, uid, values, context=None): + if values.get('code', _('publisher')) == _('publisher'): + values['code'] = self.pool.get('ir.sequence').get(cr, uid, 'library.publisher') + return super(library_publisher, self).create(cr, uid, values, context=context) + + +class tranfer_wizard(models.Model): + _inherit = 'stock.transfer_details' + + @api.one + def do_detailed_transfer(self, context=None): + active_id = context.get('active_ids') + processed_ids = [] + # Create new and update existing pack operations + for lstits in [self.item_ids, self.packop_ids]: + for prod in lstits: + pack_datas = { + 'product_id': prod.product_id.id, + 'product_uom_id': prod.product_uom_id.id, + 'product_qty': prod.quantity, + 'package_id': prod.package_id.id, + 'lot_id': prod.lot_id.id, + 'location_id': prod.sourceloc_id.id, + 'location_dest_id': prod.destinationloc_id.id, + 'result_package_id': prod.result_package_id.id, + 'date': prod.date if prod.date else datetime.now(), + 'owner_id': prod.owner_id.id, + } + if prod.packop_id: + prod.packop_id.with_context(no_recompute=True).write(pack_datas) + processed_ids.append(prod.packop_id.id) + else: + pack_datas['picking_id'] = self.picking_id.id + packop_id = self.env['stock.pack.operation'].create(pack_datas) + processed_ids.append(packop_id.id) + # Delete the others + packops = self.env['stock.pack.operation'].search( + ['&', ('picking_id', '=', self.picking_id.id), '!', ('id', 'in', processed_ids)]) + packops.unlink() + # Execute the transfer of the picking + self.picking_id.do_transfer() + issue_code_search = self.pool.get('stock.picking').browse(self._cr, self._uid, active_id) + for i in issue_code_search: + issue_code = i.origin + picking_type = i.picking_type_id.name + issue_obj = self.pool.get('library.book.issue') + issue_search = issue_obj.search(self._cr, self._uid, [('issue_code', '=', issue_code)]) + issue_browse = issue_obj.browse(self._cr, self._uid, issue_search) + product_obj = self.pool.get('product.product') + if picking_type == 'Receipts': + for i in issue_browse: + issue_obj.write(self._cr, self._uid, issue_search, + {'state': 'return', 'actual_return_date': datetime.now()}) + avail = i.name.available_copies + 1 + product_obj.write(self._cr, self._uid, i.name.id, + {'availability': 'available', 'available_copies': avail}, context) + else: + for i in issue_browse: + issue_obj.write(self._cr, self._uid, issue_search, {'state': 'transfered'}) + avail = i.name.available_copies - 1 + product_obj.write(self._cr, self._uid, i.name.id, {'available_copies': avail}, context) + return True + + +class account_wizard(models.Model): + _inherit = 'account.voucher' + + def button_proforma_voucher(self, cr, uid, ids, context=None): + active_id = context.get('active_ids') + self.pool.get('account.invoice').write(cr, uid, active_id, {'state': 'paid'}) + account_obj = self.pool.get('account.invoice').browse(cr, uid, active_id) + for i in account_obj.invoice_line: + issue = i.name + issue_obj = self.pool.get('library.book.issue') + issue_search = issue_obj.search(cr, uid, [('issue_code', '=', issue)]) + for i in issue_search: + issue_obj.write(cr, uid, i, {'state': 'paid'}) + return {'type': 'ir.actions.act_window_close'} diff --git a/library_management/registration.py b/library_management/registration.py new file mode 100644 index 000000000..c44f354a3 --- /dev/null +++ b/library_management/registration.py @@ -0,0 +1,244 @@ +from openerp import models, fields, api +import openerp +from datetime import datetime,time,date,timedelta +from openerp.tools.translate import _ +from openerp.exceptions import Warning +from openerp.tools import image_colorize, image_resize_image_big + + +class library_registratin(models.Model): + _name = "library.registration" + _rec_name = 'name' + validity = fields.Many2one('library.validity', 'Validity') + from_id = fields.Date(string='Valid From') + to = fields.Date(string='Valid To', compute='compute_valid_to') + notes = fields.Text('Notes') + photo = fields.Binary('Photo') + name = fields.Many2one('res.partner', string='Member', size=64, required=True) + card_no = fields.Char(string='Card No', size=64, readonly=True, help='Unique Card No', copy=False) + registration_date = fields.Date('Registration Date') + phone = fields.Char('Phone', size=12) + mobile = fields.Char('Mobile', size=12) + state = fields.Selection([('draft', 'Draft'), ('registered', 'Registered'),('assigned_card', 'Card Assigned'), ('cancel', 'Cancel')]) + user = fields.Char("Position") + book_limit = fields.Integer("Book Limit", required=True) + _sql_constraints = [('card_no.unique', 'unique(card_no)', 'already existing request id. try another ID')] + _defaults = { + 'card_no': lambda obj, cr, uid, context: 'Registration no', + 'state': 'draft', + 'photo': lambda self, cr, uid, ctx: self._get_default_image(cr, uid, ctx.get('default_is_company', False), ctx), + } + + @api.depends('from_id', 'validity') + def compute_valid_to(self): + if self.validity: + days = 0 + if self.validity.year: + days += self.validity.year*365 + if self.validity.month: + days += self.validity.month*30 + if self.validity.day: + days += self.validity.day + from_id = datetime.strptime(str(self.from_id), '%Y-%m-%d') + to = from_id + timedelta(days=days) + self.to = to + + def unlink(self, cr, uid, ids, context=None): + reg_obj = self.browse(cr, uid, ids) + issue_obj = self.pool.get('library.book.issue') + search_obj = issue_obj.search(cr, uid, []) + for reg in reg_obj: + for i in search_obj: + if issue_obj.browse(cr, uid, i).user == reg.name: + raise Warning(_("Warning"), _("Deletion unsuccessful."), + _("User have some book issues. Delete those records first!!")) + super(library_registratin, self).unlink(cr, uid, ids, context) + + def create(self, cr, uid, values, context=None): + if values.get('card_no', _('Registration no')) == _('Registration no'): + values['card_no'] = self.pool.get('ir.sequence').get(cr, uid, 'reg.no') + return super(library_registratin, self).create(cr, uid, values, context=context) + + def _registered_user_manager(self, cr, uid, context=None): + today = date.today() + reg_obj = self.pool.get('library.registration') + late_ids = reg_obj.search(cr, uid, [('to', '<', today)]) + for i in late_ids: + reg_obj.write(cr, uid, i, {'state': 'cancel'}) + + def _get_default_image(self, cr, uid, is_company, context=None, colorize=False): + image = image_colorize(open(openerp.modules.get_module_resource('base', 'static/src/img', 'avatar.png')).read()) + return image_resize_image_big(image.encode('base64')) + + def getdata(self, cr, uid, ids, name, context=None): + reg_obj = self.pool.get('library.registration') + reg_user_registered = reg_obj.search(cr, uid, [('name', '=', name), ('state', '=', 'registered')]) + length_registered = len(reg_user_registered) + reg_user_assigned_card = reg_obj.search(cr, uid, [('name', '=', name), ('state', '=', 'assigned_card')]) + length_assigned_card = len(reg_user_assigned_card) + reg_user_cancel = reg_obj.search(cr, uid, [('name', '=', name), ('state', '=', 'cancel')]) + length_cancel = len(reg_user_cancel) + reg_user_draft = reg_obj.search(cr, uid, [('name', '=', name), ('state', '=', 'draft')]) + length_draft = len(reg_user_draft) + if length_draft == 1: + return {'value': {'name': " "}, 'warning': {'title': 'Warning', + 'message': 'User already have a record for registration in draft state'}} + if length_cancel == 1: + return {'value': {'name': " "}, 'warning': {'title': 'Warning', + 'message': 'User already have a record for registration in cancel state'}} + if length_assigned_card == 1 or length_registered == 1: + return {'value': {'name': " "}, 'warning': {'title': 'Warning', + 'message': 'User already have a record for registration'}} + obj = self.pool.get('res.partner') + rec = obj.browse(cr, uid, name, context=None) + for i in rec: + return {'value': {'mobile': i.mobile, 'phone': i.phone}} + + def register(self, cr, uid, ids, context=None): + # flag = 0 + pool_reg = self.pool.get('library.registration') + pool_partner = self.pool.get('res.partner') + lib_rec = pool_reg.browse(cr, uid, ids, context=None) + child_name = lib_rec.name.id + res_part_browse1 = pool_partner.browse(cr, uid, [child_name], context=None) + if res_part_browse1.librarian == True: + raise Warning(_("Warning"), _("Already registered...")) + else: + reg_date = date.today() + a = timedelta(days=365) + b = reg_date + a + self.write(cr, uid, ids, {'registration_date': reg_date, 'state': 'registered', + 'from_id': reg_date, 'to': b}, context=context) + res_part_browse1.write({'librarian': True }) + + def create_card(self, cr, uid, ids, context=None): + card_obj = self.pool.get('library.card') + for i in self.browse(cr, uid, ids): + username = i.name + card_ids = card_obj.search(cr, uid, [('id', '=', i.id), ('have_valid_card', '=', True)]) + if len(card_ids) > 0: + raise Warning(_("Warning"), _("Already the user have a card !")) + vals = { + 'username': username.id, + 'book_limit': i.book_limit + } + new_card_id = card_obj.create(cr, uid, vals) + self.write(cr, uid, ids, {'state': 'assigned_card'}, context=context) + obj_data = self.pool.get('ir.model.data') + data_id = obj_data._get_id(cr, uid, 'library_management', 'product_card_form_view') + data = obj_data.browse(cr, uid, data_id, context=context) + view_id = data.res_id + card_rec = card_obj.browse(cr, uid, new_card_id, context=context) + card_obj.write(cr, uid, card_rec.id, {'have_valid_card': True}, context=context) + return { + 'name': _("New card"), + 'view_mode': 'form', + 'view_id': [view_id], + 'view_type': 'form', + 'res_model': 'library.card', + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'res_id': new_card_id, + 'target': 'current', + 'context': {} + } + + def cancel(self, cr, uid, ids, context=None): + user_issue = self.browse(cr,uid,ids).name.id + pool_partner = self.pool.get('res.partner') + res_part_browse1 = pool_partner.browse(cr, uid, user_issue, context=None) + res_part_browse1.write({'librarian': False }) + card_obj = self.pool.get('library.card') + card_search = card_obj.search(cr, uid, [('username', '=', user_issue)]) + for i in card_search: + card_rec = card_obj.browse(cr, uid, i) + card_obj.write(cr, uid, card_rec.id, {'have_valid_card': False}, context=context) + # self.unlink(cr, uid, ids, context=context) + self.write(cr, uid, ids, {'state': 'cancel'}, context=context) + return True + # pool_issue = self.pool.get('library.book.issue') + # pool_card = self.pool.get('library.card') + # issues = pool_issue.search(cr, uid, [('user', '=', user_issue)]) + # for items in issues: + # book = pool_issue.browse(cr, uid, items).issue_code + # if pool_issue.browse(cr, uid, items).state =='transfered': + # raise Warning(_("Warning"), _("Please return book before cancelling registration"), + # _("Issue no:"), book) + # if pool_issue.browse(cr, uid, items).state =='return': + # raise Warning(_("Warning"), _("Please pay fine of the returned book before cancelling registration"), + # _("Issue no:"), book) + # if pool_issue.browse(cr, uid, items).state =='lost': + # raise Warning(_("Warning"), _("Please pay fine of the losted book before cancelling registration"), + # _("Issue no:"), book) + # if pool_issue.browse(cr, uid, items).state =='reissue': + # raise Warning(_("Warning"), _("Please return the book before cancelling registration"), + # _("Issue no:"), book) + # cr.execute('DELETE FROM library_book_issue WHERE id = %s', ([items])) + # card = pool_card.search(cr, uid, [('username', '=', user_issue)]) + # for i in card: + # cr.execute('DELETE FROM library_card WHERE id = %s', ([i])) + + def draft(self, cr, uid, ids, context=None): + self.write(cr, uid, ids, {'state': 'draft'}, context=context) + return True + + def renew(self, cr, uid, ids, context=None): + reg_date = date.today() + a = timedelta(days=365) + b = reg_date + a + self.write(cr, uid, ids, {'registration_date': reg_date, 'state': 'assigned_card', + 'from_id': reg_date, 'to': b}, context=context) + + +class user_user(models.Model): + _name = "res.partner" + _inherit = 'res.partner' + position = fields.Selection([('student', 'Student'), ('teacher', 'Teacher'), ('other', 'Other')], + 'Position', required=True) + reader = fields.Boolean('Reader', help="Check this box if this contact is a reader.", default=True) + _defaults = { + 'image': lambda self, cr, uid, ctx: self._get_default_image(cr, uid, ctx.get('default_is_company', False), ctx) + } + + def _get_default_image(self, cr, uid, is_company, context=None, colorize=False): + image = image_colorize(open(openerp.modules.get_module_resource('base', 'static/src/img', 'avatar.png')).read()) + return image_resize_image_big(image.encode('base64')) + + +class Wizard(models.TransientModel): + _name = 'book.report' + book = fields.Many2one('product.product', "Book") + rack = fields.Many2one("library.rack", 'Rack') + author = fields.Many2one("library.author", 'Author') + language = fields.Many2one('product.lang', 'Language') + catag = fields.Many2one('library.price.category', "Book category") + + def confirmfilter(self, cr, uid, ids, context=None): + i = self.browse(cr, uid, ids, context=None) + book_name = i.book.name + rack = i.rack.name + author_name = i.author.name + lang = i.language.name + catag = i.catag.name + dom = [('book', '=', True)] + if book_name != False: + dom = [('name', '=', book_name)] + if rack != False: + dom.append(('rack', '=', rack)) + if author_name != False: + dom.append(('author', '=', author_name)) + if lang != False: + dom.append(('lang', '=', lang)) + if catag != False: + dom.append(('book_cat', '=', catag)) + + return { + 'type': 'ir.actions.act_window', + 'name': 'FILTERED BOOKS', + 'view_type': 'tree', + 'view_mode': 'tree', + 'res_model': 'product.product', + 'target': 'current', + 'domain': dom + } + diff --git a/library_management/report.xml b/library_management/report.xml new file mode 100644 index 000000000..72c23c0e9 --- /dev/null +++ b/library_management/report.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/library_management/report/__init__.py b/library_management/report/__init__.py new file mode 100644 index 000000000..8c7f0de15 --- /dev/null +++ b/library_management/report/__init__.py @@ -0,0 +1 @@ +import report_invoice_parser \ No newline at end of file diff --git a/library_management/report/report_invoice_parser.py b/library_management/report/report_invoice_parser.py new file mode 100644 index 000000000..a7bc15709 --- /dev/null +++ b/library_management/report/report_invoice_parser.py @@ -0,0 +1,34 @@ +from openerp import models +from openerp.report import report_sxw +from datetime import date +class report_lib(report_sxw.rml_parse): + _name = 'report.library_management.report_invoice_library' + def __init__(self, cr, uid, name, context=None): + if context is None: + context = {} + super(report_lib, self).__init__(cr, uid, name, context = context) + self.localcontext.update({ + 'timee':self._timee, + 'get_data': self._get_data, + + }) + def _timee(self,data): + date_now=date.today().strftime('%Y-%m-%d') + return date_now + + def _get_data(self,issue_code): + acc_obj=self.pool.get('account.invoice.line') + search = acc_obj.search(self.cr,self.uid,[('name', '=', issue_code)]) + var = acc_obj.browse(self.cr, self.uid, search) + descri = var.name + product = var.product_id + quant = var.quantity + price = var.price_unit + subtotal = var.price_subtotal + return {'descri': descri, 'product': product.name,'quant': quant,'price': price,'subtotal': subtotal} + +class report_lib_invoice(models.AbstractModel): + _name = 'report.library_management.report_invoice_library' + _inherit = 'report.abstract_report' + _template = 'library_management.report_invoice_library' + _wrapped_report_class = report_lib \ No newline at end of file diff --git a/library_management/res_config.py b/library_management/res_config.py new file mode 100644 index 000000000..1c9c83f38 --- /dev/null +++ b/library_management/res_config.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +from openerp import SUPERUSER_ID +from openerp.tools.translate import _ +from openerp.osv import fields, osv + + +class PropertyConfigSettings(osv.TransientModel): + _name = 'library.config.settings' + _inherit = 'res.config.settings' + + def _default_company(self, cr, uid, context=None): + user = self.pool.get('res.users').browse(cr, uid, uid, context=context) + return user.company_id.id + + _columns = { + 'store': fields.many2one('stock.warehouse', _('Library Store'), help=_('Account used for Library Configuration')), + 'account_id': fields.many2one('account.account', _('Library Account'), + domain="[('type', '=', 'receivable')]", + help=_('Account used for Library Configuration')), + 'fine_per_day': fields.float(_('Fine per day')), + + } + + def get_default_store(self, cr, uid, ids, context=None): + ir_values = self.pool.get('ir.values') + store = ir_values.get_default(cr, uid, 'library.config.settings', 'store') + return { + 'store': store, + } + + def set_store(self, cr, uid, ids, context=None): + ir_values = self.pool.get('ir.values') + wizard = self.browse(cr, uid, ids)[0] + if wizard.store: + store = wizard.store + ir_values.set_default(cr, SUPERUSER_ID, 'library.config.settings', 'store', store.id) + else: + store = False + ir_values.set_default(cr, SUPERUSER_ID, 'library.config.settings', 'store', store) + + def get_default_account_id(self, cr, uid, ids, context=None): + ir_values = self.pool.get('ir.values') + account_id = ir_values.get_default(cr, uid, 'library.config.settings', 'account_id') + return { + 'store': account_id, + } + + def set_account_id(self, cr, uid, ids, context=None): + ir_values = self.pool.get('ir.values') + wizard = self.browse(cr, uid, ids)[0] + if wizard.account_id: + account_id = wizard.account_id + ir_values.set_default(cr, SUPERUSER_ID, 'library.config.settings', 'account_id', account_id.id) + else: + account_id = False + ir_values.set_default(cr, SUPERUSER_ID, 'library.config.settings', 'account_id', account_id) + + def get_default_fine_per_day(self, cr, uid, ids, context=None): + ir_values = self.pool.get('ir.values') + fine_per_day = ir_values.get_default(cr, uid, 'library.config.settings', 'fine_per_day') + return { + 'store': fine_per_day, + } + + def set_fine_per_day(self, cr, uid, ids, context=None): + ir_values = self.pool.get('ir.values') + wizard = self.browse(cr, uid, ids)[0] + if wizard.fine_per_day: + fine_per_day = wizard.fine_per_day + ir_values.set_default(cr, SUPERUSER_ID, 'library.config.settings', 'fine_per_day', fine_per_day) + else: + fine_per_day = 0.0 + ir_values.set_default(cr, SUPERUSER_ID, 'library.config.settings', 'store',fine_per_day) \ No newline at end of file diff --git a/library_management/res_config_view.xml b/library_management/res_config_view.xml new file mode 100644 index 000000000..dbfbb6e26 --- /dev/null +++ b/library_management/res_config_view.xml @@ -0,0 +1,53 @@ + + + + + Library settings + library.config.settings + +
+
+
+ + + + +
+
+ + + Configure library + ir.actions.act_window + library.config.settings + form + inline + + + +
+
diff --git a/library_management/security/ir.model.access.csv b/library_management/security/ir.model.access.csv new file mode 100644 index 000000000..c1d2b0965 --- /dev/null +++ b/library_management/security/ir.model.access.csv @@ -0,0 +1,29 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink +access_library_registration,access_library_registration,model_library_registration,Administrator_group,1,1,1,1 +access_library_card,access_library_card,model_library_card,Administrator_group,1,1,1,1 +access_library_author,access_library_author,model_library_author,Administrator_group,1,1,1,1 +access_library_publisher,access_library_publisher,model_library_publisher,Administrator_group,1,1,1,1 +access_product_product,access_product_product,model_product_product,Administrator_group,1,1,1,1 +access_res_partnerr,access_res_partnerr,model_res_partner,Administrator_group,1,1,1,1 +access_stock_change_product_qty,access_stock_change_product_qty,model_stock_change_product_qty,Administrator_group,1,1,1,1 +access_library_rack,access_library_rack,model_library_rack,Administrator_group,1,1,1,1 +access_product_lang,access_product_lang,model_product_lang,Administrator_group,1,1,1,1 +access_library_book_returnday,access_library_book_returnday,model_library_book_returnday,Administrator_group,1,1,1,1 +access_library_price_category,access_library_price_category,model_library_price_category,Administrator_group,1,1,1,1 +access_library_book_issue,access_library_book_issue,model_library_book_issue,Administrator_group,1,1,1,1 +access_library_registration1,access_library_registration1,model_library_registration,librarian_group,1,1,1,1 +access_book_report1,access_book_report1,model_book_report,librarian_group,1,1,1,1 +access_library_card1,access_library_card1,model_library_card,librarian_group,1,1,1,1 +access_library_rack1,access_library_rack1,model_library_rack,librarian_group,1,1,1,1 +access_product_lang1,access_product_lang1,model_product_lang,librarian_group,1,1,1,1 +access_library_book_returnday1,access_library_book_returnday1,model_library_book_returnday,librarian_group,1,1,1,1 +access_library_price_category1,access_library_price_category1,model_library_price_category,librarian_group,1,1,1,1 +access_library_book_issue1,access_library_book_issue1,model_library_book_issue,librarian_group,1,1,1,1 +access_library_author1,access_library_author1,model_library_author,librarian_group,1,1,1,1 +access_library_publisher1,access_library_publisher1,model_library_publisher,librarian_group,1,1,1,1 +access_product_product1,access_product_product1,model_product_product,librarian_group,1,1,1,1 +access_res_partnerr1,access_res_partnerr1,model_res_partner,librarian_group,1,1,1,1 +access_stock_change_product_qty1,access_stock_change_product_qty1,model_stock_change_product_qty,librarian_group,1,1,1,1 +access_stock_transfer_details,access_stock_transfer_details,model_stock_transfer_details,,1,1,1,1 +access_library_validity,access_library_validity,model_library_validity,Administrator_group,1,1,0,0 + diff --git a/library_management/security/library.account.config.csv b/library_management/security/library.account.config.csv new file mode 100644 index 000000000..056f4f5c7 --- /dev/null +++ b/library_management/security/library.account.config.csv @@ -0,0 +1,2 @@ +"id" +library_account_config_1 \ No newline at end of file diff --git a/library_management/security/library.fine.per.day.conf.csv b/library_management/security/library.fine.per.day.conf.csv new file mode 100644 index 000000000..6c89fd112 --- /dev/null +++ b/library_management/security/library.fine.per.day.conf.csv @@ -0,0 +1,2 @@ +"id" +library_fine_per_day_conf_1 \ No newline at end of file diff --git a/library_management/security/library.store.conf.csv b/library_management/security/library.store.conf.csv new file mode 100644 index 000000000..5c74bb61b --- /dev/null +++ b/library_management/security/library.store.conf.csv @@ -0,0 +1,2 @@ +"id" +library_store_conf_1 \ No newline at end of file diff --git a/library_management/static/description/icon.png b/library_management/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..74f71b59ef18d05baa9fac21ad5ccf4653590e9c GIT binary patch literal 4685 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 + + + + + + + + + Rack + library.rack + + + + Rack + library.rack + RACK + 3 + + + + library.rack.form + library.rack + +
+ + + + + + + + + + + + + + + + + + + +
+
+
+ + + + library.rack.tree + library.rack + + + + + + + + + + + + library.rack.search + library.rack + + + + + + + + + + + + Library Rack + ir.actions.act_window + library.rack + form + tree,form + + + Language + product.lang + + + + Language + product.lang + L + 3 + + + + Languages + product.lang + ir.actions.act_window + form + tree,form + + + product.lang.tree + product.lang + + + + + + + + + + + + + product.lang.form + product.lang + +
+ + + + + + + + + + + + + + + + + + + +
+
+
+ + returnday + library.book.returnday + + + + returnday + library.book.returnday + D + 3 + + + Book Return Days + library.book.returnday + ir.actions.act_window + form + tree,form + + + library.book.returnday.search + library.book.returnday + + + + + + + + + + library.book.returnday.tree + library.book.returnday + + + + + + + + + + + + library.book.returnday.form + library.book.returnday + +
+ + + + + + + + +
+
+
+ + authors + library.author + + + + Book category + library.author + A + 3 + + + Authors + library.author + ir.actions.act_window + form + tree,form + + + + library.author.form + library.author + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + Book category + library.price.cat + + + + Book category + library.price.cat + CAT + 3 + + + Price Category + ir.actions.act_window + library.price.category + form + tree,form + + + library.price.category + library.price.category + + + + + + + + + + + library.price.category + library.price.category + +
+ + + + + + + + + + + + + + + + + + +
+
+
+ + + publisher + library.publisher + + + + publisher + library.publisher + P + 3 + + + Books + library.books + + + + Books + library.books + B + 3 + + + Books + product.product + ir.actions.act_window + form + tree,form + [('book','=',True)] + {'search_default_book':1, 'default_book': True} + + + + + + library.book.issue.search.1 + library.book.issue + + + + + + + + + + + + + + + + Book Issues + library.book.issue + tree,form + form + + + + library.book.issue.tree + library.book.issue + + + + + + + + + + + + + + + + library.book.issue.form + library.book.issue + +
+
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + Library Card No + library.card + + + + Library Card No + library.card + C + 1 + 3 + + + + Book issues + library.book.issue + + + + Book issues + library.book.issue + ISSUE + 3 + + + Card Details + library.card + tree,form + [('have_valid_card','=','True')] + + + library.card.tree + library.card + + + + + + + + + + + library.validity.form + library.validity + +
+ + + + + + + + + + + + + + +
+
+
+ + library.validity.tree + library.validity + + + + + + + + + + Validity + library.validity + + + Book category + library.validity + VAL + 3 + + + Validity + ir.actions.act_window + library.validity + form + tree,form + + + + + library.card.form + library.card + +
+ + + + + + + + + + + + + + +
+
+
+ + Library Card No + library.card + + + + Library Card No + library.card + C + 1 + 3 + + + Book Reports + ir.actions.act_window + book.report + tree,form + + + book report + book.report + form + +
+ + + + + + + + + + + +
+
+
+
+
+ + + + Available Books + ir.actions.act_window + product.product + tree + tree + [('available_copies','>',0)] + + + Book Holdings + ir.actions.act_window + library.book.issue + tree + tree + [('state','=','transfered')] + + + product.product.form + product.product + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + product.product.tree + product.product + + + + + + + + + + + + + + + + + + + + + product.product.tree + product.product + + + + 1 + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
diff --git a/library_management/view/registration.xml b/library_management/view/registration.xml new file mode 100644 index 000000000..a92a9eb68 --- /dev/null +++ b/library_management/view/registration.xml @@ -0,0 +1,130 @@ + + + + + Librarian group + + + Librarian + + + + Administrator + + + + + + + + + Reg Number + reg.no + + + + Reg Number + reg.no + R + 3 + + + + + Registered users Manager + + + 1 + days + -1 + + library.registration + _registered_user_manager + () + + + + + Library Reminder + + + 1 + days + -1 + + library.book.issue + _library_reminder + () + + + + + library.registration.form.1 + library.registration + +
+
+
+ + + + +
+

+ +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + library.registration.tree.1 + library.registration + + + + + + + + + +
+
+ diff --git a/library_management/view/report_invoice.xml b/library_management/view/report_invoice.xml new file mode 100644 index 000000000..ec4f686af --- /dev/null +++ b/library_management/view/report_invoice.xml @@ -0,0 +1,70 @@ + + + + + + diff --git a/library_management/view/user_view.xml b/library_management/view/user_view.xml new file mode 100644 index 000000000..c87571e56 --- /dev/null +++ b/library_management/view/user_view.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + Registration Form + library.registration + form + + tree,form + + + + + + + + + + + + + + + Members + res.partner + ir.actions.act_window + form + tree,form + [('librarian','=','True')] + + + +