123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- # -*- coding: utf-8 -*-
- from openerp import models, fields, api, _
- from openerp.exceptions import Warning as UserError
- class SearchBarcodePurchase(models.TransientModel):
- _name = 'search.barcode.purchase'
- _description = 'Buscar Producto por Codigo de Barra en Compras'
- line_ids = fields.One2many(
- 'search.barcode.purchase.line', 'wiz_id', string='Escaneos')
- product_code = fields.Char(
- string='Codigo de Barra EAN13',
- help="Escanee el código de barras aquí"
- )
- @api.onchange('product_code')
- def _onchange_product_code(self):
- if not self.product_code:
- return
- products = self.env['product.product'].search([
- ('factory_barcode', '=ilike', self.product_code)
- ])
- if len(products) == 1:
- prod = products[0]
- existing = self.line_ids.filtered(lambda l: l.product_id.id == prod.id)
- if existing:
- existing.qty += 1
- else:
- self.line_ids += self.line_ids.new({
- 'product_id': prod.id,
- 'qty': 1.0,
- })
- self.product_code = None
- elif len(products) > 1:
- desc = u"\n\nProductos con el código repetido: %s" % self.product_code
- for p in products:
- desc += u"\n%s" % p.product_tmpl_id.name
- self.product_code = None
- return {'warning': {
- 'title': _('Error'),
- 'message': _(u'Varios productos se han encontrado con el código ingresado.\n'
- u'Debe seleccionar el producto manualmente.') + desc}}
- else:
- self.product_code = None
- return {'warning': {
- 'title': _('Error'),
- 'message': _(u'Ningún producto encontrado con el código ingresado.\n'
- u'Debe seleccionar el producto manualmente.')}}
- @api.multi
- def add_multiple(self):
- self.ensure_one()
- purchase = self.env['purchase.order'].browse(self._context.get('active_id'))
- if not purchase:
- raise UserError(_('No se encontró la orden de compra activa.'))
- for line in self.line_ids:
- product = line.product_id
- existing = self.env['purchase.order.line'].search([
- ('order_id', '=', purchase.id),
- ('product_id', '=', product.id),
- ], limit=1)
- onchange_vals = self.env['purchase.order.line'].product_id_change(
- False, # en compras no siempre hay pricelist_id
- product.id,
- qty=line.qty,
- uom_id=product.uom_po_id.id,
- partner_id=purchase.partner_id.id,
- )
- if existing:
- existing.write({
- 'product_qty': existing.product_qty + line.qty
- })
- else:
- vals = {
- 'name': onchange_vals['value'].get('name'),
- 'order_id': purchase.id,
- 'product_id': product.id,
- 'product_uom': product.uom_po_id.id,
- 'product_qty': line.qty,
- 'date_planned': onchange_vals['value'].get('date_planned'),
- 'price_unit': onchange_vals['value'].get('price_unit'),
- 'taxes_id': [(6, 0, onchange_vals['value'].get('taxes_id') or [])],
- }
- self.env['purchase.order.line'].create(vals)
- return {'type': 'ir.actions.act_window_close'}
- class SearchBarcodePurchaseLine(models.TransientModel):
- _name = 'search.barcode.purchase.line'
- _description = 'Líneas del wizard de lectura de EAN'
- wiz_id = fields.Many2one(
- 'search.barcode.purchase', ondelete='cascade')
- product_id = fields.Many2one(
- 'product.product', string='Producto',
- domain=[('purchase_ok', '=', True)], required=True)
- qty = fields.Float('Cantidad', default=1.0, required=True)
- # from openerp import models, fields, api, _
- # from openerp.exceptions import Warning as UserError
- #
- # class Search_Barcode_Purchase(models.TransientModel):
- # _name = 'search.barcode.purchase'
- # _description = 'Buscar Producto por Codigo de Barra en Compras'
- #
- # quantity = fields.Float('Quantity', default='1.0')
- # products_ids = fields.Many2many( 'product.product',
- # string='Products',
- # domain=[('sale_ok', '=', True)], )
- # product_code = fields.Char( string='Codigo de Barra EAN13 ',
- # help="Este campo está diseñado para ser llenado con un lector de código de barras")
- #
- # @api.onchange('product_code')
- # def product_code_change(self):
- # if self.product_code:
- # products = self.env['product.product'].search([('factory_barcode', '=ilike', self.product_code)])
- #
- # if len(products) == 1:
- # self.products_ids += products[0]
- # self.product_code =None
- #
- # elif len(products) > 1:
- # descrpcion="\n\nProductos con el codigo repetido : "+str(self.product_code)
- # for xx in products:
- # descrpcion +="\n"+str(xx.product_tmpl_id.name)
- # self.product_code =None
- # return {'warning': {
- # 'title': _('Error'),
- # 'message': _(
- # 'Varios productos se han encontrado con el código ingresado,'
- # '\nDebe seleccionar el producto manualmente.'+descrpcion)}}
- # else:
- # self.product_code =None
- # return {'warning': {
- # 'title': _('Error'),
- # 'message': _(
- # 'Ningún producto encontrado con el código ingresado, Debe seleccionar el producto manualmente')}}
- #
- # @api.one
- # def add_multiple(self):
- # active_id = self._context['active_id']
- # purchase = self.env['purchase.order'].browse(active_id)
- #
- # # x=0
- # # if purchase.order_line:
- # # seq =purchase.order_line[len(purchase.order_line) - 1]
- # # x=seq.sequence
- #
- # for product_id in self.products_ids:
- # xxproducts = self.env['product.product'].search([('id', '=', product_id.id)])
- # orde_line_datos = self.env['purchase.order.line'].search([('order_id', '=', purchase.id), ('product_id', "=", xxproducts.id)])
- # # x += 1
- # product = self.env['purchase.order.line'].product_id_change(
- # purchase.pricelist_id.id,
- # product_id.id,
- # qty=self.quantity,
- # uom_id=product_id.uom_po_id.id,
- # partner_id=purchase.partner_id.id,
- # )
- # if orde_line_datos:
- # orde_line_datos.write({ 'product_qty' : (orde_line_datos.product_qty + 1)})
- # else:
- # val = {
- # 'name': product['value'].get('name'),
- # 'product_uom_qty': self.quantity,
- # 'order_id': active_id,
- # 'product_id': product_id.id or False,
- # 'product_uom': product_id.uom_po_id.id,
- # 'date_planned': product['value'].get('date_planned'),
- # 'price_unit': product['value'].get('price_unit'),
- # 'taxes_id': [(6, 0, product['value'].get('taxes_id'))],
- # # 'sequence': x,
- # }
- # self.env['purchase.order.line'].create(val)
- # if orde_line_datos:
- # orde_line_datos.write({
- # 'product_qty': orde_line_datos.product_qty + (self.quantity or 1.0)
- # })
- # else:
- # val = {
- # 'name': product['value'].get('name'),
- # 'product_qty': self.quantity or 1.0, # <-- antes: product_uom_qty
- # 'order_id': active_id,
- # 'product_id': product_id.id or False,
- # 'product_uom': product_id.uom_po_id.id,
- # 'date_planned': product['value'].get('date_planned'),
- # 'price_unit': product['value'].get('price_unit'),
- # 'taxes_id': [(6, 0, product['value'].get('taxes_id'))],
- # }
- # self.env['purchase.order.line'].create(val)
|