Module: Assistant::SalesManagement::Serializers
- Included in:
- BriefTools
- Defined in:
- app/services/assistant/sales_management/serializers.rb
Overview
Shared row-shape serializers for SalesManagement tool payloads.
Tools used to share these via private class methods on the monolithic
SalesManagementToolBuilder; extracting them keeps each sub-builder
focused on a single domain (briefs, employees, pipeline) without
losing the consistent on-the-wire shapes the model expects.
Class Method Summary collapse
- .serialize_activity(activity, include_opportunity: false) ⇒ Object
- .serialize_call_record(call_record) ⇒ Object
- .serialize_opportunity_summary(opp) ⇒ Object
- .serialize_order(order) ⇒ Object
- .serialize_quote(quote, include_ship_to: false) ⇒ Object
Class Method Details
.serialize_activity(activity, include_opportunity: false) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'app/services/assistant/sales_management/serializers.rb', line 13 def serialize_activity(activity, include_opportunity: false) { id: activity.id, type: activity.activity_type&.task_type || 'Note', status: activity.result_code || 'Open', party: activity.party&.full_name, assigned_to: activity.assigned_resource&.full_name, target: activity.target_datetime&.iso8601, completed_at: activity.completion_datetime&.iso8601, opportunity_id: include_opportunity ? activity.opportunity_id : nil, notes_excerpt: activity.notes.to_s.truncate(500).presence }.compact end |
.serialize_call_record(call_record) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 |
# File 'app/services/assistant/sales_management/serializers.rb', line 49 def serialize_call_record(call_record) { id: call_record.id, date: call_record.created_at&.iso8601, direction: call_record.try(:call_direction), duration_seconds: call_record.try(:duration_secs), outcome: call_record.try(:call_outcome), summary: call_record.try(:ai_summary).to_s.truncate(300).presence, transcript_preview: call_record.try(:transcript).to_s.truncate(400).presence }.compact end |
.serialize_opportunity_summary(opp) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 |
# File 'app/services/assistant/sales_management/serializers.rb', line 61 def serialize_opportunity_summary(opp) { id: opp.id, reference_number: opp.reference_number, name: opp.name, state: opp.state, value: opp.value&.to_f, close_date: opp.close_date&.iso8601, crm_url: "#{CRM_URL}/opportunities/#{opp.id}" }.compact end |
.serialize_order(order) ⇒ Object
39 40 41 42 43 44 45 46 47 |
# File 'app/services/assistant/sales_management/serializers.rb', line 39 def serialize_order(order) { id: order.id, reference_number: order.reference_number, state: order.state, created_at: order.created_at&.iso8601, crm_url: "#{CRM_URL}/orders/#{order.id}" }.compact end |
.serialize_quote(quote, include_ship_to: false) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 |
# File 'app/services/assistant/sales_management/serializers.rb', line 27 def serialize_quote(quote, include_ship_to: false) { id: quote.id, reference_number: quote.reference_number, state: quote.state, total: quote.try(:total_amount)&.to_f, created_at: quote.created_at&.iso8601, ship_to_present: include_ship_to ? quote.try(:shipping_address_id).present? : nil, crm_url: "#{CRM_URL}/quotes/#{quote.id}" }.compact end |