Class: DocumentTypes::Search::InvoiceSearch

Inherits:
Object
  • Object
show all
Defined in:
app/services/document_types/search/invoice_search.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query, user = nil) ⇒ InvoiceSearch

Initialisation avec les paramètres de requête et l’utilisateur



7
8
9
10
# File 'app/services/document_types/search/invoice_search.rb', line 7

def initialize(query, user = nil)
  @query = query
  @user = user
end

Class Method Details

.applicable?(query) ⇒ Boolean

Vérifier si cette recherche doit être utilisée pour la requête donnée

Returns:

  • (Boolean)


34
35
36
37
38
39
# File 'app/services/document_types/search/invoice_search.rb', line 34

def self.applicable?(query)
  return false unless query['document_type'] == 'invoice'
  
  # Vérifier si des champs spécifiques aux factures sont présents
  query.keys.any? { |k| specific_fields.include?(k) }
end

.registerObject

S’enregistrer auprès du registre de types de documents



54
55
56
57
58
59
60
61
62
63
# File 'app/services/document_types/search/invoice_search.rb', line 54

def self.register
  # Assurez-vous que DocumentTypes::Registry est disponible
  if defined?(DocumentTypes::Registry)
    # Enregistrer la classe de recherche pour le type 'invoice'
    # DocumentTypes::Registry.register_search_handler('invoice', self)
    
    # Cette étape est maintenant gérée automatiquement via 
    # DocumentTypes::Registry.search_handler
  end
end

.specific_fieldsObject

Liste des champs spécifiques aux factures Cette méthode est utilisée à la fois pour déterminer l’applicabilité et pour exclure ces champs des filtres standards



44
45
46
47
48
49
50
51
# File 'app/services/document_types/search/invoice_search.rb', line 44

def self.specific_fields
  [
    'invoice_number', 'issue_date', 'total_amount', 'seller_name', 
    'buyer_name', 'net_amount', 'tax_amount', 'currency', 
    'payment_status', 'electronic_format', 'min_amount', 'max_amount',
    'start_date', 'end_date'
  ]
end

Instance Method Details

#executeObject

Méthode principale pour exécuter la recherche



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/services/document_types/search/invoice_search.rb', line 13

def execute
  # Convertir les paramètres de requête en critères pour InvoiceService
  invoice_criteria = extract_invoice_criteria
  
  # Utiliser InvoiceService pour effectuer la recherche
  invoice_records = DocumentTypes::InvoiceService.search(invoice_criteria)
  
  # Filtrer par l'accès utilisateur si nécessaire
  if @user && @user.respond_to?(:readable_doc_ids)
    doc_ids = @user.readable_doc_ids
    invoice_records = invoice_records.where(:doc_id.in => doc_ids)
  end
  
  # Obtenir les IDs des documents correspondants
  doc_ids = invoice_records.pluck(:doc_id)
  
  # Retourner les IDs pour permettre au service principal de charger les documents
  doc_ids
end