You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
244 lines
12 KiB
244 lines
12 KiB
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
|
|
}
|
|
|
|
|