class Edition(models.Model): _name = 'test_new_api.creativework.edition' name = fields.Char() res_id = fields.Integer(required=True) res_model_id = fields.Many2one('ir.model', required=True) res_model = fields.Char(related='res_model_id.model', store=True)
class MrpRouting(models.Model): """ Specifies routings of work centers """ _name = 'mrp.routing' _description = 'Routings' name = fields.Char('Routing Name', required=True) active = fields.Boolean( 'Active', default=True, help="If the active field is set to False, it will allow you to hide the routing without removing it.") code = fields.Char( 'Reference', copy=False, default=lambda self: _('New'), readonly=True) note = fields.Text('Description') operation_ids = fields.One2many( 'mrp.routing.workcenter', 'routing_id', 'Operations', copy=True, oldname='workcenter_lines') location_id = fields.Many2one( 'stock.location', 'Production Location', help="Keep empty if you produce at the location where you find the raw materials. " "Set a location if you produce at a fixed location. This can be a partner location " "if you subcontract the manufacturing operations.") company_id = fields.Many2one( 'res.company', 'Company', default=lambda self: self.env['res.company']._company_default_get('mrp.routing')) @api.model def create(self, vals): if 'code' not in vals or vals['code'] == _('New'): vals['code'] = self.env['ir.sequence'].next_by_code('mrp.routing') or _('New') return super(MrpRouting, self).create(vals)
class ResConfigSettings(models.TransientModel): _inherit = "res.config.settings" google_drive_authorization_code = fields.Char(string='Authorization Code') google_drive_uri = fields.Char( compute='_compute_drive_uri', string='URI', help="The URL to generate the authorization code from Google") @api.depends('google_drive_authorization_code') def _compute_drive_uri(self): google_drive_uri = self.env['google.service']._get_google_token_uri( 'drive', scope=self.env['google.drive.config'].get_google_scope()) for config in self: config.google_drive_uri = google_drive_uri @api.model def get_values(self): res = super(ResConfigSettings, self).get_values() res.update( google_drive_authorization_code=self.env['ir.config_parameter']. sudo().get_param('google_drive_authorization_code'), ) return res def set_values(self): super(ResConfigSettings, self).set_values() params = self.env['ir.config_parameter'].sudo() authorization_code = self.google_drive_authorization_code refresh_token = False if authorization_code and authorization_code != params.get_param( 'google_drive_authorization_code'): refresh_token = self.env['google.service'].generate_refresh_token( 'drive', authorization_code) params.set_param('google_drive_authorization_code', authorization_code) params.set_param('google_drive_refresh_token', refresh_token)
class OauthAccessToken(models.Model): _name = 'oauth.access_token' token = fields.Char('Access Token', required=True) user_id = fields.Many2one('res.users', string='User', required=True) expires = fields.Datetime('Expires', required=True) scope = fields.Char('Scope') @api.multi def _get_access_token(self, user_id=None, create=False): if not user_id: user_id = self.env.user.id access_token = self.env['oauth.access_token'].sudo().search( [('user_id', '=', user_id)], order='id DESC', limit=1) if access_token: access_token = access_token[0] if access_token.is_expired(): access_token = None if not access_token and create: expires = datetime.now() + timedelta(seconds=int(self.env.ref('rest_api.oauth2_access_token_expires_in').sudo().value)) vals = { 'user_id': user_id, 'scope': 'userinfo', 'expires': expires.strftime(DEFAULT_SERVER_DATETIME_FORMAT), 'token': oauthlib_common.generate_token(), } access_token = self.env['oauth.access_token'].sudo().create(vals) # we have to commit now, because /oauth2/tokeninfo could # be called before we finish current transaction. self._cr.commit() if not access_token: return None return access_token.token @api.multi def is_valid(self, scopes=None): """ Checks if the access token is valid. :param scopes: An iterable containing the scopes to check or None """ self.ensure_one() return not self.is_expired() and self._allow_scopes(scopes) @api.multi def is_expired(self): self.ensure_one() return datetime.now() > fields.Datetime.from_string(self.expires) @api.multi def _allow_scopes(self, scopes): self.ensure_one() if not scopes: return True provided_scopes = set(self.scope.split()) resource_scopes = set(scopes) return resource_scopes.issubset(provided_scopes)
class RegistrationEditorLine(models.TransientModel): """Event Registration""" _name = "registration.editor.line" editor_id = fields.Many2one('registration.editor') sale_order_line_id = fields.Many2one('sale.order.line', string='Sales Order Line') event_id = fields.Many2one('event.event', string='Event', required=True) registration_id = fields.Many2one('event.registration', 'Original Registration') event_ticket_id = fields.Many2one('event.event.ticket', string='Event Ticket') email = fields.Char(string='Email') phone = fields.Char(string='Phone') name = fields.Char(string='Name', index=True) @api.multi def get_registration_data(self): self.ensure_one() return { 'event_id': self.event_id.id, 'event_ticket_id': self.event_ticket_id.id, 'partner_id': self.editor_id.sale_order_id.partner_id.id, 'name': self.name or self.editor_id.sale_order_id.partner_id.name, 'phone': self.phone or self.editor_id.sale_order_id.partner_id.phone, 'email': self.email or self.editor_id.sale_order_id.partner_id.email, 'origin': self.editor_id.sale_order_id.name, 'sale_order_id': self.editor_id.sale_order_id.id, 'sale_order_line_id': self.sale_order_line_id.id, }
class PostReason(models.Model): _name = "forum.post.reason" _description = "Post Closing Reason" _order = 'name' name = fields.Char(string='Closing Reason', required=True, translate=True) reason_type = fields.Char(string='Reason Type')
class MailShortcode(models.Model): """ Shortcode Canned Responses, allowing the user to defined shortcuts in its message. Should be applied before storing message in database. Emoji allowing replacing text with image for visual effect. Should be applied when the message is displayed (only for final rendering). These shortcodes are global and are available for every user. """ _name = 'mail.shortcode' _description = 'Canned Response / Shortcode' source = fields.Char( 'Shortcut', required=True, index=True, help="The shortcut which must be replaced in the Chat Messages") unicode_source = fields.Char( string='Unicode Character', help= "The source is replaced by this unicode character in the Chat Messages" ) substitution = fields.Text( 'Substitution', required=True, index=True, help="The escaped html code replacing the shortcut") description = fields.Char('Description') shortcode_type = fields.Selection([('image', 'Smiley'), ('text', 'Canned Response')], required=True, default='text', help="* Smiley are only used for HTML code to display an image "\ "* Text (default value) is used to substitute text with another text")
class ReportIntrastatCode(models.Model): _name = "report.intrastat.code" _description = "Intrastat code" _translate = False name = fields.Char(string='Intrastat Code') description = fields.Char(string='Description')
class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' @api.model def get_uri(self): return "%s/auth_oauth/signin" % ( self.env['ir.config_parameter'].get_param('web.base.url')) auth_oauth_google_enabled = fields.Boolean( string='Allow users to sign in with Google') auth_oauth_google_client_id = fields.Char(string='Client ID') server_uri_google = fields.Char(string='Server uri') @api.model def get_values(self): res = super(ResConfigSettings, self).get_values() google_provider = self.env.ref('auth_oauth.provider_google', False) res.update( auth_oauth_google_enabled=google_provider.enabled, auth_oauth_google_client_id=google_provider.client_id, server_uri_google=self.get_uri(), ) return res def set_values(self): super(ResConfigSettings, self).set_values() google_provider = self.env.ref('auth_oauth.provider_google', False) google_provider.write({ 'enabled': self.auth_oauth_google_enabled, 'client_id': self.auth_oauth_google_client_id, })
class Company(models.Model): _inherit = 'res.company' street_name = fields.Char('Street Name', compute='_compute_address', inverse='_inverse_street_name') street_number = fields.Char('House Number', compute='_compute_address', inverse='_inverse_street_number') street_number2 = fields.Char('Door Number', compute='_compute_address', inverse='_inverse_street_number2') def _get_company_address_fields(self, partner): address_fields = super(Company, self)._get_company_address_fields(partner) address_fields.update({ 'street_name': partner.street_name, 'street_number': partner.street_number, 'street_number2': partner.street_number2, }) return address_fields def _inverse_street_name(self): for company in self: company.partner_id.street_name = company.street_name def _inverse_street_number(self): for company in self: company.partner_id.street_number = company.street_number def _inverse_street_number2(self): for company in self: company.partner_id.street_number2 = company.street_number2
class HrPayrollAdviceLine(models.Model): ''' Bank Advice Lines ''' _name = 'hr.payroll.advice.line' _description = 'Bank Advice Lines' advice_id = fields.Many2one('hr.payroll.advice', string='Bank Advice') name = fields.Char('Bank Account No.', required=True) ifsc_code = fields.Char(string='IFSC Code') employee_id = fields.Many2one('hr.employee', string='Employee', required=True) bysal = fields.Float(string='By Salary', digits=dp.get_precision('Payroll')) debit_credit = fields.Char(string='C/D', default='C') company_id = fields.Many2one('res.company', related='advice_id.company_id', string='Company', store=True) ifsc = fields.Boolean(related='advice_id.neft', string='IFSC') @api.onchange('employee_id') def onchange_employee_id(self): self.name = self.employee_id.bank_account_id.acc_number self.ifsc_code = self.employee_id.bank_account_id.bank_bic or ''
class IrExports(models.Model): _name = "ir.exports" _order = 'name' name = fields.Char(string='Export Name') resource = fields.Char(index=True) export_fields = fields.One2many('ir.exports.line', 'export_id', string='Export ID', copy=True)
class CrmLeadAssignation(models.TransientModel): _name = 'crm.lead.assignation' forward_id = fields.Many2one('crm.lead.forward.to.partner', 'Partner Assignation') lead_id = fields.Many2one('crm.lead', 'Lead') lead_location = fields.Char('Lead Location') partner_assigned_id = fields.Many2one('res.partner', 'Assigned Partner') partner_location = fields.Char('Partner Location') lead_link = fields.Char('Lead Single Links') @api.onchange('lead_id') def _onchange_lead_id(self): lead = self.lead_id if not lead: self.lead_location = False else: lead_location = [] if lead.country_id: lead_location.append(lead.country_id.name) if lead.city: lead_location.append(lead.city) self.lead_location = ", ".join(lead_location) @api.onchange('partner_assigned_id') def _onchange_partner_assigned_id(self): partner = self.partner_assigned_id if not partner: self.lead_location = False else: partner_location = [] if partner.country_id: partner_location.append(partner.country_id.name) if partner.city: partner_location.append(partner.city) self.partner_location = ", ".join(partner_location)
class RestaurantFloor(models.Model): _name = 'restaurant.floor' name = fields.Char( 'Floor Name', required=True, help='An internal identification of the restaurant floor') pos_config_id = fields.Many2one('pos.config', string='Point of Sale') background_image = fields.Binary( 'Background Image', attachment=True, help= 'A background image used to display a floor layout in the point of sale interface' ) background_color = fields.Char( 'Background Color', help= 'The background color of the floor layout, (must be specified in a html-compatible format)', default='rgb(210, 210, 210)') table_ids = fields.One2many('restaurant.table', 'floor_id', string='Tables', help='The list of tables in this floor') sequence = fields.Integer('Sequence', help='Used to sort Floors', default=1)
class HrHolidaysRemainingLeavesUser(models.Model): _name = "hr.holidays.remaining.leaves.user" _description = "Total holidays by type" _auto = False name = fields.Char('Employee', readonly=True) no_of_leaves = fields.Integer('Remaining leaves', readonly=True) user_id = fields.Many2one('res.users', string='User', readonly=True) leave_type = fields.Char('Leave Type', readonly=True) def init(self): tools.drop_view_if_exists(self._cr, 'hr_holidays_remaining_leaves_user') self._cr.execute(""" CREATE or REPLACE view hr_holidays_remaining_leaves_user as ( SELECT min(hrs.id) as id, rr.name as name, sum(hrs.number_of_days) as no_of_leaves, rr.user_id as user_id, hhs.name as leave_type FROM hr_holidays as hrs, hr_employee as hre, resource_resource as rr,hr_holidays_status as hhs WHERE hrs.employee_id = hre.id and hre.resource_id = rr.id and hhs.id = hrs.holiday_status_id GROUP BY rr.name,rr.user_id,hhs.name ) """)
class ResRequestLink(models.Model): _name = 'res.request.link' _order = 'priority' name = fields.Char(required=True, translate=True) object = fields.Char(required=True) priority = fields.Integer(default=5)
class ResPartnerIndustry(models.Model): _description = 'Industry' _name = "res.partner.industry" _order = "name" name = fields.Char('Name', translate=True) full_name = fields.Char('Full Name', translate=True) active = fields.Boolean('Active', default=True)
class MailTestSimple(models.Model): _description = 'Test Simple Chatter Record' _name = 'mail.test.simple' _inherit = ['mail.thread'] name = fields.Char() email_from = fields.Char() description = fields.Text()
class ProductRibbon(models.Model): _name = 'product.ribbon' _description = 'Product Ribbon' _order = 'name' name = fields.Char(string='Name', size=20, required=True, translate=True) ribbon_color_back = fields.Char(string='Background Color', required=True) ribbon_color_text = fields.Char(string='Font Color', required=True)
class SeoMetadata(models.AbstractModel): _name = 'website.seo.metadata' _description = 'SEO metadata' website_meta_title = fields.Char("Website meta title", translate=True) website_meta_description = fields.Text("Website meta description", translate=True) website_meta_keywords = fields.Char("Website meta keywords", translate=True)
class ResCompany(models.Model): _inherit = 'res.company' pad_server = fields.Char( help="Etherpad lite server. Example: beta.primarypad.com") pad_key = fields.Char('Pad Api Key', help="Etherpad lite api key.", groups="base.group_system")
class IntrastatTransportMode(models.Model): _name = 'l10n_be_intrastat.transport_mode' code = fields.Char(required=True, readonly=True) name = fields.Char(string='Description', readonly=True) _sql_constraints = [ ('l10n_be_intrastat_trmodecodeunique', 'UNIQUE (code)', 'Code must be unique.'), ]
class account_payment_method(models.Model): _name = "account.payment.method" _description = "Payment Methods" name = fields.Char(required=True, translate=True) code = fields.Char(required=True) # For internal identification payment_type = fields.Selection([('inbound', 'Inbound'), ('outbound', 'Outbound')], required=True)
class HrContractAdvandageTemplate(models.Model): _name = 'hr.contract.advantage.template' _description = "Employee's Advantage on Contract" name = fields.Char('Name', required=True) code = fields.Char('Code', required=True) lower_bound = fields.Float('Lower Bound', help="Lower bound authorized by the employer for this advantage") upper_bound = fields.Float('Upper Bound', help="Upper bound authorized by the employer for this advantage") default_value = fields.Float('Default value for this advantage')
class ProductPackaging(models.Model): _name = "product.packaging" _description = "Packaging" _order = 'sequence' name = fields.Char('Package Type', required=True) sequence = fields.Integer('Sequence', default=1, help="The first in the sequence is the default one.") product_id = fields.Many2one('product.product', string='Product') qty = fields.Float('Quantity per Package', help="The total number of products you can have per pallet or box.") barcode = fields.Char('Barcode', copy=False, help="Barcode used for packaging identification.")
class AccountChartTemplate(models.Model): _inherit = 'account.chart.template' _order = 'name' name = fields.Char(translate=True) spoken_languages = fields.Char( string='Spoken Languages', help= "State here the languages for which the translations of templates could be loaded at the time of installation of this localization module and copied in the final object when generating them from templates. You must provide the language codes separated by ';'" )
class HrRuleInput(models.Model): _name = 'hr.rule.input' _description = 'Salary Rule Input' name = fields.Char(string='Description', required=True) code = fields.Char(required=True, help="The code that can be used in the salary rules") input_id = fields.Many2one('hr.salary.rule', string='Salary Rule Input', required=True)
class IntrastatRegion(models.Model): _name = 'l10n_be_intrastat.region' code = fields.Char(required=True) country_id = fields.Many2one('res.country', string='Country') name = fields.Char(translate=True) description = fields.Char() _sql_constraints = [ ('l10n_be_intrastat_regioncodeunique', 'UNIQUE (code)', 'Code must be unique.'), ]
class ResCompany(models.Model): _inherit = 'res.company' plafond_secu = fields.Float(string='Plafond de la Securite Sociale', digits=dp.get_precision('Payroll')) nombre_employes = fields.Integer(string='Nombre d\'employes') cotisation_prevoyance = fields.Float( string='Cotisation Patronale Prevoyance', digits=dp.get_precision('Payroll')) org_ss = fields.Char(string='Organisme de securite sociale') conv_coll = fields.Char(string='Convention collective')
class Unit(models.Model): _name = 'test.unit' name = fields.Char('Name', required=True) state = fields.Selection([('a', 'A'), ('b', 'B')], string='State') surname = fields.Char(compute='_compute_surname') @api.one @api.depends('name') def _compute_surname(self): self.surname = self.name or ''