コード例 #1
0
class ProductPricelistItem(struct.Csv):
    _from = 'raya_dental_product_pricelist_item.txt'
    _first_row_titles = True
    _initialized = False

    _map = [
        parser.Int(src='price_version_id', dst='price_version_id'),
        parser.Custom(src='product_tmpl_id', dst='product_tmpl_id',
                      parser='parser_product_tmpl_id'),
        parser.Int(src='min_quantity', dst='min_quantity'),
        parser.Int(src='sequence', dst='sequence'),
        parser.Custom(src='base', dst='base', parser='parser_base'),
        parser.Float(src='price_discount', dst='price_discount'),
        parser.Float(src='price_surcharge', dst='price_surcharge'),
        parser.Float(src='price_round', dst='price_round'),
        parser.Float(src='price_min_margin', dst='price_min_margin'),
        parser.Float(src='price_max_margin', dst='price_max_margin'),
        parser.Str(src='filename', dst='filename'),
        parser.Str(src='sheetname', dst='sheetname'),
        parser.Str(src='row', dst='row'),
        parser.Custom(src='migration_key', dst='migration_key',
                      parser='parser_migration_key'),

    ]

    def parser_migration_key(self, value):
        value = value.strip()
        versions = self.env['product.pricelist'].search([
            ('migration_key', '=', value)])
        if versions:
            self.record.price_version_id = versions[0].id
            self.record.migration_key = value
        else:
            self.record.price_version_id = None
            self.record.migration_key = value

    def parser_product_tmpl_id(self, value):
        value = value.strip()
        templates = self.env['product.template'].search([
            ('default_code', 'like', value)])
        if templates:
            self.record.product_tmpl_id = templates[0].id
            self.record.name = templates[0].name
        else:
            self.record.product_tmpl_id = None

    def parser_base(self, value):
        value = value.strip()
        self.record.base = 1

    def to(self):
        for item in self.read():  # (count=200):
            try:
                i = self.env['product.pricelist.item'].create(item.dict())
            except Exception as e:
                _log.error('User data %s' % item.dict())
                _log.error('With errors: %s' % e)
                raise
            _log.info('PriceItem row=%s imported with id=%s' % (
                item.row, i.id))
コード例 #2
0
class StockInventoryLne(struct.Csv):
    # _from = 'raya_dental_product_inventory.txt'
    _from = 'raya_joyeria_product_inventory.txt'
    _first_row_titles = True
    _default_record = {}
    _initialized = False

    _map = [
        parser.Custom(src='ref', dst='product_id', parser='parser_product'),
        parser.Float(src='quantity', dst='product_qty'),
    ]

    def parser_product(self, value):
        value = value.strip()
        products = self.env['product.template'].search([('default_code', '=',
                                                         value)])
        if products:
            self.record.product_id = products[0].id or None

    def to(self):

        inventory_data = {
            'name': 'Carga Inventario inicial',
            'date': '2016-01-31',
        }
        inventory = self.env['stock.inventory'].create(inventory_data)
        for values in self.read():  # (count=200):
            if not values.product_id:
                continue
            if values.product_qty < 0:
                continue
            values.inventory_id = inventory.id
            values.location_id = inventory.location_id.id
            try:
                i = self.env['stock.inventory.line'].create(values.dict())
            except Exception as e:
                _log.error('Inventory data %s' % values.dict())
                _log.error('With errors: %s' % e)
                raise
            _log.info('InventoryLine "%s" imported with id %s' %
                      (values.product_id, i.id))
