def save(self, *args, **kwargs):
        if self.pk is None:
            if hasattr(self, 'product'):
                if not self.description:
                    self.description = self.product
                self.price_recommended = self.product.price_base
            elif hasattr(self, 'line_order'):
                if not self.description:
                    self.description = self.line_order.product
                self.price_recommended = self.line_order.price_base

        if hasattr(self, 'tax') and hasattr(self, 'type_tax'):
            self.tax = self.type_tax.tax

        if hasattr(self, 'product'):
            self.tax_label = self.product.product.tax.name
            if self.product.code:
                self.code = self.product.code
            else:
                self.code = self.product.product.code

        """
        si al guardar una linea asociada a un documento bloqueado (lock==True), duplicar el documento en una nueva versión
        """
        self.update_total(force_save=False)
        if 'force_save' in kwargs:
            kwargs.pop('force_save')
        return super(GenLineProduct, self).save(*args, **kwargs)