127 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
# -*- coding: utf-8 -*-
 | 
						|
##############################################################################
 | 
						|
#
 | 
						|
#    datenpol gmbh
 | 
						|
#    Copyright (C) 2013-TODAY datenpol gmbh (<http://www.datenpol.at/>)
 | 
						|
#
 | 
						|
#    This program is free software: you can redistribute it and/or modify
 | 
						|
#    it under the terms of the GNU Affero General Public License as
 | 
						|
#    published by the Free Software Foundation, either version 3 of the
 | 
						|
#    License, or (at your option) any later version.
 | 
						|
#
 | 
						|
#    This program is distributed in the hope that it will be useful,
 | 
						|
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
#    GNU Affero General Public License for more details.
 | 
						|
#
 | 
						|
#    You should have received a copy of the GNU Affero General Public License
 | 
						|
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
#
 | 
						|
##############################################################################
 | 
						|
 | 
						|
from odoo import api, fields, models, _
 | 
						|
from odoo.exceptions import ValidationError
 | 
						|
 | 
						|
 | 
						|
class Partner(models.Model):
 | 
						|
    _name = 'res.partner'
 | 
						|
    _inherit = ['res.partner', 'dp_custom.helper']
 | 
						|
 | 
						|
    lastname2 = fields.Char(string='Midname')
 | 
						|
    company = fields.Char(string='Unternehmen')
 | 
						|
    info_kundennr = fields.Char(string='Info-Kundennr.')
 | 
						|
    info_uid = fields.Char(string='Info-UID')
 | 
						|
    endkunde = fields.Boolean(string='Endkunde', help='Beschreibt, ob es ein Endkunde ist')
 | 
						|
    line_ids = fields.Many2many(comodel_name='res.line', string='Produktionslinien')
 | 
						|
    portal_id = fields.Char(string='Portal-ID')
 | 
						|
    partner_sector_id = fields.Many2one(comodel_name='res.partner.sector', string='Branche')
 | 
						|
    dat_vat_check = fields.Date(string='Datum letzte UID-Prüfung')
 | 
						|
    active = fields.Boolean(track_visibility='onchange')
 | 
						|
 | 
						|
    _sql_constraints = [
 | 
						|
        ('ref_uniq', 'unique(ref)', 'Die Interne Referenz muss eindeutig sein')
 | 
						|
    ]
 | 
						|
 | 
						|
    @api.model
 | 
						|
    def portal_create_partner(self, vals):
 | 
						|
        vals = self.remove_not_specified_fields(vals)
 | 
						|
        vals = self.correct_values(vals)
 | 
						|
        if not vals.get('active', False):
 | 
						|
            vals['active'] = False
 | 
						|
        return self.create(vals)
 | 
						|
 | 
						|
    @api.model
 | 
						|
    def pg_create_company(self, vals):
 | 
						|
        vals = self.remove_not_specified_fields(vals)
 | 
						|
        vals = self.correct_values(vals)
 | 
						|
        partner = self.with_context(active_test=False).search([('ref', '=', vals['ref'])])
 | 
						|
        if partner:
 | 
						|
            if not partner.is_company:
 | 
						|
                raise ValidationError(_("Der Partner mit der Internen Referenz '%s' ist kein Unternehmen" % vals['ref']))
 | 
						|
            partner = self.write(vals)
 | 
						|
        else:
 | 
						|
            if not vals.get('is_company', False):
 | 
						|
                vals['is_company'] = True
 | 
						|
            partner = self.create(vals)
 | 
						|
            partner.property_account_fiscal_position = self.env['account.fiscal.position'].get_fiscal_position(
 | 
						|
                partner.id)
 | 
						|
        return partner
 | 
						|
 | 
						|
    @api.model
 | 
						|
    def correct_values(self, vals):
 | 
						|
        if vals.get('country_id', False):
 | 
						|
            country = self.env['res.country'].search([('code', '=', vals['country_id'])])
 | 
						|
            if country:
 | 
						|
                vals['country_id'] = country.id
 | 
						|
            else:
 | 
						|
                raise ValidationError(
 | 
						|
                    _("Das Land mit dem ISO-Code \'%s\' kann nicht zugeordnet werden" % vals['country_id']))
 | 
						|
 | 
						|
        if vals.get('line_ids', False):
 | 
						|
            line_ids = self.env['res.line'].search([('name', 'in', vals['line_ids'])])
 | 
						|
            if line_ids:
 | 
						|
                vals['line_ids'] = [(6, 0, line_ids.ids)]
 | 
						|
            else:
 | 
						|
                raise ValidationError(
 | 
						|
                    _("Die Produktionslinie mit dem Code \'%s\' kann nicht zugeordnet werden", vals['line_ids']))
 | 
						|
 | 
						|
        if vals.get('lang', False):
 | 
						|
            temp = vals['lang']
 | 
						|
            vals['lang'] = False
 | 
						|
            for selection in self.fields_get('lang')['lang']['selection']:
 | 
						|
                if selection[0].startswith(temp):
 | 
						|
                    vals['lang'] = selection[0]
 | 
						|
                    break
 | 
						|
            if not vals['lang']:
 | 
						|
                raise ValidationError(_("Die Sprache mit dem Code \'%s\' kann nicht zugeordnet werden" % temp))
 | 
						|
 | 
						|
        if vals.get('partner_sector_id', False):
 | 
						|
            branche = self.env['res.partner.sector'].search(
 | 
						|
                [('name', '=', vals['partner_sector_id'])])
 | 
						|
            if branche:
 | 
						|
                vals['partner_sector_id'] = branche.id
 | 
						|
            else:
 | 
						|
                raise ValidationError(_("Die Branche \'%s\' kann nicht zugeordnet werden" % vals['partner_sector_id']))
 | 
						|
 | 
						|
        return vals
 | 
						|
 | 
						|
    @api.model
 | 
						|
    def _get_specified_fields(self):
 | 
						|
        return ['name', 'firstname', 'lastname', 'street', 'street2', 'zip', 'city', 'country_id', 'tax', 'phone', 'mobile',
 | 
						|
                'endkunde', 'line_ids', 'lang', 'portal_id', 'email', 'opt_out', 'ref',
 | 
						|
                'partner_sector_id', 'comment', 'vat', 'property_payment_term_id',
 | 
						|
                'property_pricelist_id', 'date_vat_check', 'active']
 | 
						|
 | 
						|
 | 
						|
class PartnerSector(models.Model):
 | 
						|
    _name = 'res.partner.sector'
 | 
						|
    _description = 'Branche'
 | 
						|
    _order = 'id,name'
 | 
						|
 | 
						|
    name = fields.Char(string='Beteichnung', required=True)
 | 
						|
    sequence = fields.Integer(string='Sequenz')
 | 
						|
 | 
						|
    _sql_constraints = [
 | 
						|
        ('name_uniq', 'unique(name)', 'Die Bezeichnung muss eindeutig sein')
 | 
						|
    ]
 |