コード例 #3
0
class ProductTemplate(struct.Csv):
    _from = 'raya_dental_product.txt'
    _first_row_titles = True
    _initialized = False

    _map = [
        parser.Custom(src='purchase_ok',
                      dst='purchase_ok',
                      parser='parser_boolean'),
        parser.Custom(src='sale_ok', dst='sale_ok', parser='parser_boolean'),
        parser.Str(src='default_code', dst='default_code'),
        parser.Str(src='name', dst='name'),
        parser.Str(src='type', dst='type'),
        parser.Str(src='categ_id', dst='categ_id', parser='parser_categ'),
        parser.Str(src='cost_method', dst='cost_method'),
        parser.Custom(src='uom_id', dst='uom_id', parser='parser_uom_id'),
        parser.Custom(src='uom_po_id',
                      dst='uom_po_id',
                      parser='parser_uom_po_id'),
        parser.Float(src='list_price', dst='list_price'),
        parser.Float(src='standard_price', dst='standard_price'),
        parser.Str(src='route_order', dst='route_order'),
        parser.Str(src='route_manufacture', dst='route_manufacture'),
        parser.Custom(src='route_purchase',
                      dst='route_ids',
                      parser='parser_route_ids'),
        parser.Int(src='sale_delay', dst='sale_delay'),
        parser.Float(src='weight', dst='weight'),
        parser.Float(src='weight_net', dst='weight_net'),
        parser.Float(src='volume', dst='volume'),
        parser.Custom(src='property_account_income',
                      dst='property_account_income',
                      parser='parser_property_account_income'),
        parser.Custom(src='property_account_expense',
                      dst='property_account_expense',
                      parser='parser_property_account_expense'),
        parser.Custom(src='taxes_id', dst='taxes_id',
                      parser='parser_taxes_id'),
        parser.Custom(src='supplier_taxes_id',
                      dst='supplier_taxes_id',
                      parser='parser_supplier_taxes_id'),
        parser.Custom(src='track_incoming',
                      dst='track_incoming',
                      parser='parser_track_incoming'),
        parser.Custom(src='track_outgoing',
                      dst='track_outgoing',
                      parser='parser_track_outgoing'),
        parser.Custom(src='track_production',
                      dst='track_production',
                      parser='parser_track_production'),
        parser.Str(src='loc_rack', dst='loc_rack'),
        parser.Str(src='loc_row', dst='loc_row'),
        parser.Str(src='loc_row', dst='loc_row'),
        parser.Str(src='loc_case', dst='loc_case'),
        parser.Custom(src='available_in_pos',
                      dst='available_in_pos',
                      parser='parser_boolean'),
        parser.Str(src='description', dst='description'),
        parser.Str(src='description_sale', dst='description_sale'),
        parser.Int(src='produce_delay', dst='produce_delay'),
        parser.Float(src='unidadesxembase', dst='product_qty_package'),
        parser.Str(src='filename', dst='filename'),
        parser.Str(src='sheetname', dst='sheetname'),
        parser.Custom(src='product_brand_id',
                      dst='product_brand_id',
                      parser='parser_product_brand'),
        parser.Custom(src='default_code',
                      dst='migration_key',
                      parser='parser_migration_key'),
        parser.Str(src='row', dst='row'),
    ]

    def parser_boolean(self, value):
        value = value.strip()
        if value == 'S':
            return True
        else:
            return False

    def parser_categ(self, value):
        value = value.strip()
        categorys = self.env['product.category'].search([('migration_key',
                                                          'ilike', value)])
        if categorys:
            self.record.categ_id = categorys[0].id
        else:
            self.record.categ_id = 1

    def parser_uom_id(self, value):
        value = value.strip()
        uoms = self.env['product.uom'].search([('name', '=', value)])
        if uoms:
            self.record.uom_id = uoms[0].id
        else:
            self.record.uom_id = 1

    def parser_uom_po_id(self, value):
        value = value.strip()
        uoms = self.env['product.uom'].search([('name', '=', value)])
        if uoms:
            self.record.uom_po_id = uoms[0].id
        else:
            self.record.uom_po_id = 1

    def parser_route_ids(self, value):
        value = value.strip()
        route_ids = []
        if value == 'S':
            buy_id = self.env['stock.location.route'].search([('name', 'ilike',
                                                               'buy')])
            route_ids.append(buy_id[0].id or None)
        elif self.record.route_manufacture == 'S':
            manufactures = self.env['stock.location.route'].search([
                ('name', 'ilike', 'manufacture')
            ])
            route_ids.append(manufactures[0].id or None)
        elif self.record.route_order == 'S':
            orders = self.env['stock.location.route'].search([('name', 'ilike',
                                                               'pedido')])
            route_ids.append(orders[0].id or None)
        self.record.route_ids = [(6, 0, route_ids)] or None

    def parser_taxes_id(self, value):
        value = value.strip()
        taxes = self.env['account.tax'].search([('description', '=', value)])
        if taxes:
            self.record.taxes_id = [(6, 0, [taxes[0].id])]
        else:
            self.record.taxes_id = None

    def parser_supplier_taxes_id(self, value):
        value = value.strip()
        taxes = self.env['account.tax'].search([('description', '=', value)])
        if taxes:
            self.record.supplier_taxes_id = [(6, 0, [taxes[0].id])]
        else:
            self.record.supplier_taxes_id = None

    def parser_property_account_income(self, value):
        value = value.strip()
        accounts = self.env['account.account'].search([('code', '=', value)])
        if accounts:
            self.record.property_account_income = accounts[0].id
        else:
            self.record.property_account_income = None

    def parser_property_account_expense(self, value):
        value = value.strip()
        accounts = self.env['account.account'].search([('code', '=', value)])
        if accounts:
            self.record.property_account_expense = accounts[0].id
        else:
            self.record.property_account_expense = None

    def parser_track_incoming(self, value):
        value = value.strip()
        if value == 'S':
            self.record.track_incoming = True
        else:
            self.record.track_incoming = False

    def parser_track_outgoing(self, value):
        value = value.strip()
        if value == 'S':
            self.record.track_outgoing = True
        else:
            self.record.track_outgoing = False

    def parser_track_production(self, value):
        value = value.strip()
        if value == 'S':
            self.record.track_production = True
        else:
            self.record.track_production = False

    def parser_migration_key(self, value):
        self.record.migration_key = self.record.default_code.strip() or None

    def parser_product_brand(self, value):
        value = value.strip()
        brands = self.env['product.brand'].search([('name', 'like', value)])
        if brands:
            self.record.product_brand_id = brands[0].id
        else:
            self.record.product_brand_id = None

    def to(self):
        for product in self.read():  # (count=200):
            try:
                p = self.env['product.template'].create(product.dict())
            except Exception as e:
                _log.error('Product data %s' % product.dict())
                _log.error('With errors: %s' % e)
                raise
            _log.info('Product "%s" imported with id %s' %
                      (product.name, p.id))
