class ComputeOnchange(models.Model): _name = 'test_new_api.compute.onchange' _description = "Compute method as an onchange" active = fields.Boolean() foo = fields.Char() bar = fields.Char(compute='_compute_bar', store=True) baz = fields.Char(compute='_compute_baz', store=True, readonly=False) @api.depends('foo') def _compute_bar(self): for record in self: record.bar = record.foo @api.depends('active', 'foo') def _compute_baz(self): for record in self: if record.active: record.baz = record.foo
class ModelImage(models.Model): _name = 'test_new_api.model_image' _description = 'Test Image field' name = fields.Char(required=True) image = fields.Image() image_512 = fields.Image("Image 512", related='image', max_width=512, max_height=512, store=True, readonly=False) image_256 = fields.Image("Image 256", related='image', max_width=256, max_height=256, store=False, readonly=False) image_128 = fields.Image("Image 128", max_width=128, max_height=128)
class ComplexModel(models.Model): _name = model('complex') _description = 'Tests: Base Import Model Complex' f = fields.Float() m = fields.Monetary() c = fields.Char() currency_id = fields.Many2one('res.currency') d = fields.Date() dt = fields.Datetime()
class C(models.Model): _name = 'test_testing_utilities.c' _description = 'Testing Utilities C' name = fields.Char("name", required=True) f2 = fields.Many2one('test_testing_utilities.m2o') @api.onchange('f2') def _on_change_f2(self): self.name = self.f2.name
class PricelistItem(models.Model): _inherit = "product.pricelist.item" offer_msg = fields.Char( string="Offer Message", translate=True, help="To set the message in the product offer timer.") is_display_timer = fields.Boolean( string='Display Timer', help="It shows the product timer on product page.")
class PosPaymentMethod(models.Model): _inherit = 'pos.payment.method' def _get_payment_terminal_selection(self): return super(PosPaymentMethod, self)._get_payment_terminal_selection() + [ ('six_tim', 'SIX without IoT Box') ] six_terminal_ip = fields.Char('Six Terminal IP')
class EventAnswer(models.Model): _name = 'event.answer' _order = 'sequence,id' _description = 'Event Answer' name = fields.Char('Answer', required=True, translate=True) question_id = fields.Many2one('event.question', required=True, ondelete='cascade') sequence = fields.Integer(default=10)
class MergePartnerLine(models.TransientModel): _name = 'base.partner.merge.line' _description = 'Merge Partner Line' _order = 'min_id asc' wizard_id = fields.Many2one('base.partner.merge.automatic.wizard', 'Wizard') min_id = fields.Integer('MinID') aggr_ids = fields.Char('Ids', required=True)
class SlideTag(models.Model): """ Tag to search slides accross channels. """ _name = 'slide.tag' _description = 'Slide Tag' name = fields.Char('Name', required=True, translate=True) _sql_constraints = [ ('slide_tag_unique', 'UNIQUE(name)', 'A tag must be unique!'), ]
class CountryGroup(models.Model): _description = "Country Group" _name = 'res.country.group' name = fields.Char(required=True, translate=True) country_ids = fields.Many2many('res.country', 'res_country_res_country_group_rel', 'res_country_group_id', 'res_country_id', string='Countries')
class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' cal_client_id = fields.Char("Client_id", config_parameter='google_calendar_client_id', default='') cal_client_secret = fields.Char( "Client_key", config_parameter='google_calendar_client_secret', default='') server_uri = fields.Char('URI for tuto') @api.model def get_values(self): res = super(ResConfigSettings, self).get_values() get_param = self.env['ir.config_parameter'].sudo().get_param res.update(server_uri="%s/google_account/authentication" % get_param( 'web.base.url', default="http://yourcompany.harpiya.com"), ) return res
class IrExportsLine(models.Model): _name = 'ir.exports.line' _description = 'Exports Line' _order = 'id' name = fields.Char(string='Field Name') export_id = fields.Many2one('ir.exports', string='Export', index=True, ondelete='cascade')
class daughter(models.Model): _name = 'test.inherit.daughter' _description = 'Test Inherit Daughter' template_id = fields.Many2one('test.inherit.mother', 'Template', delegate=True, required=True, ondelete='cascade') field_in_daughter = fields.Char('Field1')
class HrWorkEntryType(models.Model): _name = 'hr.work.entry.type' _description = 'HR Work Entry Type' name = fields.Char(required=True) code = fields.Char(required=True) color = fields.Integer(default=0) sequence = fields.Integer(default=25) active = fields.Boolean( 'Active', default=True, help= "If the active field is set to false, it will allow you to hide the work entry type without removing it." ) _sql_constraints = [ ('unique_work_entry_code', 'UNIQUE(code)', 'The same code cannot be associated to multiple work entry types.'), ]
class ObjCateg(models.Model): _name = 'test_access_right.obj_categ' _description = "Context dependent searchable model" name = fields.Char(required=True) def search(self, args, **kwargs): if self.env.context.get('only_media'): args += [('name', '=', 'Media')] return super(ObjCateg, self).search(args, **kwargs)
class IrAttachment(models.Model): _inherit = "ir.attachment" local_url = fields.Char("Attachment URL", compute='_compute_local_url') image_src = fields.Char(compute='_compute_image_src') image_width = fields.Integer(compute='_compute_image_size') image_height = fields.Integer(compute='_compute_image_size') def _compute_local_url(self): for attachment in self: if attachment.url: attachment.local_url = attachment.url else: attachment.local_url = '/web/image/%s?unique=%s' % (attachment.id, attachment.checksum) @api.depends('mimetype', 'url', 'name') def _compute_image_src(self): for attachment in self: if attachment.mimetype not in ['image/gif', 'image/jpe', 'image/jpeg', 'image/jpg', 'image/gif', 'image/png', 'image/svg+xml']: attachment.image_src = False else: attachment.image_src = attachment.url or '/web/image/%s/%s' % ( attachment.id, url_quote(attachment.name or ''), ) @api.depends('datas') def _compute_image_size(self): for attachment in self: try: image = tools.base64_to_image(attachment.datas) attachment.image_width = image.width attachment.image_height = image.height except Exception: attachment.image_width = 0 attachment.image_height = 0 def _get_media_info(self): """Return a dict with the values that we need on the media dialog.""" self.ensure_one() return self.read(['id', 'name', 'mimetype', 'checksum', 'url', 'type', 'res_id', 'res_model', 'public', 'access_token', 'image_src', 'image_width', 'image_height'])[0]
class ModelA(models.Model): _name = "test_rpc.model_a" _description = "Model A" name = fields.Char(required=True) field_b1 = fields.Many2one("test_rpc.model_b", string="required field", required=True) field_b2 = fields.Many2one("test_rpc.model_b", string="restricted field", ondelete="restrict")
class Laptop(models.Model): _name = 'delegation.laptop' _description = 'Laptop' _inherits = { 'delegation.screen': 'screen_id', 'delegation.keyboard': 'keyboard_id', } name = fields.Char(string='Name') maker = fields.Char(string='Maker') # a Laptop has a screen screen_id = fields.Many2one('delegation.screen', required=True, ondelete="cascade") # a Laptop has a keyboard keyboard_id = fields.Many2one('delegation.keyboard', required=True, ondelete="cascade")
class mother(models.Model): _inherit = 'test.inherit.mother' field_in_mother = fields.Char() partner_id = fields.Many2one('res.partner') # extend the name field: make it required and change its default value name = fields.Char(required=True, default='Bar') # extend the selection of the state field, and discard its default value state = fields.Selection(selection_add=[('c', 'C')], default=None) # override the computed field, and extend its dependencies @api.depends('field_in_mother') def _compute_surname(self): for rec in self: if rec.field_in_mother: rec.surname = rec.field_in_mother else: super(mother, rec)._compute_surname()
class Tag(models.Model): _name = "note.tag" _description = "Note Tag" name = fields.Char('Tag Name', required=True, translate=True) color = fields.Integer('Color Index') _sql_constraints = [ ('name_uniq', 'unique (name)', "Tag name already exists !"), ]
class Inheritance0(models.Model): _name = 'inheritance.0' _description = 'Inheritance Zero' name = fields.Char() def call(self): return self.check("model 0") def check(self, s): return "This is {} record {}".format(s, self.name)
class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' gengo_private_key = fields.Char(string="Gengo Private Key", related="company_id.gengo_private_key", readonly=False) gengo_public_key = fields.Text(string="Gengo Public Key", related="company_id.gengo_public_key", readonly=False) gengo_comment = fields.Text(string="Comments", related="company_id.gengo_comment", help="This comment will be automatically be enclosed in each an every request sent to Gengo") gengo_auto_approve = fields.Boolean(string="Auto Approve Translation ?", related="company_id.gengo_auto_approve", readonly=False, help="Jobs are Automatically Approved by Gengo.") gengo_sandbox = fields.Boolean(string="Sandbox Mode", related="company_id.gengo_sandbox", readonly=False, help="Check this box if you're using the sandbox mode of Gengo, mainly used for testing purpose.")
class SaleOrderLine(models.Model): _inherit = 'sale.order.line' warning_stock = fields.Char('Warning') def _get_stock_warning(self, clear=True): self.ensure_one() warn = self.warning_stock if clear: self.warning_stock = '' return warn
class RepairTags(models.Model): """ Tags of Repair's tasks """ _name = "repair.tags" _description = "Repair Tags" name = fields.Char('Tag Name', required=True) color = fields.Integer(string='Color Index') _sql_constraints = [ ('name_uniq', 'unique (name)', "Tag name already exists!"), ]
class Sponsor(models.Model): _name = "event.sponsor" _description = 'Event Sponsor' _order = "sequence" event_id = fields.Many2one('event.event', 'Event', required=True) sponsor_type_id = fields.Many2one('event.sponsor.type', 'Sponsoring Type', required=True) partner_id = fields.Many2one('res.partner', 'Sponsor/Customer', required=True) url = fields.Char('Sponsor Website') sequence = fields.Integer('Sequence', store=True, related='sponsor_type_id.sequence', readonly=False) image_128 = fields.Image(string="Logo", related='partner_id.image_128', store=True, readonly=False)
class DemoFailure(models.TransientModel): """ Stores modules for which we could not install demo data """ _name = 'ir.demo_failure' _description = 'Demo failure' module_id = fields.Many2one('ir.module.module', required=True, string="Module") error = fields.Char(string="Error") wizard_id = fields.Many2one('ir.demo_failure.wizard')
class BlogTagCategory(models.Model): _name = 'blog.tag.category' _description = 'Blog Tag Category' _order = 'name' name = fields.Char('Name', required=True, translate=True) tag_ids = fields.One2many('blog.tag', 'category_id', string='Tags') _sql_constraints = [ ('name_uniq', 'unique (name)', "Tag category already exists !"), ]
class MailTestSMS(models.Model): """ A model inheriting from mail.thread with some fields used for SMS gateway, like a partner, a specific mobile phone, ... """ _description = 'Chatter Model for SMS Gateway' _name = 'mail.test.sms' _inherit = ['mail.thread'] _order = 'name asc, id asc' name = fields.Char() subject = fields.Char() email_from = fields.Char() phone_nbr = fields.Char() mobile_nbr = fields.Char() customer_id = fields.Many2one('res.partner', 'Customer') def _sms_get_partner_fields(self): return ['customer_id'] def _sms_get_number_fields(self): return ['phone_nbr', 'mobile_nbr']
class MaintenanceStage(models.Model): """ Model for case stages. This models the main stages of a Maintenance Request management flow. """ _name = 'maintenance.stage' _description = 'Maintenance Stage' _order = 'sequence, id' name = fields.Char('Name', required=True, translate=True) sequence = fields.Integer('Sequence', default=20) fold = fields.Boolean('Folded in Maintenance Pipe') done = fields.Boolean('Request Done')
class AccountIncoterms(models.Model): _name = 'account.incoterms' _description = 'Incoterms' name = fields.Char( 'Name', required=True, translate=True, help= "Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices." ) code = fields.Char('Code', size=3, required=True, help="Incoterm Standard Code") active = fields.Boolean( 'Active', default=True, help= "By unchecking the active field, you may hide an INCOTERM you will not use." )