Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- from odoo import models, fields, api, exceptions, _
- from datetime import datetime
- from dateutil.relativedelta import relativedelta
- from odoo.exceptions import ValidationError
- import werkzeug
- class PucWireman(models.Model):
- _name = 'puc.wireman'
- _inherit = ['mail.thread', 'mail.activity.mixin']
- _description = "Wireman Profile"
- _order = "last_name"
- #Added a contraint to prevent ID Number from Changing.
- @api.constrains('id_number')
- def _check_id_number(self):
- for record in self:
- if record.status == 'approved' and record.id_number != record._origin.id_number:
- raise ValidationError('Cannot modify id_number for approved wireman.')
- @api.model
- def create(self, values):
- record = super(PucWireman, self).create(values)
- if 'id_number' not in values or values['id_number'] == '/':
- sequence = self.env['ir.sequence'].search(
- [('prefix', '=', record.wireman_type_id.code)])
- if record.wireman_type_id.code:
- record.id_number = sequence.next_by_id()
- record.phone = record.mobile_telephone_no
- return record
- def write(self, values):
- if 'id_number' not in values or values['id_number'] == '/':
- if 'wireman_type_id' in values:
- code = self.env['puc.wireman.types'].search([
- ('id', '=', values['wireman_type_id'])]).code
- sequence = self.env['ir.sequence'].search(
- [('prefix', '=', code)])
- values['id_number'] = sequence.next_by_id()
- if not self.partner_id:
- partner_id = self.env['res.partner'].create({
- 'is_company': False,
- 'company_id': self.company_id.id,
- 'name': self.name,
- 'email': self.email,
- 'phone': self.home_telephone_no,
- 'mobile': self.mobile_telephone_no,
- 'street': self.street,
- 'street2': self.street2,
- 'city': self.major_city_id.name,
- 'country_id': self.country_id.id
- })
- values['partner_id'] = partner_id
- record = super(PucWireman, self).write(values)
- return record
- @api.model
- def _get_languages(self):
- return self.env['res.lang'].get_installed()
- def open_submission(self):
- self.ensure_one()
- return {
- 'type': 'ir.actions.act_window',
- "name": "Submission",
- 'view_mode': 'tree,form',
- 'view_type': 'form',
- "res_model": "puc.submission",
- "domain": [('puc_wireman_id', '=', self.id)],
- "context": {'default_puc_wireman_id': self.id}
- }
- def get_submission(self):
- for line in self:
- line.submission_count = self.env['puc.submission'].search_count([
- ('puc_wireman_id', '=', line.id)])
- @api.onchange('district_id')
- def onchange_district_id(self):
- for rec in self:
- return {'domain': {'village_id': [
- ('district_id', '=', rec.district_id.id)]}}
- def _default_officer(self):
- user = self.env.user
- officer = self.env['hr.employee'].search([('user_id', '=', user.id)])
- return officer
- def _default_wireman_type_id(self):
- wireman_type_id = self.env.ref('wireman.first_wireman_type').id
- return wireman_type_id
- submission_count = fields.Integer(string='Submission',
- compute='get_submission')
- name = fields.Char('Name', size=128, required=True, tracking=True)
- last_name = fields.Char('Last Name', compute='_compute_last_name',
- store=True)
- street = fields.Char('Street 1', tracking=True)
- street2 = fields.Char('Street 2', track_visibility='onchange',
- tracking=True)
- telephone_no = fields.Char(string="Telephone No.", required=False,
- tracking=True)
- zip = fields.Char('Zip', track_visibility='onchange', tracking=True)
- village_id = fields.Many2one('puc.village', 'Village', tracking=True)
- city_id = fields.Many2one('puc.city', 'City', tracking=True)
- major_city_id = fields.Many2one('puc.major.city', 'Major City',
- tracking=True)
- major_town_id = fields.Many2one('puc.majortown', 'Major Town',
- tracking=True)
- district_id = fields.Many2one('puc.district', 'District', tracking=True)
- state_id = fields.Many2one('res.country.state', 'State', tracking=True)
- country_id = fields.Many2one('res.country', string="Country", tracking=True)
- active = fields.Boolean(default=True)
- state = fields.Selection(selection=[('active', 'Active'),
- ('inactive', 'In Active'),
- ('expired', 'Expired'),
- ('cancel', 'Cancelled')],
- string='Status', copy=False, tracking=True,
- index=True,
- default='active')
- user_id = fields.Many2one('res.users', string='User', tracking=True)
- place_of_birth = fields.Char(string="Place of Birth", required=False,
- tracking=True)
- date = fields.Date(string='Date', default=fields.Date.today(),
- tracking=True)
- birth_date = fields.Date('Birth Date', tracking=True)
- blood_group = fields.Selection(
- [('A+', 'A+ve'), ('B+', 'B+ve'), ('O+', 'O+ve'), ('AB+', 'AB+ve'),
- ('A-', 'A-ve'), ('B-', 'B-ve'), ('O-', 'O-ve'), ('AB-', 'AB-ve')],
- 'Blood Group', tracking=True)
- email = fields.Char('E-Mail', tracking=True)
- license_category_id = fields.Many2one('puc.wireman.types',
- compute='_compute_license_category',
- string="License Category", )
- application_fee_paid = fields.Char(string="Application Fee Paid",
- tracking=True)
- application_cash_receipt_no = fields.Char(string="Cash Receipt No",
- tracking=True)
- application_paid_date = fields.Date('Paid Date', tracking=True)
- exam_date = fields.Date('Date Of Exam', tracking=True)
- passed = fields.Char('Passed', tracking=True)
- failed = fields.Char('Failed', tracking=True)
- comments = fields.Text('Remarks', tracking=True)
- license_fee_paid = fields.Char(string="License Fee Paid", tracking=True)
- license_cash_receipt_no = fields.Char(string="License Cash Receipt No",
- tracking=True)
- license_paid_date = fields.Date('Paid Date', tracking=True)
- serial_no = fields.Char(string='Serial No', tracking=True)
- issued_type = fields.Selection([('first_issue', 'First Issue'),
- ('renewal', 'Renewal')], tracking=True)
- expiry_date = fields.Date('Expiry Date', compute='_compute_expiry_date',
- readonly=False, store=True, tracking=True)
- valid_police_record_ids = fields.Many2many('ir.attachment',
- relation="m2m_ir_police_record_rel",
- column1="m2m_id",
- column2="attachment_id",
- string="Valid Police Record", tracking=True)
- diploma_ids = fields.Many2many('ir.attachment',
- relation="m2m_ir_diploma_rel",
- column1="m2m_id",
- column2="attachment_id", string="Diploma", tracking=True)
- certificate_ids = fields.Many2many('ir.attachment',
- relation="m2m_ir_certificate_rel",
- column1="m2m_id",
- column2="attachment_id",
- string="Certificates", tracking=True)
- reference_ids = fields.Many2many('ir.attachment',
- relation="m2m_ir_reference_rel",
- column1="m2m_id",
- column2="attachment_id",
- string="References", tracking=True)
- other_doc_ids = fields.Many2many('ir.attachment',
- relation="m2m_ir_other_rel",
- column1="m2m_id",
- column2="attachment_id",
- string="Other Documents", tracking=True)
- lang = fields.Selection(selection='_get_languages', string='Language',
- validate=False)
- gender = fields.Selection(
- [('male', 'Male'), ('female', 'Female'),
- ('other', 'Other')], 'Gender', required=True, tracking=True)
- place_of_birth = fields.Char(string="Place of Birth", required=False,
- tracking=True)
- nationality_id = fields.Many2one('puc.wireman.nationality', 'Nationality',
- tracking=True)
- emergency_contact_person = fields.Char(
- 'Emergency Contact', required=False, tracking=True)
- emergency_contact_no = fields.Char(
- 'Emergency Contact.No', required=False, tracking=True)
- identification_type = fields.Selection(
- [('passport', 'Passport'), ('social', 'Social Security'), ('drivers', 'Drivers License'),
- ], string="Identification Type",
- tracking=True)
- identification_info = fields.Char('Identification No.', size=64,
- tracking=True)
- id_number = fields.Char('ID Card Number', size=64, tracking=True)
- image_1920 = fields.Binary('Image', track_visibility='onchange',
- required=True)
- eye_color = fields.Selection(
- [('hazel', 'Hazel'), ('light brown', 'Light Brown'),
- ('medium brown', 'Medium Brown'), ('dark brown', 'Dark Brown'),
- ('green', 'Green'), ('light blue', 'Light Blue'), ('blue', 'Blue'),
- ('violet', 'Violet'), ('gray', 'Gray')], string="Eye Color",
- required=False, tracking=True)
- height = fields.Char(string="Height", required=False, tracking=True)
- place_of_employment = fields.Char(string="Place of Employment",
- required=False, tracking=True)
- wireman_experience = fields.Selection(
- [('1-5', '1-5'), ('6-10', '6-10'), ('11-15', '11-15'),
- ('16+', '16+')], required=False, string="Experience (Years)",
- tracking=True)
- wireman_academic_id = fields.Many2one('puc.wireman.education',
- tracking=True)
- #wireman_type_id = fields.Many2one('puc.wireman.types', tracking=True,
- # readonly=True,
- wireman_type_id = fields.Many2one('puc.wireman.types', tracking=True,
- readonly=False,
- default=_default_wireman_type_id)
- wireman_license_no = fields.Char(string="License No.",
- tracking=True, required=False)
- date_issued = fields.Date('Date Issued', tracking=True)
- date_expires = fields.Date('Date Expires', compute='_compute_expiry_date',
- inverse='_inverse_expiry_date', store=True,
- readonly=False, tracking=True)
- wireman_license_seq = fields.Char(string="Wireman License No.",
- required=False, tracking=True)
- home_telephone_no = fields.Char(string="Telephone No.", required=False,
- tracking=True)
- mobile_telephone_no = fields.Char(string="Mobile No.", required=False,
- tracking=True)
- phone = fields.Char(string="Mobile No.", required=False, tracking=True)
- fax_no = fields.Char(string="Fax No.", required=False, tracking=True)
- gr_no = fields.Char("GR Number", size=20, tracking=True)
- category_id = fields.Many2one('puc.category', 'Category', tracking=True)
- submission_ids = fields.One2many('puc.submission', 'puc_wireman_id',
- string='Submissions')
- inspection_ids = fields.One2many('puc.inspection', 'construct_wireman_id',
- string='Inspections')
- submission_detail_ids = fields.One2many('puc.wireman.submission',
- 'wireman_id',
- 'Submission Details')
- company_id = fields.Many2one('res.company', 'Company', readonly=True,
- default=lambda self: self.env.user.company_id,
- tracking=True)
- exam_result = fields.Selection([('Passed', 'Passed'), ('Failed', 'Failed')],
- string='Exam Result', tracking=True)
- partner_id = fields.Many2one('res.partner', 'Partner', tracking=True)
- design_limit = fields.Char('Design Limit', tracking=True)
- installation_limit = fields.Char('Installation Limit', tracking=True)
- worksheet = fields.Binary('Worksheet', attachment=True)
- signature = fields.Binary('Signature', readonly=True)
- signed_by = fields.Many2one('res.users', readonly=True, tracking=True)
- is_admin = fields.Boolean(compute='compute_is_admin', default=True)
- license_request_ids = fields.One2many('puc.license.request', 'wireman_id')
- id_card_printed_ids = fields.One2many('puc.id.card.details', 'wire_man_id')
- id_printed_by = fields.Many2one('res.users', readonly=True)
- id_printed_on = fields.Datetime(readonly=True)
- def compute_is_admin(self):
- for rec in self:
- if self.env.user.has_group('wireman.group_puc_back_office_admin'):
- rec.is_admin = True
- else:
- rec.is_admin = False
- # if rec.birth_date == fields.date.today():
- # print('hey')
- @api.depends('name')
- def _compute_last_name(self):
- for rec in self:
- if rec.name:
- last_name = rec.name.split()
- rec.last_name = last_name[-1]
- @api.depends('wireman_type_id')
- def _compute_license_category(self):
- self.license_category_id = self.wireman_type_id
- @api.onchange('country_id')
- def onchange_country_id(self):
- nationality = self.env['puc.wireman.nationality'].search(
- [('country_id', '=', self.country_id.name)])
- self.nationality_id = nationality.id
- @api.constrains('birth_date')
- def _check_birthdate(self):
- for record in self:
- if record.birth_date and record.birth_date > fields.Date.today():
- raise ValidationError(_(
- "Birth Date can't be greater than current date!"))
- @api.model
- @api.depends('date_issued')
- def _compute_expiry_date(self):
- """Computing the expiration date"""
- today = fields.Date.today()
- for rec in self.env['puc.wireman'].search([]):
- if rec.date_issued:
- rec.expiry_date = rec.date_issued + relativedelta(years=1)
- rec.date_expires = rec.expiry_date
- r = relativedelta(today, rec.expiry_date)
- if rec.expiry_date >= today:
- rec.state = 'active'
- else:
- if rec.expiry_date < today:
- rec.state = 'inactive'
- r = relativedelta(today, rec.expiry_date)
- if r.months >= 1:
- rec.state = 'expired'
- elif r.years >= 2:
- rec.state = 'cancel'
- def _inverse_expiry_date(self):
- return True
- def _check_expiry(self):
- """Checking for the expiry date and changing the state to expired"""
- today = fields.Date.today()
- for rec in self.env['puc.wireman'].search([('active', '=', True),
- ('state', '=', 'active'),
- (
- 'expiry_date', '<',
- today)]):
- rec.state = 'inactive'
- # rec.active = False
- for rec in self.env['puc.wireman'].search([('active', '=', True), '|',
- ('state', '=', 'inactive'),
- ('state', '=',
- 'expired')]):
- r = relativedelta(today, rec.expiry_date)
- if r.months >= 1:
- rec.state = 'expired'
- if r.years >= 2:
- rec.state = 'cancel'
- @api.model
- def build_qr_code_url(self):
- base_url = self.env['ir.config_parameter'].sudo().get_param(
- 'web.base.url')
- base_url += '/wireman/profile/%s' % (self.id)
- return '/report/barcode/?' + werkzeug.urls.url_encode(
- {'type': 'QR', 'value': base_url, 'width': 45,
- 'height': 45, 'humanreadable': 1})
- def redirect_submission(self):
- return {
- 'type': 'ir.actions.act_window',
- 'name': 'Sale',
- 'view_mode': 'tree,form',
- 'res_model': 'puc.submission',
- 'domain': [('puc_wireman_id', '>=', self.id)],
- 'target': 'current',
- }
- def action_send(self, data):
- template = self.env['mail.template'].search(
- [('subject', '=', 'test123')])
- if template:
- mailvals = {
- 'subject': template.subject,
- 'body_html': template.body_html,
- 'email_to': data,
- 'email_from': "[email protected]",
- }
- s = self.env['mail.mail'].create(mailvals).send()
- def create_wireman_user(self):
- user_group = self.env.ref("base.group_portal") or False
- users_res = self.env['res.users']
- for record in self:
- if not record.user_id:
- user_id = users_res.create({
- 'name': record.name,
- 'partner_id': record.partner_id.id,
- 'login': record.email,
- 'password': record.birth_date,
- 'groups_id': user_group,
- 'tz': self._context.get('tz'),
- })
- message = _('%s has created a new User <br> for wire man %s',
- record.env.user.name, record.name)
- record.user_id = user_id
- record.message_post(
- body=message)
- class WiremanIDReport(models.AbstractModel):
- _name = 'report.wireman.report_wireman_id_card'
- _description = 'Wireman ID'
- def _get_report_values(self, docids, data=None):
- docs = self.env['puc.wireman'].browse(docids)
- for doc in docs:
- if not doc.signature or not doc.signed_by:
- raise exceptions.ValidationError('Please sign the Wireman ID')
- message = 'ID CARD printed <br/>' + '' \
- '<br> License Category : ' + str(
- doc.license_category_id.name) + '' \
- '<br> printed by : ' + str(
- self.env.user.name) + ' ' \
- '<br>Printed on:' + str(
- fields.datetime.now())
- doc.message_post(body=message)
- self.env['puc.id.card.details'].create({
- 'wire_man_id': doc.id,
- 'printed_by': self.env.user.id,
- 'printed_on': fields.datetime.now()
- })
- doc.write({
- 'id_printed_by': self.env.user.id,
- 'id_printed_on': fields.datetime.now()
- })
- return {
- 'doc_ids': docs.ids,
- 'doc_model': 'puc.wireman',
- 'docs': docs,
- }
- class PucWiremanSubmission(models.Model):
- _name = 'puc.wireman.submission'
- _description = 'Wireman Submission Details'
- wireman_id = fields.Many2one('puc.wireman', 'Wireman', ondelete="cascade")
- submission_id = fields.Many2one('puc.submission', 'Submission',
- required=False)
- batch_id = fields.Many2one('puc.batch', 'Batch', required=False)
- file_number = fields.Char('File Number')
- inspection_ids = fields.Many2many('puc.inspection', 'submission_id',
- string='Inspections')
- _sql_constraints = [
- ('unique_name_file_number_id',
- 'unique(file_number,submission_id,batch_id,wireman_id)',
- 'File Number & Wireman must be unique per Batch!'),
- ('unique_name_file_number_submission_id',
- 'unique(file_number,submission_id,batch_id)',
- 'File Number must be unique per Batch!'),
- ('unique_name_file_number_wireman_id',
- 'unique(wireman_id,submission_id,batch_id)',
- 'Wireman must be unique per Batch!'),
- ]
- class PucWiremanType(models.Model):
- _name = 'puc.wireman.types'
- name = fields.Char('Wireman Type')
- code = fields.Char('Code')
- sequence_prior = fields.Char(string="Sequence", copy=False, default='New')
- @api.model
- def create(self, values):
- print(values)
- sequence = self.env['ir.sequence'].create({
- 'code': 'wireman_sequence',
- 'name': 'Wireman sequence',
- 'implementation': 'no_gap',
- 'prefix': values['code'],
- 'padding': 5,
- })
- if values.get('sequence_prior', 'New') == 'New':
- values['sequence_prior'] = self.env['ir.sequence'].next_by_code(
- 'wireman_prior') or 'New'
- res = super(PucWiremanType, self).create(values)
- return res
- class PucWiremanNationality(models.Model):
- _name = 'puc.wireman.nationality'
- name = fields.Char(string='Nationality')
- country_id = fields.Char(string='Country')
- class PucWiremanEducation(models.Model):
- _name = 'puc.wireman.education'
- name = fields.Char(string='Education')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement