docs: 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)