コード例 #4
0
class Partner(struct.Csv):

    _PAY_MODE = {
        "10": "Giro",
        "15": "Giro",
        "1G": "Giro",
        "1V": "Giro",
        "2G": "Giro",
        "3G": "Giro",
        "4G": "Giro",
        "5V": "Giro",
        "90": "Giro",
        "AL": "A La Vista +1000E x2G",
        "AV": "A La Vista",
        "CO": "Recibo",
        "CR": "ContraReembolso",
        "CX": "[*] Efectivo",
        "DB": "Domiciliado",
        "EF": "Efectivo",
        "EM": "eMail",
        "ET": "Talon/Cheque",
        "F0": "Financiado",
        "GI": "Giro Postal",
        "TA": "Pagare",
        "TB": "Transferencia CajaSur",
        "TR": "Transferencia Santander",
        "TV": "Tarjeta Credito",
    }
    _PAY_TERM = {
        "10": "39 Dias",
        "15": "15 Dias",
        "1G": "30 Dias",
        "1V": "60 Dias",
        "2G": "30/60 Dias",
        "3G": "30/60/90 Dias",
        "4G": "30/60/90/120 Dias",
        "5V": "30/60/90/120/180 Dias",
        "90": "90 Dias",
        "AL": "mediato",
        "AV": "mediato",
        "CO": "mediato",
        "CR": "mediato",
        "CX": "mediato",
        "DB": "5 Dias",
        "EF": "mediato",
        "EM": "mediato",
        "ET": "mediato",
        "F0": "12 Meses",
        "GI": "mediato",
        "TA": "mediato",
        "TB": "mediato",
        "TR": "mediato",
        "TV": "mediato"
    }

    _from = 'raya_joyeria_partner.txt'
    _first_row_titles = True
    _default_record = {
        'is_company': True,
        'vat_subjected': True,
        'comment': '',
    }
    _initialized = False

    _map = [
        parser.Custom(src='customer', dst='customer', parser='parser_boolean'),
        parser.Custom(src='supplier', dst='supplier', parser='parser_boolean'),
        parser.Str(src='ref', dst='ref'),
        parser.Str(src='name', dst='name'),
        parser.Str(src='comercial', dst='comercial'),
        parser.Custom(src='category_id',
                      dst='category_id',
                      parser='parser_category_id'),
        parser.Vat(src='vat', dst='vat'),
        parser.Str(src='street', dst='street'),
        parser.Str(src='city', dst='city'),
        parser.Str(src='state_id', dst='state_id'),
        parser.Str(src='country', dst='country_id'),
        parser.Custom(src='zip', dst='zip', parser='parser_zip'),
        parser.Str(src='phone', dst='phone'),
        parser.Str(src='mobile', dst='mobile'),
        parser.Str(src='fax', dst='fax'),
        parser.Str(src='email', dst='email'),
        parser.Str(src='web', dst='website'),
        parser.Date(src='date', dst='date'),
        parser.Custom(src='user_id', dst='user_id', parser='parser_user_id'),
        parser.Custom(src='property_account_position',
                      dst='property_account_position',
                      parser='parser_property_account_position'),
        parser.Custom(src='property_account_receivable',
                      dst='property_account_receivable',
                      parser='parser_property_account_receivable'),
        parser.Custom(src='customer_payment_mode_code',
                      dst='customer_payment_mode',
                      parser='parser_customer_payment_mode'),
        parser.Float(src='credit', dst='credit'),
        parser.Custom(src='property_account_payable',
                      dst='property_account_payable',
                      parser='parser_property_account_payable'),
        parser.Custom(src='supplier_payment_mode_code',
                      dst='supplier_payment_mode',
                      parser='parser_supplier_payment_mode'),
        parser.Custom(src='comment', dst='comment', parser='parser_comment'),
        parser.Str(src='filename', dst='filename'),
        parser.Str(src='sheetname', dst='sheetname'),
        parser.Str(src='row', dst='row'),
    ]

    def parser_comment(self, value):
        value = value.strip()
        self.record.comment = value or ''

    def parser_boolean(self, value):
        value = value.strip()
        if value == 'S':
            return True
        else:
            return False

    def parser_category_id(self, value):
        value = value.strip()
        categorys = value.split(',')
        result = []
        for category in categorys:
            category_ids = self.env['res.partner.category'].search([
                ('name', '=', category)
            ])
            if category_ids:
                result.append(category_ids[0].id)
                self.record.category_id = categorys[0]
        if result:
            self.record.category_id = [(6, 0, result)]
        else:
            self.record.category_id = None

    def parser_user_id(self, value):
        value = value.strip()
        users = self.env['res.users'].search([('name', '=', value)])
        if users:
            self.record.user_id = users[0]
        else:
            self.record.user_id = None

    def parser_zip(self, value):
        value = value.strip()
        zips = self.env['res.better.zip'].search([('name', '=', value)])
        if zips:
            self.record.zip_id = zips[0].id or None
            self.record.zip = zips[0].name or None
            self.record.city = zips[0].city or None
            self.record.state_id = zips[0].state_id.id or None
            self.record.country_id = zips[0].country_id.id or None
        else:
            self.record.comment += 'Direccion\n=========\n%s\n%s \n' % (
                self.record.get('street', ''), value)
            self.record.comment += 'Codigo postal\n=========\n%s\n%s \n' % (
                self.record.get('zip', ''), value)
            self.record.comment += 'Poblacion\n=========\n%s\n%s \n' % (
                self.record.get('city', ''), value)
            self.record.comment += 'Provincia\n=========\n%s\n%s \n' % (
                self.record.get('state_id', ''), value)
            self.record.comment += 'Pais\n=========\n%s\n%s \n' % (
                self.record.get('country_id', ''), value)
            self.record.zip_id = None
            self.record.state_id = None
            self.record.country_id = None

    def parser_property_account_position(self, value):
        value = value.strip()
        account_positions = self.env['account.fiscal.position'].search([
            ('name', '=', value)
        ])
        if account_positions:
            self.record.property_account_position = account_positions[0].id
        else:
            self.record.comment += 'Posicion Fiscal\n=========\n%s\n%s \n' % (
                self.record.get('property_account_position', ''), value)

    def parser_property_account_receivable(self, value):
        value = value.strip()
        if value == "":
            value = '430000000'
        accounts = self.env['account.account'].search([('code', '=', value)])
        if accounts:
            self.record.property_account_receivable = accounts[0].id
        else:
            self.record.property_account_receivable = None

    def parser_property_account_payable(self, value):
        value = value.strip()
        if value == "":
            value = '400000000'
        accounts = self.env['account.account'].search([('code', '=', value)])
        if accounts:
            self.record.property_account_payable = accounts[0].id
        else:
            self.record.property_account_payable = None

    def parser_customer_payment_mode(self, value):
        value = value.strip()
        if value:
            mode = self._PAY_MODE[value] or None
            term = self._PAY_TERM[value] or None
            payment_modes = self.env['payment.mode'].search([('name', '=',
                                                              mode)])
            payment_terms = self.env['account.payment.term'].search([
                ('name', '=', term)
            ])
            if payment_modes:
                self.record.customer_payment_mode = payment_modes[0].id
            else:
                self.record.customer_payment_mode = None

            if payment_terms:
                self.record.property_payment_term = payment_terms[0].id
            else:
                self.record.property_payment_term = None

    def parser_supplier_payment_mode(self, value):
        value = value.strip()
        if value:
            mode = self._PAY_MODE[value] or None
            term = self._PAY_TERM[value] or None

            payment_modes = self.env['payment.mode'].search([('name', '=',
                                                              mode)])
            payment_terms = self.env['account.payment.term'].search([
                ('name', '=', term)
            ])

            if payment_modes:
                self.record.supplier_payment_mode = payment_modes[0].id
            else:
                self.record.supplier_payment_mode = None
            if payment_terms:
                self.record.property_supplier_payment_term = payment_terms[
                    0].id
            else:
                self.record.property_supplier_payment_term = None

    def to(self):
        for partner in self.read():  # (count=200):
            try:
                p = self.env['res.partner'].create(partner.dict())
            except Exception as e:
                _log.error('User data %s' % partner.dict())
                _log.error('With errors: %s' % e)
                raise
            _log.info('Partner "%s" imported with id %s' %
                      (partner.name, p.id))